diff --git a/.github/workflows/verify-pr.yml b/.github/workflows/verify-pr.yml index 8564756..5b59c70 100644 --- a/.github/workflows/verify-pr.yml +++ b/.github/workflows/verify-pr.yml @@ -1,4 +1,4 @@ -name: Verify pull request +name: Verify PR on: pull_request: types: [opened, synchronize, reopened, ready_for_review] @@ -10,31 +10,36 @@ concurrency: jobs: verify: runs-on: ubuntu-latest - timeout-minutes: 20 + timeout-minutes: 25 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 with: ref: ${{ github.event.pull_request.head.sha }} persist-credentials: false - - uses: pnpm/action-setup@v4 - - uses: actions/setup-node@v4 + - name: Retain exact source + run: | + mkdir -p verification + git rev-parse HEAD > verification/commit.txt + git archive --format=tar.gz HEAD > verification/source.tar.gz + - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 with: node-version: 22 cache: pnpm - - name: Verify actual package - shell: bash + - run: pnpm install --frozen-lockfile > verification/install.log 2>&1 || { tail -60 verification/install.log; exit 1; } + - run: pnpm run typecheck > verification/typecheck.log 2>&1 || { cat verification/typecheck.log; exit 1; } + - name: Test all source + run: pnpm exec vitest run --reporter=json --outputFile=verification/tests.json > verification/tests.log 2>&1 || { tail -100 verification/tests.log; exit 1; } + - name: Verify packed release without publishing + run: pnpm run release > verification/release.log 2>&1 || { tail -100 verification/release.log; exit 1; } + - name: Pack tested consumer run: | - set -euo pipefail - mkdir -p verification - git rev-parse HEAD > verification/commit.txt - pnpm install --frozen-lockfile 2>&1 | tee verification/install.log - pnpm run typecheck 2>&1 | tee verification/typecheck.log - pnpm run test -- --reporter=default --reporter=json --outputFile=verification/tests.json 2>&1 | tee verification/tests.log - pnpm run release 2>&1 | tee verification/release.log - git archive HEAD > verification/source.tar - - uses: actions/upload-artifact@v4 + npm pack --ignore-scripts --pack-destination verification > verification/pack.log + sha256sum verification/*.tgz verification/source.tar.gz > verification/SHA256SUMS + git diff --exit-code + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 if: always() with: - name: shared-primitives-${{ github.event.pull_request.number }} + name: messaging-verification-${{ github.event.pull_request.number }} path: verification/ retention-days: 7 diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f6b0a5..a056991 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ ## Unreleased ### Added +- Durable broker consent receipts expose the grant, app, connection and owner identity. `requireBrokerGrantReceipt` verifies exact identity and scope before unattended use; older host responses remain usable for immediate calls but cannot invent a durable grant. +- Shared Linq owned-line inventory projection for hosted assistants, preserving unknown/critical line health and distinguishing provider-assigned numbers from an unsupported purchase API. - `@tangle-network/agent-integrations/tangle-search`: typed Router search client and request/response helpers. Provider-neutral, explicit host credentials, request correlation, unknown-cost preservation, cancellation and bounded JSON reads. diff --git a/data/bundled-adapter-manifests.json b/data/bundled-adapter-manifests.json index 819a3b3..46e558e 100644 --- a/data/bundled-adapter-manifests.json +++ b/data/bundled-adapter-manifests.json @@ -1 +1 @@ -[{"kind":"activecampaign","displayName":"ActiveCampaign","description":"Manage ActiveCampaign accounts, contacts, lists, and tags in the marketing automation + CRM platform.","auth":{"kind":"api-key","hint":"ActiveCampaign API key from Settings → Developer. The connection must also store the per-account apiUrl (e.g. https://youraccount.api-us1.com)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"accounts.create","description":"Create an ActiveCampaign account (organization) record.","parameters":{"type":"object","properties":{"account":{"type":"object","properties":{"name":{"type":"string"},"accountUrl":{"type":"string"},"fields":{"type":"array","items":{"type":"object","properties":{"customFieldId":{"type":"integer"},"fieldValue":{"type":"string"}},"required":["customFieldId","fieldValue"]}}},"required":["name"]}},"required":["account"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"accounts.update","description":"Update an existing ActiveCampaign account by id.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"account":{"type":"object","properties":{"name":{"type":"string"},"accountUrl":{"type":"string"},"fields":{"type":"array","items":{"type":"object","properties":{"customFieldId":{"type":"integer"},"fieldValue":{"type":"string"}},"required":["customFieldId","fieldValue"]}}}}},"required":["accountId","account"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.list.subscription","description":"Subscribe or unsubscribe a contact from a list. status=1 subscribes, status=2 unsubscribes.","parameters":{"type":"object","properties":{"contact":{"type":"integer"},"list":{"type":"integer"},"status":{"type":"integer","enum":[1,2]}},"required":["contact","list","status"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.create","description":"Create a contact in ActiveCampaign.","parameters":{"type":"object","properties":{"contact":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"phone":{"type":"string"},"fieldValues":{"type":"array","items":{"type":"object","properties":{"field":{"type":"integer"},"value":{"type":"string"}},"required":["field","value"]}}},"required":["email"]}},"required":["contact"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update an existing contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"contact":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"phone":{"type":"string"},"fieldValues":{"type":"array","items":{"type":"object","properties":{"field":{"type":"integer"},"value":{"type":"string"}},"required":["field","value"]}}}}},"required":["contactId","contact"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"accounts.contacts.associate","description":"Associate a contact with an account, optionally setting a job title.","parameters":{"type":"object","properties":{"contact":{"type":"integer"},"account":{"type":"integer"},"jobTitle":{"type":"string"}},"required":["contact","account"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.tags.add","description":"Add a tag to a contact.","parameters":{"type":"object","properties":{"contact":{"type":"integer"},"tag":{"type":"integer"}},"required":["contact","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.get","description":"Read a single contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.search","description":"Search contacts by email or filter parameters.","parameters":{"type":"object","properties":{"email":{"type":"string"},"search":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.get","description":"Read a single account by id.","parameters":{"type":"object","properties":{"accountId":{"type":"string"}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.search","description":"List or search accounts.","parameters":{"type":"object","properties":{"search":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"actualbudget","displayName":"Actual Budget","description":"Query budget data, categories, and accounts. Import transactions.","auth":{"kind":"api-key","hint":"Actual Budget server URL, password, and sync ID."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"budget.get","description":"Get budget for a specific month and year.","parameters":{"type":"object","properties":{"month":{"type":"string"},"year":{"type":"string"}},"required":["month","year"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"categories.list","description":"List all transaction categories.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.list","description":"List all accounts.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transactions.import","description":"Import a single transaction into an account.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"payeeName":{"type":"string"},"amount":{"type":"number"},"date":{"type":"string"},"category":{"type":"string"},"notes":{"type":"string"},"cleared":{"type":"boolean"},"importedId":{"type":"string"}},"required":["accountId","date"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.batch-import","description":"Import multiple transactions at once.","parameters":{"type":"object","properties":{"transactions":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"date":{"type":"string"},"payeeName":{"type":"string"},"amount":{"type":"number"},"category":{"type":"string"},"notes":{"type":"string"}},"required":["accountId","date"]}}},"required":["transactions"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.create","description":"Append a single transaction to the configured budget.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"date":{"type":"string"},"payeeName":{"type":"string"},"amount":{"type":"number"},"category":{"type":"string"},"notes":{"type":"string"},"cleared":{"type":"boolean"}},"required":["accountId","date","amount"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.update","description":"Update amount/payee/category on an existing transaction.","parameters":{"type":"object","properties":{"transactionId":{"type":"string"},"amount":{"type":"number"},"payeeName":{"type":"string"},"category":{"type":"string"},"notes":{"type":"string"},"cleared":{"type":"boolean"}},"required":["transactionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.delete","description":"Remove a transaction by id.","parameters":{"type":"object","properties":{"transactionId":{"type":"string"}},"required":["transactionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"categories.create","description":"Create a new budget category.","parameters":{"type":"object","properties":{"name":{"type":"string"},"groupId":{"type":"string"},"isIncome":{"type":"boolean"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"acuity-scheduling","displayName":"Acuity Scheduling","description":"Read availability and manage Acuity Scheduling appointments, calendars, appointment types, and clients.","auth":{"kind":"oauth2","authorizationUrl":"https://acuityscheduling.com/oauth2/authorize","tokenUrl":"https://acuityscheduling.com/oauth2/token","scopes":["api-v1"],"clientIdEnv":"ACUITY_OAUTH_CLIENT_ID","clientSecretEnv":"ACUITY_OAUTH_CLIENT_SECRET"},"category":"calendar","defaultConsistencyModel":"authoritative","capabilities":[{"name":"appointments.list","description":"List appointments with date, calendar, type, client, and cancellation filters.","parameters":{"type":"object","properties":{"minDate":{"type":"string","description":"YYYY-MM-DD lower date bound."},"maxDate":{"type":"string","description":"YYYY-MM-DD upper date bound."},"calendarID":{"type":"integer"},"appointmentTypeID":{"type":"integer"},"canceled":{"type":"boolean"},"firstName":{"type":"string"},"lastName":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"addonID":{"type":"integer"},"excludeForms":{"type":"boolean"},"max":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"appointments.get","description":"Read one appointment by id.","parameters":{"type":"object","properties":{"appointmentId":{"type":"integer","minimum":1,"description":"Acuity appointment id."}},"required":["appointmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"appointments.create","description":"Book a new appointment for a client.","parameters":{"type":"object","properties":{"appointmentTypeID":{"type":"integer"},"datetime":{"type":"string","description":"Provider-formatted appointment start time."},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"calendarID":{"type":"integer"},"phone":{"type":"string"},"timezone":{"type":"string"},"certificate":{"type":"string"},"notes":{"type":"string"},"fields":{"type":"array","items":{"type":"object"}},"addonIDs":{"type":"array","items":{"type":"integer"}},"labels":{"type":"array","maxItems":1,"items":{"type":"object"}},"smsOptIn":{"type":"boolean"},"noEmail":{"type":"boolean"},"admin":{"type":"boolean","description":"Book as an administrator, bypassing availability checks."}},"required":["appointmentTypeID","datetime","firstName","lastName","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"appointments.reschedule","description":"Move an appointment to a new date, time, or calendar.","parameters":{"type":"object","properties":{"appointmentId":{"type":"integer","minimum":1,"description":"Acuity appointment id."},"datetime":{"type":"string"},"calendarID":{"type":"integer"},"timezone":{"type":"string"},"admin":{"type":"boolean","description":"Reschedule as an administrator."},"noEmail":{"type":"boolean","description":"Suppress rescheduling email and SMS."}},"required":["appointmentId","datetime"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"appointments.cancel","description":"Cancel an appointment and optionally mark it as a no-show.","parameters":{"type":"object","properties":{"appointmentId":{"type":"integer","minimum":1,"description":"Acuity appointment id."},"cancelNote":{"type":"string","description":"Message sent with cancellation notifications."},"noShow":{"type":"boolean"},"admin":{"type":"boolean","description":"Cancel as an administrator."},"noEmail":{"type":"boolean","description":"Suppress cancellation email and SMS."}},"required":["appointmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"appointment-types.list","description":"List appointment types and their durations, prices, and availability settings.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calendars.list","description":"List booking calendars and their owners/locations.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"availability.dates","description":"List dates with availability for an appointment type in a month.","parameters":{"type":"object","properties":{"month":{"type":"string","description":"Month in YYYY-MM format."},"appointmentTypeID":{"type":"integer"},"calendarID":{"type":"integer"},"timezone":{"type":"string"}},"required":["month","appointmentTypeID"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"availability.times","description":"List bookable times on one date for an appointment type.","parameters":{"type":"object","properties":{"date":{"type":"string","description":"Date in YYYY-MM-DD format."},"appointmentTypeID":{"type":"integer"},"calendarID":{"type":"integer"},"timezone":{"type":"string"},"ignoreAppointment":{"type":"integer"}},"required":["date","appointmentTypeID"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"clients.list","description":"List clients with optional search and pagination.","parameters":{"type":"object","properties":{"search":{"type":"string"},"offset":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"blocks.list","description":"List blocked-off calendar time with optional date/calendar filters.","parameters":{"type":"object","properties":{"minDate":{"type":"string"},"maxDate":{"type":"string"},"calendarID":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"acumbamail","displayName":"Acumbamail","description":"Manage Acumbamail subscriber lists, subscribers, and email templates.","auth":{"kind":"api-key","hint":"Acumbamail API auth token from account settings."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"subscriber.add_update","description":"Add a subscriber to a list, or update merge fields on an existing subscriber if update_subscriber is enabled.","parameters":{"type":"object","properties":{"list_id":{"type":"string"},"merge_fields":{"type":"object"},"double_option":{"type":"boolean"},"update_subscriber":{"type":"boolean"}},"required":["list_id","merge_fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.create","description":"Create a new subscriber list with sender identity and company contact info.","parameters":{"type":"object","properties":{"name":{"type":"string"},"sender_email":{"type":"string"},"company":{"type":"string"},"country":{"type":"string"},"city":{"type":"string"},"address":{"type":"string"},"phone":{"type":"string"}},"required":["name","sender_email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriber.unsubscribe","description":"Unsubscribe a subscriber from a specific list without removing them from the account.","parameters":{"type":"object","properties":{"list_id":{"type":"string"},"email":{"type":"string"}},"required":["list_id","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"lists.delete","description":"Permanently delete a subscriber list and all of its subscribers.","parameters":{"type":"object","properties":{"list_id":{"type":"string"}},"required":["list_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"templates.duplicate","description":"Duplicate an existing email template under a new name.","parameters":{"type":"object","properties":{"template_id":{"type":"string"},"template_name":{"type":"string"}},"required":["template_id","template_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriber.search","description":"Look up a subscriber on a given list by email address.","parameters":{"type":"object","properties":{"list_id":{"type":"string"},"subscriber":{"type":"string"}},"required":["list_id","subscriber"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriber.remove","description":"Hard-delete a subscriber from a list (distinct from unsubscribe — removes the record).","parameters":{"type":"object","properties":{"list_id":{"type":"string"},"email":{"type":"string"}},"required":["list_id","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"lists.query","description":"List all subscriber lists on the account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"adobe-creative-cloud","displayName":"Adobe Creative Cloud","description":"Read and organize Adobe Lightroom catalogs, albums, and assets in a Creative Cloud account. Standard OAuth2 (Adobe IMS authorization-code grant) against the Lightroom Services API at lr.adobe.io.","auth":{"kind":"oauth2","authorizationUrl":"https://ims-na1.adobelogin.com/ims/authorize/v2","tokenUrl":"https://ims-na1.adobelogin.com/ims/token/v3","scopes":["openid","profile","email","offline_access","lr_partner_apis","lr_partner_rendition_apis"],"clientIdEnv":"ADOBE_CREATIVE_CLOUD_OAUTH_CLIENT_ID","clientSecretEnv":"ADOBE_CREATIVE_CLOUD_OAUTH_CLIENT_SECRET"},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"ims.userinfo","description":"Read the authenticated Adobe ID profile (sub, name, email, account_type) from Adobe IMS. Useful as a non-Lightroom self-test that exercises the access token without needing a catalog.","parameters":{"type":"object","properties":{}},"requiredScopes":["openid","profile","email"],"class":"read"},{"name":"account.get","description":"Read Lightroom account metadata for the authenticated user (subscription tier, storage quota, default catalog id).","parameters":{"type":"object","properties":{}},"requiredScopes":["lr_partner_apis"],"class":"read"},{"name":"catalogs.list","description":"Enumerate the Lightroom catalogs visible to the authenticated user. Most accounts have exactly one catalog; team plans surface multiple.","parameters":{"type":"object","properties":{}},"requiredScopes":["lr_partner_apis"],"class":"read"},{"name":"catalogs.get","description":"Read one Lightroom catalog by id (returns catalog name, created, updated, asset count, and capability flags).","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID (from catalogs.list)."}},"required":["catalog_id"]},"requiredScopes":["lr_partner_apis"],"class":"read"},{"name":"albums.list","description":"List albums under a catalog. Returns a `links.next` href when paginated; pass `name_after` to resume.","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID."},"subtype":{"type":"string","enum":["collection","collection_set","project"],"description":"Filter by album subtype."},"name_after":{"type":"string","description":"Pagination cursor returned in `links.next` from a prior page."},"limit":{"type":"integer","minimum":1,"maximum":500,"description":"Page size; Lightroom caps at 500."}},"required":["catalog_id"]},"requiredScopes":["lr_partner_apis"],"class":"read"},{"name":"albums.get","description":"Read one album by id within a catalog (album name, subtype, parent_id, cover asset).","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID."},"album_id":{"type":"string","description":"Album UUID."}},"required":["catalog_id","album_id"]},"requiredScopes":["lr_partner_apis"],"class":"read"},{"name":"albums.create","description":"Create an album under a catalog. The caller supplies the album UUID (Lightroom uses PUT with a client-chosen id), so re-issuing the same call is a deterministic replay.","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID."},"album_id":{"type":"string","description":"Caller-supplied album UUID. Must be a v4 UUID; Lightroom dedupes by (catalog_id, album_id)."},"subtype":{"type":"string","enum":["collection","collection_set","project"],"description":"Album subtype; defaults to \"collection\"."},"payload":{"type":"object","description":"AlbumPayload — { name, parent: { id } | null, cover: { id } | null, ... }."}},"required":["catalog_id","album_id","payload"]},"requiredScopes":["lr_partner_apis"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"albums.update","description":"Update an album (rename, reparent, change cover). Lightroom honors `If-Match` against the album ETag; the declarative layer flags this as etag-if-match so the action guard reads-before-writes.","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID."},"album_id":{"type":"string","description":"Album UUID."},"payload":{"type":"object","description":"AlbumUpdatePayload — partial set of mutable fields (name, parent, cover)."}},"required":["catalog_id","album_id","payload"]},"requiredScopes":["lr_partner_apis"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"albums.delete","description":"Delete an album. Lightroom soft-deletes the album record but does NOT delete the contained assets (they remain in the catalog under \"All Photos\").","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID."},"album_id":{"type":"string","description":"Album UUID."}},"required":["catalog_id","album_id"]},"requiredScopes":["lr_partner_apis"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"assets.list","description":"List assets in a catalog. Filters by subtype (image | video), capture date range, and a cursor for incremental enumeration.","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID."},"subtype":{"type":"string","enum":["image","video"],"description":"Filter by asset subtype."},"captured_after":{"type":"string","description":"ISO8601 lower bound on capture timestamp."},"captured_before":{"type":"string","description":"ISO8601 upper bound on capture timestamp."},"name_after":{"type":"string","description":"Pagination cursor returned in `links.next` from a prior page."},"limit":{"type":"integer","minimum":1,"maximum":500,"description":"Page size; Lightroom caps at 500."}},"required":["catalog_id"]},"requiredScopes":["lr_partner_apis"],"class":"read"},{"name":"assets.get","description":"Read one asset by id within a catalog. Returns the asset payload (capture metadata, develop settings, rendition links).","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID."},"asset_id":{"type":"string","description":"Asset UUID."}},"required":["catalog_id","asset_id"]},"requiredScopes":["lr_partner_apis"],"class":"read"},{"name":"file.upload","description":"Upload a file (create a Lightroom asset). The caller supplies the asset UUID; Lightroom dedupes by (catalog_id, asset_id) so replays are deterministic.","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID."},"asset_id":{"type":"string","description":"Caller-supplied asset UUID (v4); Lightroom dedupes by (catalog_id, asset_id)."},"payload":{"type":"object","description":"AssetPayload — { subtype: \"image\"|\"video\", payload: { ... }, ... }."}},"required":["catalog_id","asset_id","payload"]},"requiredScopes":["lr_partner_apis"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"file.delete","description":"Delete a file (Lightroom asset) by id. Lightroom marks the asset as deleted; rendition references are GC-collected asynchronously.","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID."},"asset_id":{"type":"string","description":"Asset UUID."}},"required":["catalog_id","asset_id"]},"requiredScopes":["lr_partner_apis"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"folder.create","description":"Create a folder (Lightroom collection_set album). The caller supplies the folder UUID; PUT with the same UUID is a deterministic replay.","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID."},"album_id":{"type":"string","description":"Caller-supplied folder/album UUID (v4); Lightroom dedupes by (catalog_id, album_id)."},"payload":{"type":"object","description":"AlbumPayload — { name, parent: { id } | null, subtype: \"collection_set\" }."}},"required":["catalog_id","album_id","payload"]},"requiredScopes":["lr_partner_apis"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assets.list_in_album","description":"List the assets attached to a specific album within a catalog. Use the `links.next` cursor to page.","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID."},"album_id":{"type":"string","description":"Album UUID."},"name_after":{"type":"string","description":"Pagination cursor returned in `links.next` from a prior page."},"limit":{"type":"integer","minimum":1,"maximum":500,"description":"Page size; Lightroom caps at 500."}},"required":["catalog_id","album_id"]},"requiredScopes":["lr_partner_apis"],"class":"read"}]},{"kind":"adobe-sign","displayName":"Adobe Acrobat Sign","description":"Create, send, inspect, cancel, and remind on Adobe Acrobat Sign agreements, with library-document and webhook management.","auth":{"kind":"oauth2","authorizationUrl":"https://secure.na1.adobesign.com/public/oauth/v2","tokenUrl":"https://api.na1.adobesign.com/oauth/v2/token","scopes":["user_read:self","agreement_read:account","agreement_write:account","agreement_send:account","library_read:account","webhook_read:account","webhook_write:account"],"clientIdEnv":"ADOBE_SIGN_OAUTH_CLIENT_ID","clientSecretEnv":"ADOBE_SIGN_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"agreements.list","description":"List agreements visible to the authenticated Acrobat Sign account.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"},"query":{"type":"string"}}},"requiredScopes":["agreement_read:account"],"class":"read"},{"name":"agreements.get","description":"Read an agreement and its current signature status.","parameters":{"type":"object","properties":{"agreementId":{"type":"string"}},"required":["agreementId"]},"requiredScopes":["agreement_read:account"],"class":"read"},{"name":"agreements.create","description":"Create and optionally send an agreement. The request body follows Adobe Sign v6 (fileInfos, participantSetsInfo, name, signatureType, state).","parameters":{"type":"object","properties":{"fileInfos":{"type":"array","items":{"type":"object"}},"participantSetsInfo":{"type":"array","items":{"type":"object"}},"name":{"type":"string"},"signatureType":{"type":"string","enum":["ESIGN","WRITTEN"]},"state":{"type":"string","enum":["DRAFT","AUTHORING","IN_PROCESS"]},"message":{"type":"string"},"expirationTime":{"type":"string"}},"required":["fileInfos","participantSetsInfo","name","signatureType","state"]},"requiredScopes":["agreement_write:account","agreement_send:account"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"agreements.cancel","description":"Cancel an in-progress agreement and record an optional comment.","parameters":{"type":"object","properties":{"agreementId":{"type":"string"},"comment":{"type":"string"},"notifySigner":{"type":"boolean"}},"required":["agreementId"]},"requiredScopes":["agreement_write:account"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"agreements.remind","description":"Send an immediate reminder to pending agreement participants.","parameters":{"type":"object","properties":{"agreementId":{"type":"string"},"note":{"type":"string"}},"required":["agreementId"]},"requiredScopes":["agreement_write:account"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"libraryDocuments.list","description":"List reusable Acrobat Sign library documents and templates.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer"},"cursor":{"type":"string"}}},"requiredScopes":["library_read:account"],"class":"read"},{"name":"webhooks.list","description":"List Acrobat Sign webhook subscriptions.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer"},"cursor":{"type":"string"}}},"requiredScopes":["webhook_read:account"],"class":"read"},{"name":"webhooks.create","description":"Create an Acrobat Sign webhook subscription.","parameters":{"type":"object","properties":{"name":{"type":"string"},"scope":{"type":"string"},"state":{"type":"string","enum":["ACTIVE","INACTIVE"]},"webhookSubscriptionEvents":{"type":"array","items":{"type":"string"}},"webhookUrlInfo":{"type":"object"},"applicationDisplayName":{"type":"string"}},"required":["name","scope","state","webhookSubscriptionEvents","webhookUrlInfo"]},"requiredScopes":["webhook_write:account"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Delete an Acrobat Sign webhook subscription.","parameters":{"type":"object","properties":{"webhookId":{"type":"string"}},"required":["webhookId"]},"requiredScopes":["webhook_write:account"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"adp","displayName":"ADP","description":"Read HR and payroll data from ADP Workforce Now: workers, worker demographics, pay statements, and pay distributions. Requires mutual-TLS client certificates (see adapter notes) in addition to OAuth2.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.adp.com/auth/oauth/v2/authorize","tokenUrl":"https://accounts.adp.com/auth/oauth/v2/token","scopes":["hr/workerInformationManagement/read","payroll/payStatementManagement/read"],"clientIdEnv":"ADP_OAUTH_CLIENT_ID","clientSecretEnv":"ADP_OAUTH_CLIENT_SECRET"},"category":"hr","defaultConsistencyModel":"authoritative","capabilities":[{"name":"worker.list","description":"Collection of all workers for the authenticated client. OData paging via $top/$skip (default 50, max 100); total at meta.totalNumber. The associateOID on each worker is the key for per-worker endpoints. SSN/birth date are masked.","parameters":{"type":"object","properties":{"top":{"type":"integer","description":"OData $top page size (default 50, max 100)."},"skip":{"type":"integer","description":"OData $skip offset for pagination."},"filter":{"type":"string","description":"OData $filter expression."},"select":{"type":"string","description":"OData $select field projection."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"worker.get","description":"A single worker by Associate OID (aoid). SSN/birth date are masked unless unmasking is requested.","parameters":{"type":"object","properties":{"aoid":{"type":"string","description":"Associate OID from worker.list."},"select":{"type":"string","description":"OData $select field projection."}},"required":["aoid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"worker.demographics.list","description":"Worker collection WITHOUT PII/SPI (no SSN, no full birth date) — a lighter payload than worker.list. OData paging supported.","parameters":{"type":"object","properties":{"top":{"type":"integer"},"skip":{"type":"integer"},"filter":{"type":"string"},"select":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"worker.demographics.get","description":"Demographic data for one worker by Associate OID, without PII/SPI.","parameters":{"type":"object","properties":{"aoid":{"type":"string"},"select":{"type":"string"}},"required":["aoid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"paystatements.list","description":"Pay statements for one worker: payDate, net/gross pay amounts, total hours, and a statement image URI. Use numberoflastpaydates to cap results.","parameters":{"type":"object","properties":{"aoid":{"type":"string","description":"Associate OID from worker.list."},"numberoflastpaydates":{"type":"integer","description":"Limit to the N most recent pay dates."}},"required":["aoid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"paystatements.get","description":"Full detail of one pay statement: pay period, net/gross/YTD amounts, earnings, deductions, and memos. The pay-statement id is resolved from paystatements.list.","parameters":{"type":"object","properties":{"aoid":{"type":"string"},"payStatementId":{"type":"string","description":"Pay statement id from paystatements.list."}},"required":["aoid","payStatementId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"paydistributions.get","description":"Direct-deposit distribution setup for one worker: accounts, routing numbers, distribution amounts, and remaining-balance flags.","parameters":{"type":"object","properties":{"aoid":{"type":"string"}},"required":["aoid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"affinity","displayName":"Affinity","description":"Synchronize Affinity people, organizations, opportunities, lists, notes, interactions, and field values.","auth":{"kind":"api-key","hint":"Affinity API key from Settings > API. Availability depends on the workspace plan and key owner permissions."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"people.list","description":"List or search people.","parameters":{"type":"object","properties":{"term":{"type":"string","description":"Search person names and identifiers."},"page_size":{"type":"integer","minimum":1,"maximum":500},"page_token":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"people.get","description":"Read one person, including current organizations and opportunities.","parameters":{"type":"object","properties":{"personId":{"type":"integer"}},"required":["personId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"people.create","description":"Create a person.","parameters":{"type":"object","additionalProperties":true,"properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"people.update","description":"Update a person.","parameters":{"type":"object","properties":{"personId":{"type":"integer"}},"required":["personId"],"additionalProperties":true},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"people.delete","description":"Delete a person.","parameters":{"type":"object","properties":{"personId":{"type":"integer"}},"required":["personId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"organizations.list","description":"List or search organizations.","parameters":{"type":"object","properties":{"term":{"type":"string","description":"Search organization names and identifiers."},"page_size":{"type":"integer","minimum":1,"maximum":500},"page_token":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"organizations.get","description":"Read one organization.","parameters":{"type":"object","properties":{"organizationId":{"type":"integer"}},"required":["organizationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"organizations.create","description":"Create an organization.","parameters":{"type":"object","additionalProperties":true,"properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"organizations.update","description":"Update an organization.","parameters":{"type":"object","properties":{"organizationId":{"type":"integer"}},"required":["organizationId"],"additionalProperties":true},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"organizations.delete","description":"Delete an organization.","parameters":{"type":"object","properties":{"organizationId":{"type":"integer"}},"required":["organizationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.list","description":"List or search opportunities.","parameters":{"type":"object","properties":{"term":{"type":"string","description":"Search opportunity names and identifiers."},"page_size":{"type":"integer","minimum":1,"maximum":500},"page_token":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"opportunities.get","description":"Read one opportunity.","parameters":{"type":"object","properties":{"opportunityId":{"type":"integer"}},"required":["opportunityId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"opportunities.create","description":"Create an opportunity.","parameters":{"type":"object","additionalProperties":true,"properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.update","description":"Update an opportunity.","parameters":{"type":"object","properties":{"opportunityId":{"type":"integer"}},"required":["opportunityId"],"additionalProperties":true},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"opportunities.delete","description":"Delete an opportunity.","parameters":{"type":"object","properties":{"opportunityId":{"type":"integer"}},"required":["opportunityId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.list","description":"List CRM lists.","parameters":{"type":"object","properties":{"term":{"type":"string","description":"Search list names and identifiers."},"page_size":{"type":"integer","minimum":1,"maximum":500},"page_token":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.get","description":"Read one CRM list and its field definitions.","parameters":{"type":"object","properties":{"listId":{"type":"integer"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"list-entries.list","description":"List entries in an Affinity list.","parameters":{"type":"object","properties":{"listId":{"type":"integer"},"page_size":{"type":"integer","minimum":1,"maximum":500},"page_token":{"type":"string"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"list-entries.create","description":"Add an entity to an Affinity list.","parameters":{"type":"object","properties":{"listId":{"type":"integer"},"entity_id":{"type":"integer"}},"required":["listId","entity_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"list-entries.delete","description":"Remove a list entry.","parameters":{"type":"object","properties":{"listEntryId":{"type":"integer"}},"required":["listEntryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"field-values.list","description":"Read mapped custom-field values for one person, organization, opportunity, or list entry.","parameters":{"type":"object","properties":{"person_id":{"type":"integer"},"organization_id":{"type":"integer"},"opportunity_id":{"type":"integer"},"list_entry_id":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"field-values.create","description":"Create a custom-field value.","parameters":{"type":"object","additionalProperties":true,"properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"field-values.update","description":"Update a custom-field value.","parameters":{"type":"object","properties":{"fieldValueId":{"type":"integer"}},"required":["fieldValueId"],"additionalProperties":true},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"field-values.delete","description":"Delete a custom-field value.","parameters":{"type":"object","properties":{"fieldValueId":{"type":"integer"}},"required":["fieldValueId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"field-value-changes.list","description":"Read custom-field change history for synchronization and evidence.","parameters":{"type":"object","properties":{"field_id":{"type":"integer"},"action_type":{"type":"integer"},"page_size":{"type":"integer","minimum":1,"maximum":500},"page_token":{"type":"string"}},"required":["field_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"interactions.list","description":"List email, meeting, call, and chat interactions for a person or organization.","parameters":{"type":"object","properties":{"person_id":{"type":"integer"},"organization_id":{"type":"integer"},"type":{"type":"integer"},"start_time":{"type":"string"},"end_time":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":500},"page_token":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"notes.list","description":"List notes linked to people, organizations, or opportunities.","parameters":{"type":"object","properties":{"person_id":{"type":"integer"},"organization_id":{"type":"integer"},"opportunity_id":{"type":"integer"},"page_size":{"type":"integer","minimum":1,"maximum":500},"page_token":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"notes.create","description":"Create a note linked to CRM records.","parameters":{"type":"object","additionalProperties":true,"properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.update","description":"Update a note.","parameters":{"type":"object","properties":{"noteId":{"type":"integer"}},"required":["noteId"],"additionalProperties":true},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"notes.delete","description":"Delete a note.","parameters":{"type":"object","properties":{"noteId":{"type":"integer"}},"required":["noteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"afforai","displayName":"Afforai","description":"Ask Afforai chatbots questions over a private document corpus and receive synthesized answers with optional web-augmented retrieval.","auth":{"kind":"api-key","hint":"Afforai API key (workspace settings → API). Sent as a bearer token on every request."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"ask.chatbot","description":"Send a user message to a configured Afforai chatbot and receive a synthesized answer drawn from the chatbot’s document set. Optionally enable deep-search and Google-augmented retrieval.","parameters":{"type":"object","properties":{"sessionID":{"type":"string","description":"Chatbot ID copied from the Afforai workspace (Actions → Settings on the chatbot card)."},"history":{"type":"array","description":"Prior conversation turns. Each entry is { role: \"user\" | \"assistant\", content: string }. Pass [] for a fresh session.","items":{"type":"object","properties":{"role":{"type":"string","enum":["user","assistant"]},"content":{"type":"string"}},"required":["role","content"]}},"role":{"type":"string","enum":["user","assistant"],"description":"Role of the new message being sent. Almost always \"user\"."},"content":{"type":"string","description":"Body of the new message to send to the chatbot."},"powerful":{"type":"boolean","description":"When true, Afforai performs a deeper retrieval pass over the chatbot’s document set at the cost of higher per-call billing and latency."},"google":{"type":"boolean","description":"When true, the chatbot is allowed to consult Google search results in addition to the uploaded documents."}},"required":["sessionID","history","role","content","powerful","google"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"agentx","displayName":"AgentX","description":"Send messages to AgentX conversations, search agents, and inspect conversation/message history.","auth":{"kind":"api-key","hint":"AgentX API key (Settings → API Keys)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"conversations.createWithSingleAgent","description":"Create a new conversation with a single agent and send the first message.","parameters":{"type":"object","properties":{"agentId":{"type":"string","description":"The agent that will own the conversation."},"message":{"type":"string","description":"First message sent to the agent."},"agentMode":{"type":"string","description":"How the agent should respond (e.g. chat, autonomous)."},"context":{"type":"integer","description":"Number of previous messages to include as memory context (0 = max)."},"conversationName":{"type":"string","description":"Optional human-readable conversation title."}},"required":["agentId","message","agentMode"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.sendMessage","description":"Send a message to an existing AgentX conversation.","parameters":{"type":"object","properties":{"conversationId":{"type":"string","description":"Target conversation ID."},"message":{"type":"string","description":"Message body to send."},"agentMode":{"type":"string","description":"How the agent should respond on this turn."},"context":{"type":"integer","description":"Number of previous messages to include as memory context."}},"required":["conversationId","message","agentMode"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.find","description":"Search messages by conversation, free-text search term, or exact message ID.","parameters":{"type":"object","properties":{"conversationId":{"type":"string","description":"Restrict the search to a single conversation."},"searchTerm":{"type":"string","description":"Text to search for in message content. Omit if searching by ID."},"messageId":{"type":"string","description":"Exact message ID lookup (overrides searchTerm)."},"limit":{"type":"integer","description":"Maximum messages to return."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"agents.search","description":"Search the workspace agent registry by name or exact agent ID.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Partial name match against the agent display name."},"agentId":{"type":"string","description":"Exact agent ID."},"limit":{"type":"integer","description":"Maximum agents to return."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversations.find","description":"Find conversations by exact ID, name/title, or conversation type.","parameters":{"type":"object","properties":{"conversationId":{"type":"string","description":"Exact conversation ID."},"conversationName":{"type":"string","description":"Name, title, or ID-substring match."},"type":{"type":"string","description":"Conversation type filter (e.g. single-agent, multi-agent)."},"limit":{"type":"integer","description":"Maximum conversations to return."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"agents.list.recent","description":"List recently created agents — used by the newAgent polling trigger upstream.","parameters":{"type":"object","properties":{"since":{"type":"string","description":"ISO-8601 timestamp; only return agents created after this point."},"limit":{"type":"integer","description":"Maximum agents to return."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversations.list.recent","description":"List recently created conversations — used by the newConversation polling trigger upstream.","parameters":{"type":"object","properties":{"since":{"type":"string","description":"ISO-8601 timestamp; only return conversations created after this point."},"limit":{"type":"integer","description":"Maximum conversations to return."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"aianswer","displayName":"AI Answer","description":"Manage AI Answer agents and phone calls for voice interactions.","auth":{"kind":"api-key","hint":"API key for AI Answer."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"agents.list","description":"Get a list of available agents.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.create","description":"Create a new phone call.","parameters":{"type":"object","properties":{"agentID":{"type":"string"},"phoneNumber":{"type":"string"},"callID":{"type":"string"},"details":{"type":"object"}},"required":["agentID","phoneNumber","callID"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.get","description":"Get details of a specific call.","parameters":{"type":"object","properties":{"callID":{"type":"string"}},"required":["callID"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.schedule","description":"Schedule a phone call with an agent.","parameters":{"type":"object","properties":{"agentID":{"type":"string"},"phoneNumber":{"type":"string"},"callID":{"type":"string"},"executionTime":{"type":"string"},"timezone":{"type":"string"},"prospectDetails":{"type":"object"}},"required":["agentID","phoneNumber","callID","executionTime","timezone"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.transcript","description":"Get the transcript of a completed call.","parameters":{"type":"object","properties":{"callID":{"type":"string"}},"required":["callID"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"aidbase","displayName":"Aidbase","description":"Ingest knowledge sources, manage FAQs, generate chatbot replies, and trigger training jobs in an Aidbase support workspace.","auth":{"kind":"api-key","hint":"Aidbase workspace API key. Generate one from the Aidbase dashboard → Settings → API."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"knowledge.add_video","description":"Add a YouTube video as a knowledge source. The transcript is fetched and indexed asynchronously; the response carries the source id, not a ready-state.","parameters":{"type":"object","properties":{"video_url":{"type":"string","description":"Public YouTube URL of the video to ingest."},"categories":{"type":"array","description":"Optional category names. Unknown names are created.","items":{"type":"string"}}},"required":["video_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"knowledge.add_website","description":"Crawl and index a website as a knowledge source. The crawl runs asynchronously; poll the returned source id for completion.","parameters":{"type":"object","properties":{"website_url":{"type":"string","description":"Root URL to crawl (e.g. https://www.example.com)."},"categories":{"type":"array","items":{"type":"string"}}},"required":["website_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"knowledge.add_faq_item","description":"Append a Q/A pair to an existing FAQ knowledge base. Returns the created item id.","parameters":{"type":"object","properties":{"faq_id":{"type":"string","description":"Target FAQ container id (from knowledge.create_faq)."},"question":{"type":"string"},"answer":{"type":"string"},"source_url":{"type":"string","description":"Optional URL pointing to the source of the information."},"categories":{"type":"array","items":{"type":"string"}}},"required":["faq_id","question","answer"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"knowledge.create_faq","description":"Create a new FAQ knowledge-base container. Items are added with knowledge.add_faq_item.","parameters":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"categories":{"type":"array","items":{"type":"string"}}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"chatbot.create_reply","description":"Send a user message to the Aidbase chatbot and receive a generated reply. Pass session_id to continue an existing conversation; omit it to start a new one.","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The user message to send to the chatbot."},"session_id":{"type":"string","description":"Optional session id to maintain conversation context across calls."}},"required":["message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"training.start","description":"Kick off a training run that re-indexes the workspace knowledge base. Returns a training job id the caller can poll for completion.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"aiprise","displayName":"AiPrise","description":"KYC, KYB, and fraud-prevention platform — start identity and business verifications, retrieve results, manage user and business profiles, and override decisions.","auth":{"kind":"api-key","hint":"AiPrise workspace API key. Generate one from the AiPrise dashboard → Settings → API Keys."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"identity.verification.start","description":"Run a user verification profile — kicks off an identity verification session against the named template. Returns a session_id the caller polls or webhooks against.","parameters":{"type":"object","properties":{"template_id":{"type":"string","description":"Verification template id from the AiPrise dashboard."},"first_name":{"type":"string"},"middle_name":{"type":"string"},"last_name":{"type":"string"},"second_last_name":{"type":"string"},"full_name":{"type":"string"},"date_of_birth":{"type":"string","description":"YYYY-MM-DD."},"email_address":{"type":"string"},"phone_number":{"type":"string"},"client_reference_id":{"type":"string"},"client_reference_data":{"type":"object"},"callback_url":{"type":"string"},"events_callback_url":{"type":"string"}},"required":["template_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"identity.verification.url","description":"Generate a hosted verification URL for a previously-created session. The end user is redirected here to complete the flow.","parameters":{"type":"object","properties":{"template_id":{"type":"string"},"redirect_uri":{"type":"string","description":"Where the user is sent after finishing the hosted flow."},"client_reference_id":{"type":"string"},"client_reference_data":{"type":"object"}},"required":["template_id","redirect_uri"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"identity.verification.result","description":"Fetch the latest decision and check breakdown for a verification session.","parameters":{"type":"object","properties":{"session_id":{"type":"string","description":"AiPrise verification session id."}},"required":["session_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"identity.verification.input","description":"Fetch the structured user-supplied input that was captured during a verification session (names, DOB, document fields).","parameters":{"type":"object","properties":{"session_id":{"type":"string"}},"required":["session_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"identity.verification.update_result","description":"Override the AiPrise decision on a verification session. Use to approve, decline, or push back to manual review after analyst review.","parameters":{"type":"object","properties":{"verification_session_id":{"type":"string"},"result":{"type":"string","enum":["Approved","Declined","Pending"],"description":"New decision. Approved passes the subject, Declined rejects, Pending returns to manual review."}},"required":["verification_session_id","result"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"identity.user_info.get","description":"Fetch additional analyst-only signals AiPrise gathered about the subject (device, IP, behavioural) for a verification session.","parameters":{"type":"object","properties":{"session_id":{"type":"string"}},"required":["session_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"business.verification.start","description":"Start a business verification (KYB) against an existing business profile. Returns a session_id used to fetch results.","parameters":{"type":"object","properties":{"template_id":{"type":"string"},"business_profile_id":{"type":"string"},"client_reference_id":{"type":"string"},"client_reference_data":{"type":"object"},"callback_url":{"type":"string"},"events_callback_url":{"type":"string"}},"required":["template_id","business_profile_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"business.verification.result","description":"Fetch the AML / sanctions / corporate-registry result for a business verification session.","parameters":{"type":"object","properties":{"session_id":{"type":"string"}},"required":["session_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"business.verification.input","description":"Fetch the structured business-profile inputs captured for a business verification session.","parameters":{"type":"object","properties":{"session_id":{"type":"string"}},"required":["session_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"document.check.run","description":"Run a standalone document check against a previously-uploaded file. Returns the extracted fields and a pass / fail verdict.","parameters":{"type":"object","properties":{"file_uuid":{"type":"string","description":"UUID returned from the AiPrise file upload endpoint."},"document_input_title":{"type":"string"},"client_reference_id":{"type":"string"},"client_reference_data":{"type":"object"}},"required":["file_uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"business.profile.create","description":"Create a business profile that subsequent KYB verifications and searches can reference.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Legal business name (preferred) or trade name."},"alternate_name":{"type":"string"},"tax_identification_number":{"type":"string"},"website":{"type":"string"},"formation_date":{"type":"string","description":"YYYY-MM-DD."},"country_code":{"type":"string","description":"ISO 3166-1 alpha-2."},"state_code":{"type":"string"},"business_entity_id":{"type":"string"},"addresses":{"type":"array","description":"Structured address objects (preferred over flat street/city fields when both are available).","items":{"type":"object"}},"address_street_1":{"type":"string"},"address_street_2":{"type":"string"},"address_city":{"type":"string"},"address_state":{"type":"string"},"address_zip_code":{"type":"string"},"address_country":{"type":"string"},"phone_numbers":{"type":"array","items":{"type":"object"}},"email_addresses":{"type":"array","items":{"type":"object"}},"additional_information":{"type":"array","items":{"type":"object"}},"client_reference_id":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"business.profile.get","description":"Fetch a business profile by id.","parameters":{"type":"object","properties":{"business_profile_id":{"type":"string"}},"required":["business_profile_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"business.profile.documents","description":"List documents (incorporation, ownership, financials) attached to a business profile.","parameters":{"type":"object","properties":{"business_profile_id":{"type":"string"}},"required":["business_profile_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"business.search","description":"Search the AiPrise corporate-registry index for businesses by name, country, or tax id.","parameters":{"type":"object","properties":{"name":{"type":"string"},"country_code":{"type":"string"},"tax_identification_number":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"user.profile.create","description":"Create a reusable user profile that subsequent KYC verifications can reference.","parameters":{"type":"object","properties":{"first_name":{"type":"string"},"middle_name":{"type":"string"},"last_name":{"type":"string"},"second_last_name":{"type":"string"},"full_name":{"type":"string"},"date_of_birth":{"type":"string","description":"YYYY-MM-DD."},"email_address":{"type":"string"},"phone_number":{"type":"string"},"address_street_1":{"type":"string"},"address_street_2":{"type":"string"},"address_city":{"type":"string"},"address_state":{"type":"string"},"address_zip_code":{"type":"string"},"address_country":{"type":"string"},"client_reference_id":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"user.profile.get","description":"Fetch a user profile by id.","parameters":{"type":"object","properties":{"user_profile_id":{"type":"string"}},"required":["user_profile_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"air-ops","displayName":"AirOps","description":"Trigger AirOps workflows (sync or async) and read execution results.","auth":{"kind":"api-key","hint":"AirOps API key — Workspace Settings → API Keys in your AirOps account."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"run.workflow","description":"Execute an AirOps workflow synchronously and return the result.","parameters":{"type":"object","properties":{"app":{"type":"string","description":"The AirOps workflow (app) UUID to execute."},"inputs":{"type":"object","description":"Input values for the workflow."},"inputs_schema":{"type":"object","description":"Schema defining the workflow inputs (advanced)."},"definition":{"type":"object","description":"Custom workflow definition steps (advanced)."}},"required":["app"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"run.workflow.async","description":"Queue an AirOps workflow for asynchronous execution and return the execution UUID.","parameters":{"type":"object","properties":{"app":{"type":"string","description":"The AirOps workflow (app) UUID to execute."},"inputs":{"type":"object","description":"Input values for the workflow."},"inputs_schema":{"type":"object","description":"Schema defining the workflow inputs (advanced)."},"definition":{"type":"object","description":"Custom workflow definition steps (advanced)."}},"required":["app"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.execution","description":"Retrieve a previously queued AirOps workflow execution by its UUID.","parameters":{"type":"object","properties":{"app":{"type":"string","description":"The AirOps workflow (app) UUID."},"execution_uuid":{"type":"string","description":"The UUID of the execution to retrieve."}},"required":["app","execution_uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cancel.execution","description":"Cancel a running Airops workflow execution.","parameters":{"type":"object","properties":{"app":{"type":"string","description":"The AirOps workflow (app) UUID."},"execution_uuid":{"type":"string","description":"The UUID of the execution to cancel."}},"required":["app","execution_uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflow.publish","description":"Promote a workflow draft to published.","parameters":{"type":"object","properties":{"app":{"type":"string","description":"The AirOps workflow (app) UUID."}},"required":["app"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflow.update","description":"Patch workflow definition fields.","parameters":{"type":"object","properties":{"app":{"type":"string","description":"The AirOps workflow (app) UUID."},"name":{"type":"string","description":"Workflow display name."},"description":{"type":"string","description":"Workflow description."},"inputs_schema":{"type":"object","description":"Schema defining the workflow inputs."},"definition":{"type":"object","description":"Workflow definition steps."}},"required":["app"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"aircall","displayName":"Aircall","description":"Read Aircall calls and contacts and apply lightweight write operations (comments, tags, contact CRUD).","auth":{"kind":"api-key","hint":"Base64-encoded Aircall API ID and API token (`base64(apiId:apiToken)`)."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.find","description":"List or search Aircall calls, optionally filtered by direction or phone number.","parameters":{"type":"object","properties":{"direction":{"type":"string"},"phone_number":{"type":"string"},"from":{"type":"integer"},"to":{"type":"integer"},"per_page":{"type":"integer"},"page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.get","description":"Fetch a single Aircall call by id.","parameters":{"type":"object","properties":{"callId":{"type":"string"}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.comment","description":"Attach a comment to an Aircall call.","parameters":{"type":"object","properties":{"callId":{"type":"string"},"content":{"type":"string"}},"required":["callId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.tag","description":"Apply one or more tags to an Aircall call.","parameters":{"type":"object","properties":{"callId":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}},"required":["callId","tags"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.find","description":"Search Aircall contacts by phone number or email.","parameters":{"type":"object","properties":{"phone_number":{"type":"string"},"email":{"type":"string"},"per_page":{"type":"integer"},"page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create an Aircall contact with phone numbers and optional metadata.","parameters":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"company_name":{"type":"string"},"information":{"type":"string"},"phone_numbers":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"]}},"emails":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"]}}},"required":["phone_numbers"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update an existing Aircall contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"company_name":{"type":"string"},"information":{"type":"string"},"phone_numbers":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"]}},"emails":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"]}}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.delete","description":"Delete a contact from the Aircall directory.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.transfer","description":"Transfer an active call to another user or number.","parameters":{"type":"object","properties":{"callId":{"type":"string"},"to":{"type":"string","description":"Aircall user id or external E.164 phone number to transfer the call to."}},"required":["callId","to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.archive","description":"Archive a completed call record.","parameters":{"type":"object","properties":{"callId":{"type":"string"}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"numbers.assign","description":"Assign a phone number to a user or team.","parameters":{"type":"object","properties":{"numberId":{"type":"string"},"user_id":{"type":"string","description":"Aircall user id to assign the number to."},"team_id":{"type":"string","description":"Aircall team id to assign the number to."}},"required":["numberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"airparser","displayName":"Airparser","description":"Extract structured data from emails, PDFs, or documents with Airparser.","auth":{"kind":"api-key","hint":"Airparser API key."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"documents.upload","description":"Upload a document for parsing.","parameters":{"type":"object","properties":{"file":{"type":"string","description":"Document file content or URL."},"fileName":{"type":"string","description":"Name of the document file."},"meta":{"type":"object","description":"Optional metadata to associate with the document."}},"required":["file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.extract","description":"Extract structured data from a document.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"ID of the uploaded document."},"markdown":{"type":"string","description":"Template or schema for extraction in markdown format."}},"required":["documentId","markdown"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.get","description":"Retrieve document parsing status and results.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"ID of the document to retrieve."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.delete","description":"Delete a parsed document.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"ID of the document to delete."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.reprocess","description":"Reprocess an existing document with the latest template.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"ID of the document to reprocess."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"inbox.create","description":"Create a new parsing inbox.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Display name for the inbox."},"description":{"type":"string","description":"Optional inbox description."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"airtable","displayName":"Airtable","description":"Query and update Airtable records for lightweight operational databases.","auth":{"kind":"api-key","hint":"Airtable personal access token."},"category":"spreadsheet","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.list","description":"List records in a table.","parameters":{"type":"object","properties":{"baseId":{"type":"string"},"tableName":{"type":"string"},"maxRecords":{"type":"integer","minimum":1,"maximum":100},"filterByFormula":{"type":"string"}},"required":["baseId","tableName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.get","description":"Read a single Airtable record.","parameters":{"type":"object","properties":{"baseId":{"type":"string"},"tableName":{"type":"string"},"recordId":{"type":"string"}},"required":["baseId","tableName","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.create","description":"Create an Airtable record.","parameters":{"type":"object","properties":{"baseId":{"type":"string"},"tableName":{"type":"string"},"fields":{"type":"object"}},"required":["baseId","tableName","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Update an Airtable record.","parameters":{"type":"object","properties":{"baseId":{"type":"string"},"tableName":{"type":"string"},"recordId":{"type":"string"},"fields":{"type":"object"}},"required":["baseId","tableName","recordId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.delete","description":"Delete a record from a table.","parameters":{"type":"object","properties":{"baseId":{"type":"string"},"tableName":{"type":"string"},"recordId":{"type":"string"}},"required":["baseId","tableName","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.upsert","description":"Insert or update records keyed by a merge field. Airtable performsUpsert mode keyed on fieldsToMergeOn.","parameters":{"type":"object","properties":{"baseId":{"type":"string"},"tableName":{"type":"string"},"records":{"type":"array","description":"List of { fields: { ... } } objects (max 10 per call).","items":{"type":"object"}},"fieldsToMergeOn":{"type":"array","description":"Field names used to match existing records for upsert.","items":{"type":"string"}},"typecast":{"type":"boolean"}},"required":["baseId","tableName","records","fieldsToMergeOn"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.batchCreate","description":"Create up to 10 records in a single call.","parameters":{"type":"object","properties":{"baseId":{"type":"string"},"tableName":{"type":"string"},"records":{"type":"array","description":"List of { fields: { ... } } objects (max 10 per call).","items":{"type":"object"}},"typecast":{"type":"boolean"}},"required":["baseId","tableName","records"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"airtop","displayName":"Airtop","description":"Drive cloud browser sessions: create/terminate sessions, open windows, scrape and interact with pages.","auth":{"kind":"api-key","hint":"Airtop API key (Bearer)."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"sessions.create","description":"Create a new cloud browser session.","parameters":{"type":"object","properties":{"configuration":{"type":"object"}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sessions.terminate","description":"Terminate an existing browser session.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"}},"required":["sessionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"windows.create","description":"Open a new browser window inside a session at the given URL.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"},"url":{"type":"string"},"screenResolution":{"type":"string"}},"required":["sessionId","url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"windows.screenshot","description":"Take a screenshot of a browser window.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"},"windowId":{"type":"string"}},"required":["sessionId","windowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"windows.pageQuery","description":"Run a natural-language page query against a window.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"},"windowId":{"type":"string"},"prompt":{"type":"string"},"followPaginationLinks":{"type":"boolean"},"configuration":{"type":"object"}},"required":["sessionId","windowId","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"windows.smartScrape","description":"Smart-scrape structured content from the current page.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"},"windowId":{"type":"string"},"prompt":{"type":"string"},"configuration":{"type":"object"}},"required":["sessionId","windowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"windows.paginatedExtraction","description":"Extract structured records across paginated pages.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"},"windowId":{"type":"string"},"prompt":{"type":"string"},"outputSchema":{"type":"object"},"paginationMode":{"type":"string"}},"required":["sessionId","windowId","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"windows.click","description":"Click an element described in natural language.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"},"windowId":{"type":"string"},"elementDescription":{"type":"string"},"clickType":{"type":"string"},"waitForNavigation":{"type":"boolean"}},"required":["sessionId","windowId","elementDescription"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"windows.type","description":"Type text into an element described in natural language.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"},"windowId":{"type":"string"},"elementDescription":{"type":"string"},"text":{"type":"string"},"submit":{"type":"boolean"}},"required":["sessionId","windowId","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"windows.hover","description":"Hover an element described in natural language.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"},"windowId":{"type":"string"},"elementDescription":{"type":"string"}},"required":["sessionId","windowId","elementDescription"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sessions.uploadFile","description":"Upload a file to a browser session for later use.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"},"fileName":{"type":"string"},"fileContent":{"type":"string"}},"required":["sessionId","fileName","fileContent"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"alai","displayName":"Alai","description":"Generate, export, and manage AI-produced presentations on Alai from text prompts.","auth":{"kind":"api-key","hint":"Alai API key (see your Alai account settings). Sent as `Authorization: Bearer `."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"generate.presentation","description":"Generate a new AI presentation from input text. Returns a generation job id; poll get.generation for status.","parameters":{"type":"object","properties":{"inputText":{"type":"string","description":"Text content to generate a presentation from."},"title":{"type":"string","description":"Optional title; Alai will generate one if omitted."},"themeId":{"type":"string","description":"Presentation theme id."},"slideRange":{"type":"string","description":"Target slide count bucket (auto | 1 | 2-5 | 6-10 | 11-15 | 16-20 | 21-25 | 26-50)."},"tone":{"type":"string","description":"Tone of voice for generated copy."},"contentMode":{"type":"string","description":"How to interpret inputText (e.g. summarize vs rewrite)."},"amountMode":{"type":"string","description":"Text density per slide."},"includeAiImages":{"type":"boolean"},"imageStyle":{"type":"string"},"waitForCompletion":{"type":"boolean"},"maxWaitTime":{"type":"number","description":"Seconds; default 300 on Alai side."},"additionalInstructions":{"type":"string"}},"required":["inputText"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.generation","description":"Fetch status + result for a previously started generation job.","parameters":{"type":"object","properties":{"generationId":{"type":"string","description":"Id returned by generate.presentation."}},"required":["generationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"export.presentation","description":"Export an existing Alai presentation to one or more file formats (pdf, pptx, …). Returns a job id + download URLs.","parameters":{"type":"object","properties":{"presentationId":{"type":"string"},"exportFormats":{"type":"array","items":{"type":"string"},"description":"List of formats, e.g. [\"pdf\", \"pptx\"]."},"waitForCompletion":{"type":"boolean"},"maxWaitTime":{"type":"number"}},"required":["presentationId","exportFormats"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"add.slide","description":"Insert a new slide into an existing presentation at a given position.","parameters":{"type":"object","properties":{"presentationId":{"type":"string"},"slide_context":{"type":"string","description":"Topic/content for the new slide."},"slide_order":{"type":"string","description":"Position to insert the slide (e.g. \"end\", or a 1-based index)."},"additionalInstructions":{"type":"string"},"includeAiImages":{"type":"boolean"},"imageStyle":{"type":"string"}},"required":["presentationId","slide_context"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"delete.presentation","description":"Permanently delete an Alai presentation. Destructive — not reversible.","parameters":{"type":"object","properties":{"presentationId":{"type":"string"}},"required":["presentationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"alt-text-ai","displayName":"AltText.ai","description":"Generate SEO-friendly alt text for images via the AltText.ai vision API.","auth":{"kind":"api-key","hint":"AltText.ai API key (Account → API Access). Sent as X-API-Key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"images.generateAltText","description":"Generate alt text for a single image. Accepts a URL or base64-encoded raw bytes plus optional keyword guidance.","parameters":{"type":"object","properties":{"image":{"type":"string","description":"Public image URL OR base64-encoded raw image bytes. Required."},"keywords":{"type":"array","items":{"type":"string"},"description":"Keywords or phrases the generated alt text should consider including."},"negativeKeywords":{"type":"array","items":{"type":"string"},"description":"Keywords or phrases the generated alt text must not include."},"keywordSource":{"type":"string","description":"Free-form text used as a source for relevant keywords (e.g. the page body)."}},"required":["image"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"images.batchGenerateAltText","description":"Generate alt text for a batch of images. Accepts an array of image entries; each entry mirrors the single-image action input.","parameters":{"type":"object","properties":{"images":{"type":"array","description":"Array of { image, keywords?, negative_keywords?, keyword_source? } entries. Required.","items":{"type":"object"}}},"required":["images"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"images.deleteResult","description":"Delete a stored alt-text result by its per-request id.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"AltText.ai per-request id returned from generate."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"alttextify","displayName":"AltTextify","description":"Generate SEO-optimized alt text for images via the AltTextify API.","auth":{"kind":"api-key","hint":"AltTextify API key (X-API-Key header)."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"generate.alt.text","description":"Generate alt text for an image encoded as a data URL or raw base64 payload.","parameters":{"type":"object","properties":{"image":{"type":"string","description":"Image payload as a data URL (e.g. data:image/jpeg;base64,...) or raw base64 string."},"lang":{"type":"string","description":"Language code for the generated alt text (e.g. en, es, fr)."},"keywords":{"type":"array","items":{"type":"string"},"description":"Keywords/phrases to bias the generated alt text toward."},"negative_keywords":{"type":"array","items":{"type":"string"},"description":"Keywords/phrases to exclude from the generated alt text."},"async":{"type":"boolean","description":"When true, returns a job handle instead of the alt text directly."}},"required":["image"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"batch.generate.alt.text","description":"Generate alt text for a list of images in a single call.","parameters":{"type":"object","properties":{"images":{"type":"array","description":"Array of image entries. Each entry mirrors the single generate.alt.text body fields.","items":{"type":"object"}},"lang":{"type":"string"},"async":{"type":"boolean"}},"required":["images"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"result.delete","description":"Delete a stored alt-text generation by its id.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"AltTextify generation id."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"amazon-bedrock","displayName":"Amazon Bedrock","description":"Invoke AWS Bedrock foundation models for text generation, image analysis, image generation, and embeddings; list available foundation models.","auth":{"kind":"api-key","hint":"AWS credentials as JSON: {\"accessKeyId\":\"AKIA…\",\"secretAccessKey\":\"…\",\"region\":\"us-east-1\"}. Optional \"sessionToken\" and \"endpoint\". Requests are signed with AWS Signature V4; the region selects the bedrock-runtime..amazonaws.com endpoint."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"models.list","description":"List foundation models available in the configured AWS region.","parameters":{"type":"object","properties":{"byProvider":{"type":"string","description":"Filter to a specific provider (e.g. anthropic, amazon, meta)."},"byOutputModality":{"type":"string","description":"Filter by output modality (TEXT, IMAGE, EMBEDDING)."},"byInferenceType":{"type":"string","description":"Filter by inference type (ON_DEMAND, PROVISIONED)."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"models.get","description":"Describe a single foundation model.","parameters":{"type":"object","properties":{"modelIdentifier":{"type":"string","description":"Model identifier or ARN (e.g. anthropic.claude-3-sonnet-20240229-v1:0)."}},"required":["modelIdentifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"model.invoke","description":"Invoke a foundation model with a raw provider-native request body. Used for send.prompt, generate.image, generate.embeddings, and generate.content.from.image flows; the body schema is the model provider native schema (Anthropic messages, Titan image gen, Titan/Cohere embeddings, etc.).","parameters":{"type":"object","properties":{"modelId":{"type":"string","description":"Bedrock model id (e.g. anthropic.claude-3-sonnet-20240229-v1:0, amazon.titan-image-generator-v1, amazon.titan-embed-text-v2:0)."},"body":{"type":"object","description":"Provider-native request body (passed through as JSON)."},"accept":{"type":"string","description":"Response media type. Defaults to application/json; image generation returns application/json with base64-encoded artifacts."},"contentType":{"type":"string","description":"Request media type. Defaults to application/json."}},"required":["modelId","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"model.converse","description":"Multi-turn conversation against a foundation model using the unified Bedrock Converse API (model-agnostic messages array, system prompt, inference config, tool config).","parameters":{"type":"object","properties":{"modelId":{"type":"string","description":"Bedrock model id supporting Converse."},"messages":{"type":"array","description":"Conversation turns. Each item: { role: \"user\" | \"assistant\", content: [{ text } | { image } | { toolUse } | { toolResult }] }."},"system":{"type":"array","description":"Optional system prompt blocks: [{ text }]."},"inferenceConfig":{"type":"object","description":"Optional inference settings (maxTokens, temperature, topP, stopSequences)."},"toolConfig":{"type":"object","description":"Optional tool-use configuration (tools, toolChoice)."},"additionalModelRequestFields":{"type":"object","description":"Provider-specific fields passed through verbatim (e.g. Anthropic top_k)."}},"required":["modelId","messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"model.invoke.stream","description":"Invoke a foundation model with streaming response (server-sent event stream of model output chunks). Body and modelId match model.invoke; the response is an event stream rather than a single JSON document.","parameters":{"type":"object","properties":{"modelId":{"type":"string"},"body":{"type":"object","description":"Provider-native request body."},"accept":{"type":"string","description":"Defaults to application/vnd.amazon.eventstream."},"contentType":{"type":"string","description":"Defaults to application/json."}},"required":["modelId","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"amazon-eventbridge","displayName":"Amazon EventBridge","description":"Publish events and manage Amazon EventBridge event buses, rules, and rule targets.","auth":{"kind":"api-key","hint":"AWS credentials as JSON: {\"accessKeyId\":\"AKIA…\",\"secretAccessKey\":\"…\",\"region\":\"us-east-1\"}. An optional \"sessionToken\" supports temporary STS credentials."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"events.publish","description":"Publish up to 10 events to EventBridge event buses.","parameters":{"type":"object","properties":{"entries":{"type":"array","description":"Event entries. Each entry may contain Time, Source, Resources, DetailType, Detail, EventBusName, and TraceHeader."},"endpointId":{"type":"string","description":"Global endpoint identifier used for cross-region routing."}},"required":["entries"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"event-buses.list","description":"List event buses in the configured AWS region.","parameters":{"type":"object","properties":{"namePrefix":{"type":"string","description":"Filter event bus names by prefix."},"nextToken":{"type":"string"},"limit":{"type":"integer","description":"Maximum results to return (1-100)."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"event-buses.create","description":"Create a custom EventBridge event bus.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Event bus name."},"eventSourceName":{"type":"string","description":"Partner event source name to associate with the bus."},"description":{"type":"string"},"kmsKeyIdentifier":{"type":"string","description":"KMS key identifier used to encrypt events on this bus."},"deadLetterConfig":{"type":"object","description":"Dead-letter queue configuration, for example { Arn }."},"tags":{"type":"array","description":"AWS tags as an array of { Key, Value } objects."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"event-buses.delete","description":"Delete a custom EventBridge event bus.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Event bus name."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"rules.list","description":"List EventBridge rules, optionally filtered by event bus or name prefix.","parameters":{"type":"object","properties":{"eventBusName":{"type":"string"},"namePrefix":{"type":"string"},"nextToken":{"type":"string"},"limit":{"type":"integer","description":"Maximum results to return (1-100)."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rules.get","description":"Get one EventBridge rule by name and event bus.","parameters":{"type":"object","properties":{"name":{"type":"string"},"eventBusName":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rules.put","description":"Create or replace an EventBridge rule.","parameters":{"type":"object","properties":{"name":{"type":"string"},"eventBusName":{"type":"string"},"eventPattern":{"type":"string","description":"Event pattern as a JSON string."},"scheduleExpression":{"type":"string","description":"Rate or cron expression."},"state":{"type":"string","enum":["ENABLED","DISABLED","ENABLED_WITH_ALL_CLOUDTRAIL_MANAGEMENT_EVENTS"]},"description":{"type":"string"},"roleArn":{"type":"string"},"tags":{"type":"array","description":"AWS tags as { Key, Value } objects."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"rules.delete","description":"Delete an EventBridge rule after its targets have been removed.","parameters":{"type":"object","properties":{"name":{"type":"string"},"eventBusName":{"type":"string"},"force":{"type":"boolean","description":"Force deletion of a managed rule."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"targets.list","description":"List the targets attached to an EventBridge rule.","parameters":{"type":"object","properties":{"rule":{"type":"string"},"eventBusName":{"type":"string"},"nextToken":{"type":"string"},"limit":{"type":"integer","description":"Maximum results to return (1-100)."}},"required":["rule"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"targets.put","description":"Add or update up to 10 targets on an EventBridge rule.","parameters":{"type":"object","properties":{"rule":{"type":"string"},"eventBusName":{"type":"string"},"targets":{"type":"array","description":"Target definitions. Each target requires Id and Arn."}},"required":["rule","targets"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"targets.remove","description":"Remove target IDs from an EventBridge rule.","parameters":{"type":"object","properties":{"rule":{"type":"string"},"eventBusName":{"type":"string"},"ids":{"type":"array","description":"Target IDs to remove (up to 10)."},"force":{"type":"boolean","description":"Force removal from a managed rule."}},"required":["rule","ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"amazon-s3","displayName":"Amazon S3","description":"Scalable storage in the cloud. Read, upload, delete, and manage files in S3 buckets.","auth":{"kind":"api-key","hint":"AWS credentials as JSON: {\"accessKeyId\":\"AKIA…\",\"secretAccessKey\":\"…\",\"region\":\"us-east-1\"} for an IAM principal with S3 permissions. Optional \"sessionToken\" and \"endpoint\" (S3-compatible stores). Requests are signed with AWS Signature V4; the region selects the s3..amazonaws.com endpoint."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"files.list","description":"List files in an S3 bucket folder.","parameters":{"type":"object","properties":{"prefix":{"type":"string","description":"Folder path to filter results (e.g., docs/)"},"maxKeys":{"type":"integer","description":"Maximum number of files to return (1–1000)"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.read","description":"Read a file from S3.","parameters":{"type":"object","properties":{"key":{"type":"string","description":"The full path to the file in S3"}},"required":["key"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.upload","description":"Upload a file to S3.","parameters":{"type":"object","properties":{"key":{"type":"string","description":"The file path and name in S3"},"contentType":{"type":"string","description":"MIME type of the file"}},"required":["key"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.delete","description":"Delete a file from S3.","parameters":{"type":"object","properties":{"key":{"type":"string","description":"The full path to the file to delete"}},"required":["key"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"files.generateSignedUrl","description":"Generate a signed URL for temporary access to a file.","parameters":{"type":"object","properties":{"key":{"type":"string","description":"The file path in S3"},"expiresIn":{"type":"integer","description":"URL validity duration in minutes"}},"required":["key","expiresIn"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.moveFile","description":"Move a file to a different location in S3.","parameters":{"type":"object","properties":{"sourceKey":{"type":"string","description":"Current file path"},"destinationKey":{"type":"string","description":"New file path"}},"required":["sourceKey","destinationKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"files.copyFile","description":"Server-side copy of an object to a new key. Source is left in place.","parameters":{"type":"object","properties":{"sourceKey":{"type":"string","description":"Existing object identifier as {bucket}/{key}."},"destinationKey":{"type":"string","description":"New object key (relative to the destination bucket)."}},"required":["sourceKey","destinationKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.setMetadata","description":"Replace object metadata in place via the S3 copy-self pattern (x-amz-metadata-directive: REPLACE).","parameters":{"type":"object","properties":{"key":{"type":"string","description":"Object key whose metadata should be replaced."},"contentType":{"type":"string","description":"New Content-Type for the object."},"metadata":{"type":"string","description":"Serialized x-amz-meta-* JSON forwarded as the x-amz-meta-user header (caller-controlled)."}},"required":["key"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.createBucket","description":"Create a new bucket in the configured region. Request is a PUT against the bucket name path.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name to create."},"region":{"type":"string","description":"AWS region for the bucket (sent via x-amz-bucket-region)."}},"required":["bucket"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"amazon-secrets-manager","displayName":"AWS Secrets Manager","description":"Create, read, update, find, and delete secrets in AWS Secrets Manager, or generate a random password.","auth":{"kind":"api-key","hint":"AWS credentials as JSON: {\"accessKeyId\":\"AKIA…\",\"secretAccessKey\":\"…\",\"region\":\"us-east-1\"}. Optional \"sessionToken\" and \"endpoint\". Requests are signed with AWS Signature V4; the region selects the secretsmanager..amazonaws.com endpoint."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"secrets.get","description":"Retrieve the value of a secret by name or ARN.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Secret name or ARN."},"versionId":{"type":"string","description":"Specific version id (optional)."},"versionStage":{"type":"string","description":"Staging label (defaults to AWSCURRENT)."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"secrets.find","description":"List or filter secrets by name, tag, or description.","parameters":{"type":"object","properties":{"filterKey":{"type":"string","description":"Field to filter by (name, description, tag-key, tag-value, all)."},"filterValue":{"type":"string","description":"Filter value."},"maxResults":{"type":"integer","description":"Max results (1-100)."},"sortBy":{"type":"string","description":"Sort by name or last accessed."},"sortOrder":{"type":"string","description":"asc or desc."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"secrets.password.random","description":"Generate a random password (does not store it). Used as input to secrets.create / secrets.update.","parameters":{"type":"object","properties":{"passwordLength":{"type":"integer"},"excludeCharacters":{"type":"string"},"excludeNumbers":{"type":"boolean"},"excludePunctuation":{"type":"boolean"},"excludeUppercase":{"type":"boolean"},"excludeLowercase":{"type":"boolean"},"includeSpace":{"type":"boolean"},"requireEachIncludedType":{"type":"boolean"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"secrets.create","description":"Create a new secret with a name, value, and optional tags.","parameters":{"type":"object","properties":{"name":{"type":"string"},"secretValue":{"type":"string"},"description":{"type":"string"},"tags":{"type":"array","description":"List of { Key, Value } tag objects.","items":{"type":"object"}},"clientRequestToken":{"type":"string","description":"Idempotency token (defaults to invocation idempotency key)."}},"required":["name","secretValue"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"secrets.update","description":"Update the value of an existing secret. Creates a new AWSCURRENT version.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Secret name or ARN."},"secretValue":{"type":"string"},"description":{"type":"string"},"clientRequestToken":{"type":"string"}},"required":["name","secretValue"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"secrets.delete","description":"Schedule a secret for deletion. Defaults to a 30-day recovery window; pass forceDeleteWithoutRecovery to skip it.","parameters":{"type":"object","properties":{"name":{"type":"string"},"recoveryWindowInDays":{"type":"integer","description":"7-30. Ignored when forceDeleteWithoutRecovery is true."},"forceDeleteWithoutRecovery":{"type":"boolean"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"secrets.rotate","description":"Trigger immediate rotation of a secret.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Secret name or ARN."},"rotationLambdaArn":{"type":"string","description":"ARN of the Lambda rotation function (optional if already configured)."},"rotationRules":{"type":"object","description":"Optional RotationRules object (AutomaticallyAfterDays, Duration, ScheduleExpression)."},"rotateImmediately":{"type":"boolean","description":"When true, rotates the secret immediately in addition to scheduling."},"clientRequestToken":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"secrets.restore","description":"Cancel a scheduled deletion of a secret and reinstate it.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Secret name or ARN."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"secrets.tag","description":"Attach tags to a secret.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Secret name or ARN."},"tags":{"type":"array","description":"List of { Key, Value } tag objects to attach.","items":{"type":"object"}}},"required":["name","tags"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"amazon-ses","displayName":"Amazon SES","description":"Send transactional and templated email and manage SES email templates via the Amazon SES v2 REST API.","auth":{"kind":"api-key","hint":"AWS credentials as JSON: {\"accessKeyId\":\"AKIA…\",\"secretAccessKey\":\"…\",\"region\":\"us-east-1\"} (the key needs ses:SendEmail / ses:SendTemplatedEmail / template-management permissions). Optional \"sessionToken\" and \"endpoint\". Requests are signed with AWS Signature V4; the region selects the email..amazonaws.com (SES v2) endpoint."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"send.email","description":"Send a transactional email via SES SendEmail (simple content).","parameters":{"type":"object","properties":{"fromEmailAddress":{"type":"string"},"toAddresses":{"type":"array","items":{"type":"string"}},"ccAddresses":{"type":"array","items":{"type":"string"}},"bccAddresses":{"type":"array","items":{"type":"string"}},"replyToAddresses":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"htmlBody":{"type":"string"},"textBody":{"type":"string"},"returnPath":{"type":"string"},"configurationSetName":{"type":"string"},"emailTags":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string"},"Value":{"type":"string"}},"required":["Name","Value"]}},"sourceArn":{"type":"string"},"returnPathArn":{"type":"string"}},"required":["fromEmailAddress","toAddresses","subject"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"send.templated.email","description":"Send an email rendered from an SES email template with merge data.","parameters":{"type":"object","properties":{"fromEmailAddress":{"type":"string"},"toAddresses":{"type":"array","items":{"type":"string"}},"ccAddresses":{"type":"array","items":{"type":"string"}},"bccAddresses":{"type":"array","items":{"type":"string"}},"replyToAddresses":{"type":"array","items":{"type":"string"}},"templateName":{"type":"string"},"templateData":{"type":"object"},"configurationSetName":{"type":"string"},"emailTags":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string"},"Value":{"type":"string"}},"required":["Name","Value"]}},"sourceArn":{"type":"string"},"returnPathArn":{"type":"string"}},"required":["fromEmailAddress","toAddresses","templateName","templateData"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.email.template","description":"Create a reusable SES email template (subject + HTML + text parts).","parameters":{"type":"object","properties":{"templateName":{"type":"string"},"subjectPart":{"type":"string"},"htmlPart":{"type":"string"},"textPart":{"type":"string"}},"required":["templateName","subjectPart"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.email.template","description":"Update an existing SES email template by name.","parameters":{"type":"object","properties":{"templateName":{"type":"string"},"subjectPart":{"type":"string"},"htmlPart":{"type":"string"},"textPart":{"type":"string"}},"required":["templateName","subjectPart"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.custom.verification.email.template","description":"Create a custom verification email template used by SendCustomVerificationEmail.","parameters":{"type":"object","properties":{"templateName":{"type":"string"},"fromEmailAddress":{"type":"string"},"templateSubject":{"type":"string"},"templateContent":{"type":"string"},"successRedirectionURL":{"type":"string"},"failureRedirectionURL":{"type":"string"}},"required":["templateName","fromEmailAddress","templateSubject","templateContent","successRedirectionURL","failureRedirectionURL"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.custom.verification.email.template","description":"Update a custom verification email template by name.","parameters":{"type":"object","properties":{"templateName":{"type":"string"},"fromEmailAddress":{"type":"string"},"templateSubject":{"type":"string"},"templateContent":{"type":"string"},"successRedirectionURL":{"type":"string"},"failureRedirectionURL":{"type":"string"}},"required":["templateName","fromEmailAddress","templateSubject","templateContent","successRedirectionURL","failureRedirectionURL"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"send.custom.verification.email","description":"Send a custom verification email to an address using a previously created template.","parameters":{"type":"object","properties":{"emailAddress":{"type":"string"},"templateName":{"type":"string"},"configurationSetName":{"type":"string"}},"required":["emailAddress","templateName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"amazon-sns","displayName":"Amazon SNS","description":"Publish messages to Amazon Simple Notification Service topics, manage topics, and manage subscriptions.","auth":{"kind":"api-key","hint":"AWS credentials as JSON: {\"accessKeyId\":\"AKIA…\",\"secretAccessKey\":\"…\",\"region\":\"us-east-1\"}. Optional \"sessionToken\" and \"endpoint\". Requests are signed with AWS Signature V4; the region selects the sns..amazonaws.com endpoint."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"topics.list","description":"List Amazon SNS topics in the caller account. Paginated via NextToken.","parameters":{"type":"object","properties":{"nextToken":{"type":"string","description":"Continuation token returned by a prior ListTopics call."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"topics.get-attributes","description":"Get the attributes of an SNS topic (delivery policy, owner, subscription counts, etc.).","parameters":{"type":"object","properties":{"topicArn":{"type":"string","description":"ARN of the topic."}},"required":["topicArn"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.list","description":"List subscriptions, optionally filtered to a single topic.","parameters":{"type":"object","properties":{"topicArn":{"type":"string","description":"If set, list only subscriptions for this topic ARN."},"nextToken":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"send.message","description":"Publish a message to an SNS topic. The message is fanned out to all topic subscribers.","parameters":{"type":"object","properties":{"topicArn":{"type":"string","description":"ARN of the destination SNS topic."},"message":{"type":"string","description":"Message payload delivered to subscribers."},"subject":{"type":"string","description":"Optional subject line used by email-protocol subscribers (max 100 ASCII chars)."},"messageStructure":{"type":"string","description":"Set to \"json\" to deliver protocol-specific payloads (e.g. APNS vs email)."},"messageGroupId":{"type":"string","description":"FIFO topic message group id. Required for FIFO topics."},"messageDeduplicationId":{"type":"string","description":"FIFO topic deduplication id. Defaults to the invocation idempotency key for FIFO topics."}},"required":["topicArn","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"topics.create","description":"Create an SNS topic. Idempotent: calling with the same Name returns the existing topic ARN.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Topic name (1-256 chars, alnum/_/-, FIFO topics end with .fifo)."},"displayName":{"type":"string","description":"Human-readable name used in SMS subscriber notifications."},"fifoTopic":{"type":"boolean","description":"Set to true to create a FIFO topic (name must end with .fifo)."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"topics.delete","description":"Delete an SNS topic and all of its subscriptions.","parameters":{"type":"object","properties":{"topicArn":{"type":"string"}},"required":["topicArn"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.subscribe","description":"Subscribe an endpoint (email, https, sqs, lambda, sms, application) to an SNS topic.","parameters":{"type":"object","properties":{"topicArn":{"type":"string"},"protocol":{"type":"string","description":"http, https, email, email-json, sms, sqs, application, lambda, firehose."},"endpoint":{"type":"string","description":"URL / email address / ARN / phone number whose format depends on protocol."},"returnSubscriptionArn":{"type":"boolean","description":"Return the SubscriptionArn even when confirmation is still pending. Defaults to false."}},"required":["topicArn","protocol","endpoint"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.unsubscribe","description":"Delete an SNS subscription.","parameters":{"type":"object","properties":{"subscriptionArn":{"type":"string"}},"required":["subscriptionArn"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"amazon-sqs","displayName":"Amazon SQS","description":"Send, receive, and delete messages on AWS SQS queues, and discover queue URLs and attributes.","auth":{"kind":"api-key","hint":"AWS credentials as JSON: {\"accessKeyId\":\"AKIA…\",\"secretAccessKey\":\"…\",\"region\":\"us-east-1\"}. Optional \"sessionToken\" (STS temp creds) and \"endpoint\" (override host). Requests are signed with AWS Signature V4; the region selects the sqs..amazonaws.com endpoint."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"queues.list","description":"List SQS queue URLs visible to the caller in the configured region.","parameters":{"type":"object","properties":{"queueNamePrefix":{"type":"string","description":"Only return queues whose name starts with this prefix."},"maxResults":{"type":"integer","description":"Maximum number of queue URLs to return (1-1000)."},"nextToken":{"type":"string","description":"Pagination token from a previous ListQueues response."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"queues.getUrl","description":"Resolve a queue name to its URL (the canonical identifier used by every other SQS call).","parameters":{"type":"object","properties":{"queueName":{"type":"string","description":"Queue name (without the AWS account prefix)."},"queueOwnerAWSAccountId":{"type":"string","description":"AWS account id of the queue owner if not the caller."}},"required":["queueName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"queues.getAttributes","description":"Get queue attributes (e.g. ApproximateNumberOfMessages, VisibilityTimeout, RedrivePolicy).","parameters":{"type":"object","properties":{"queueUrl":{"type":"string","description":"Fully qualified SQS queue URL."},"attributeNames":{"type":"array","description":"Attribute names to fetch (e.g. [\"All\"], [\"ApproximateNumberOfMessages\"])."}},"required":["queueUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.send","description":"Send a message to an SQS queue. Maps to the activepieces send.message action. For FIFO queues, MessageGroupId is required and MessageDeduplicationId enables native deduplication.","parameters":{"type":"object","properties":{"queueUrl":{"type":"string","description":"Fully qualified SQS queue URL."},"messageBody":{"type":"string","description":"Message payload (string; opaque to SQS)."},"delaySeconds":{"type":"integer","description":"Delay before the message becomes visible (0-900 seconds)."},"messageAttributes":{"type":"object","description":"Structured attributes (name -> { DataType, StringValue | BinaryValue })."},"messageSystemAttributes":{"type":"object","description":"System attributes (e.g. AWSTraceHeader)."},"messageGroupId":{"type":"string","description":"FIFO queue ordering group; required for FIFO queues."},"messageDeduplicationId":{"type":"string","description":"FIFO queue dedup token; suppresses redelivery of the same id within the 5-minute window."}},"required":["queueUrl","messageBody"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.sendBatch","description":"Send up to 10 messages in one call. Each Entry needs a unique Id within the batch.","parameters":{"type":"object","properties":{"queueUrl":{"type":"string"},"entries":{"type":"array","description":"Array of { Id, MessageBody, DelaySeconds?, MessageAttributes?, MessageGroupId?, MessageDeduplicationId? }."}},"required":["queueUrl","entries"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.receive","description":"Receive up to MaxNumberOfMessages messages from a queue. Returns ReceiptHandles required for messages.delete. Long polling (WaitTimeSeconds > 0) reduces empty receives.","parameters":{"type":"object","properties":{"queueUrl":{"type":"string"},"maxNumberOfMessages":{"type":"integer","description":"Maximum messages to return (1-10)."},"waitTimeSeconds":{"type":"integer","description":"Long-poll duration (0-20 seconds)."},"visibilityTimeout":{"type":"integer","description":"Seconds the message stays invisible to other receivers."},"attributeNames":{"type":"array","description":"System attributes to include (e.g. [\"All\"])."},"messageAttributeNames":{"type":"array","description":"User attribute names to include (e.g. [\"All\"])."},"receiveRequestAttemptId":{"type":"string","description":"FIFO receive retry dedup token (5-minute window)."}},"required":["queueUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"messages.delete","description":"Permanently delete a message from a queue using the ReceiptHandle returned by messages.receive. Required to acknowledge processing; otherwise the message redelivers after VisibilityTimeout.","parameters":{"type":"object","properties":{"queueUrl":{"type":"string"},"receiptHandle":{"type":"string","description":"ReceiptHandle from the matching ReceiveMessage response."}},"required":["queueUrl","receiptHandle"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.deleteBatch","description":"Delete up to 10 messages in one call. Each Entry needs a unique Id within the batch.","parameters":{"type":"object","properties":{"queueUrl":{"type":"string"},"entries":{"type":"array","description":"Array of { Id, ReceiptHandle }."}},"required":["queueUrl","entries"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.changeVisibility","description":"Extend or shorten the visibility timeout of a received message. Use to keep a long-running handler from losing its lease.","parameters":{"type":"object","properties":{"queueUrl":{"type":"string"},"receiptHandle":{"type":"string"},"visibilityTimeout":{"type":"integer","description":"New visibility timeout in seconds (0-43200)."}},"required":["queueUrl","receiptHandle","visibilityTimeout"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"amazon-textract","displayName":"AWS Textract","description":"Extract text, forms, tables, signatures, and structured data (expense, identity) from documents using AWS Textract.","auth":{"kind":"api-key","hint":"AWS credentials as JSON: {\"accessKeyId\":\"AKIA…\",\"secretAccessKey\":\"…\",\"region\":\"us-east-1\"}. Optional \"sessionToken\" and \"endpoint\". Requests are signed with AWS Signature V4; the region selects the textract..amazonaws.com endpoint."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"document.analyze","description":"Analyze a document for forms, tables, signatures, layout, and queries (synchronous). Single-page JPEG/PNG up to 5 MB direct upload, or any size when sourced from S3.","parameters":{"type":"object","properties":{"Document":{"type":"object","description":"Document source. Either { Bytes: base64-encoded-image } for direct upload, or { S3Object: { Bucket, Name, Version? } } for an S3-hosted document."},"FeatureTypes":{"type":"array","description":"List of features to extract. Allowed values: TABLES, FORMS, SIGNATURES, LAYOUT, QUERIES."},"QueriesConfig":{"type":"object","description":"Optional plain-English questions to ask about the document. Shape: { Queries: [{ Text, Alias?, Pages? }] }. Requires FeatureTypes includes QUERIES."},"HumanLoopConfig":{"type":"object","description":"Optional Augmented AI (A2I) human review loop configuration."},"AdaptersConfig":{"type":"object","description":"Optional custom adapter configuration for fine-tuned extraction."}},"required":["Document","FeatureTypes"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"document.text.detect","description":"Detect lines and words of text in a document (synchronous OCR). Single-page JPEG/PNG up to 5 MB direct upload, or any size when sourced from S3.","parameters":{"type":"object","properties":{"Document":{"type":"object","description":"Document source. Either { Bytes: base64-encoded-image } or { S3Object: { Bucket, Name, Version? } }."}},"required":["Document"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"expense.analyze","description":"Extract receipt/invoice fields (vendor, total, line items, tax) from an expense document (synchronous).","parameters":{"type":"object","properties":{"Document":{"type":"object","description":"Document source. Either { Bytes: base64-encoded-image } or { S3Object: { Bucket, Name, Version? } }."}},"required":["Document"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"id.analyze","description":"Extract structured fields (name, date of birth, document number, address) from identity documents such as drivers licenses and passports.","parameters":{"type":"object","properties":{"DocumentPages":{"type":"array","description":"Array of 1–2 document pages, each of the form { Bytes } or { S3Object: { Bucket, Name, Version? } }."}},"required":["DocumentPages"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"document.analyze.async.start","description":"Start an asynchronous document analysis job for large or multi-page documents (PDF, TIFF). Returns a JobId for use with document.analyze.async.get.","parameters":{"type":"object","properties":{"DocumentLocation":{"type":"object","description":"S3 source: { S3Object: { Bucket, Name, Version? } }."},"FeatureTypes":{"type":"array","description":"List of features to extract. Allowed values: TABLES, FORMS, SIGNATURES, LAYOUT, QUERIES."},"ClientRequestToken":{"type":"string","description":"Idempotency token (1–64 chars). Repeated calls with the same token return the same JobId for up to 24 hours."},"JobTag":{"type":"string","description":"Optional identifier echoed in completion notifications."},"NotificationChannel":{"type":"object","description":"Optional SNS topic config: { SNSTopicArn, RoleArn }."},"OutputConfig":{"type":"object","description":"Optional S3 destination for raw analysis output: { S3Bucket, S3Prefix? }."},"KMSKeyId":{"type":"string","description":"Optional KMS key id for server-side encryption of output."},"QueriesConfig":{"type":"object","description":"Optional queries config (same shape as the synchronous Analyze call)."},"AdaptersConfig":{"type":"object","description":"Optional custom adapter configuration."}},"required":["DocumentLocation","FeatureTypes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"document.analyze.async.get","description":"Retrieve the results of an asynchronous document analysis job started with document.analyze.async.start. Pages results via NextToken for large outputs.","parameters":{"type":"object","properties":{"JobId":{"type":"string","description":"JobId returned by document.analyze.async.start."},"MaxResults":{"type":"number","description":"Maximum blocks per page (1–1000). Default 1000."},"NextToken":{"type":"string","description":"Pagination cursor returned by the previous call."}},"required":["JobId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"aminos","displayName":"Aminos One","description":"Provision end-users on an Aminos One panel.","auth":{"kind":"api-key","hint":"Aminos One API access token from the panel; the panel base URL is supplied via connection metadata."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.create","description":"Create an end-user on the Aminos One panel under the supplied plan. Mirrors the activepieces createUser action.","parameters":{"type":"object","properties":{"useremail":{"type":"string","description":"Username for the new Aminos user. Must be an e-mail address."},"userfriendlyname":{"type":"string","description":"Display name for the new Aminos user."},"userplanid":{"type":"integer","description":"Plan ID number from the plans defined in the Aminos One panel."}},"required":["useremail","userfriendlyname","userplanid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.update","description":"Update an existing Aminos One end-user by id.","parameters":{"type":"object","properties":{"userid":{"type":"string","description":"Identifier of the Aminos user to update."},"useremail":{"type":"string","description":"New email address for the user."},"userfriendlyname":{"type":"string","description":"New display name for the user."},"userplanid":{"type":"integer","description":"New plan id for the user."}},"required":["userid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.delete","description":"Delete an Aminos One end-user account by id.","parameters":{"type":"object","properties":{"userid":{"type":"string","description":"Identifier of the Aminos user to delete."}},"required":["userid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.list","description":"List end-users registered on the Aminos One panel.","parameters":{"type":"object","properties":{"page":{"type":"integer","description":"Page number to retrieve."},"limit":{"type":"integer","description":"Maximum number of users per page."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"ampeco","displayName":"AMPECO","description":"Manage AMPECO EV-charging infrastructure: charge points, EVSEs, sessions, tariffs, users, and webhook notification subscriptions.","auth":{"kind":"api-key","hint":"AMPECO Public API token (Bearer)."},"category":"webhook","defaultConsistencyModel":"authoritative","capabilities":[{"name":"charge.points.list","description":"List charge points across the operator network.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer"},"pageNumber":{"type":"integer"},"filter":{"type":"string","description":"AMPECO filter expression (filter[...])."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"charge.point.read","description":"Get a single charge point by ID.","parameters":{"type":"object","properties":{"chargePoint":{"type":"integer"}},"required":["chargePoint"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"charge.point.change.availability","description":"Change the operational availability of a charge point or one of its connectors (Operative/Inoperative).","parameters":{"type":"object","properties":{"chargePoint":{"type":"integer"},"evseNetworkId":{"type":"integer"},"type":{"type":"string","enum":["Operative","Inoperative"]}},"required":["chargePoint","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"charge.point.reset","description":"Issue a Soft or Hard reset to a charge point.","parameters":{"type":"object","properties":{"chargePoint":{"type":"integer"},"type":{"type":"string","enum":["Soft","Hard"]}},"required":["chargePoint","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"charge.point.start.charging.session","description":"Start a remote charging session on a given EVSE of a charge point.","parameters":{"type":"object","properties":{"chargePoint":{"type":"integer"},"evseNetworkId":{"type":"integer"},"userId":{"type":"integer"}},"required":["chargePoint","evseNetworkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"charge.point.stop.charging.session","description":"Stop a running charging session on a charge point EVSE.","parameters":{"type":"object","properties":{"chargePoint":{"type":"integer"},"evseNetworkId":{"type":"integer"}},"required":["chargePoint","evseNetworkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"evses.list","description":"List EVSE connectors.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer"},"pageNumber":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"evse.read","description":"Get a single EVSE by ID.","parameters":{"type":"object","properties":{"evse":{"type":"integer"}},"required":["evse"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sessions.list","description":"List charging sessions with optional date/user filters.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer"},"pageNumber":{"type":"integer"},"fromDate":{"type":"string","description":"ISO 8601"},"toDate":{"type":"string","description":"ISO 8601"},"userId":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"session.read","description":"Get a single charging session by ID.","parameters":{"type":"object","properties":{"session":{"type":"integer"}},"required":["session"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"locations.list","description":"List charging locations.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer"},"pageNumber":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"location.read","description":"Get a charging location by ID.","parameters":{"type":"object","properties":{"location":{"type":"integer"}},"required":["location"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"location.create","description":"Create a new charging location.","parameters":{"type":"object","properties":{"data":{"type":"object"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"location.update","description":"Update a charging location.","parameters":{"type":"object","properties":{"location":{"type":"integer"},"data":{"type":"object"}},"required":["location","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"location.delete","description":"Delete a charging location.","parameters":{"type":"object","properties":{"location":{"type":"integer"}},"required":["location"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tariffs.list","description":"List tariffs.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tariff.read","description":"Get a single tariff by ID.","parameters":{"type":"object","properties":{"tariff":{"type":"integer"}},"required":["tariff"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tariff.create","description":"Create a tariff.","parameters":{"type":"object","properties":{"data":{"type":"object"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tariff.update","description":"Update a tariff.","parameters":{"type":"object","properties":{"tariff":{"type":"integer"},"data":{"type":"object"}},"required":["tariff","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tariff.delete","description":"Delete a tariff.","parameters":{"type":"object","properties":{"tariff":{"type":"integer"}},"required":["tariff"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"users.list","description":"List end-user accounts.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer"},"pageNumber":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"user.read","description":"Get an end-user account by ID.","parameters":{"type":"object","properties":{"user":{"type":"integer"}},"required":["user"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"user.create","description":"Create a new end-user account.","parameters":{"type":"object","properties":{"data":{"type":"object"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"user.update","description":"Update an end-user account.","parameters":{"type":"object","properties":{"user":{"type":"integer"},"data":{"type":"object"}},"required":["user","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"user.delete","description":"Delete an end-user account.","parameters":{"type":"object","properties":{"user":{"type":"integer"}},"required":["user"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"notifications.list","description":"List webhook notification subscriptions.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"notifications.subscribe","description":"Subscribe a webhook URL to one or more AMPECO event types.","parameters":{"type":"object","properties":{"url":{"type":"string"},"events":{"type":"array","items":{"type":"string"}},"secret":{"type":"string"}},"required":["url","events"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notifications.unsubscribe","description":"Remove a webhook notification subscription by ID.","parameters":{"type":"object","properties":{"subscription":{"type":"integer"}},"required":["subscription"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"amplemarket","displayName":"Amplemarket","description":"Sales intelligence and outbound platform: search and enrich people and companies, validate emails, and add leads to sequences.","auth":{"kind":"api-key","hint":"Generate an API key in the Amplemarket dashboard (Settings -> API). Sent as the Authorization: Bearer header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"people.search","description":"Search for people by job function, company, industry and other filters.","parameters":{"type":"object","properties":{"page":{"type":"integer","description":"Page number."},"page_size":{"type":"integer","description":"Results per page."},"job_functions":{"type":"array","items":{"type":"string"},"description":"Job functions to filter by."},"industries":{"type":"array","items":{"type":"string"},"description":"Industries to filter by."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"people.find","description":"Enrich a single person by LinkedIn URL, email, or full name plus company. Consumes credits when contact data is revealed.","parameters":{"type":"object","properties":{"linkedin_url":{"type":"string","description":"LinkedIn profile URL."},"email":{"type":"string","description":"Known email address."},"full_name":{"type":"string","description":"Person's full name."},"company_name":{"type":"string","description":"Company name (use with full_name)."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"companies.find","description":"Enrich a single company by LinkedIn URL, domain, or name.","parameters":{"type":"object","properties":{"linkedin_url":{"type":"string","description":"Company LinkedIn URL."},"domain":{"type":"string","description":"Company domain."},"name":{"type":"string","description":"Company name."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"email.validate","description":"Start a batch email validation job. Consumes one email credit per validated address.","parameters":{"type":"object","properties":{"emails":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string"}}},"description":"List of email objects to validate."}},"required":["emails"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"sequence.add_leads","description":"Add one or more leads to an existing Amplemarket sequence.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Sequence ID."},"leads":{"type":"array","items":{"type":"object"},"description":"Array of lead objects to enroll."}},"required":["id","leads"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"amplitude","displayName":"Amplitude","description":"Query project analytics and manage chart annotations with Amplitude project API credentials.","auth":{"kind":"api-key","hint":"JSON credential bundle: {\"apiKey\":\"...\",\"secretKey\":\"...\"} from Project Settings → General. Set metadata.apiBaseUrl to https://analytics.eu.amplitude.com only for an EU-resident project; the default is https://amplitude.com."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"events.list","description":"List visible project events with current-week totals, uniques, and daily-active-user share.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"events.segment","description":"Query event totals, uniques, percentages, averages, or formulas over a date range.","parameters":{"type":"object","properties":{"event":{"type":"string","description":"JSON event definition, for example {\"event_type\":\"_active\"}."},"secondEvent":{"type":"string","description":"Optional second JSON event definition."},"metric":{"type":"string","enum":["uniques","totals","pct_dau","average","histogram","sums","value_avg","formula"]},"activeUserType":{"type":"string","enum":["any","active"]},"start":{"type":"string","pattern":"^[0-9]{8}$","description":"Inclusive date in YYYYMMDD format."},"end":{"type":"string","pattern":"^[0-9]{8}$","description":"Inclusive date in YYYYMMDD format."},"interval":{"type":"integer","enum":[-300000,-3600000,1,7,30]},"segment":{"type":"string","description":"JSON array of Amplitude segment definitions."},"groupBy":{"type":"string"},"secondGroupBy":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":1000},"formula":{"type":"string"},"rollingWindow":{"type":"integer","minimum":1},"rollingAverage":{"type":"integer","minimum":1}},"required":["event","start","end"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.counts","description":"Get active or new user counts over a date range.","parameters":{"type":"object","properties":{"start":{"type":"string","pattern":"^[0-9]{8}$","description":"Inclusive date in YYYYMMDD format."},"end":{"type":"string","pattern":"^[0-9]{8}$","description":"Inclusive date in YYYYMMDD format."},"mode":{"type":"string","enum":["active","new"]},"interval":{"type":"integer","enum":[1,7,30]},"segment":{"type":"string","description":"JSON array of Amplitude segment definitions."},"groupBy":{"type":"string"}},"required":["start","end"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sessions.average-length","description":"Get average session length in seconds for each day in a date range.","parameters":{"type":"object","properties":{"start":{"type":"string","pattern":"^[0-9]{8}$","description":"Inclusive date in YYYYMMDD format."},"end":{"type":"string","pattern":"^[0-9]{8}$","description":"Inclusive date in YYYYMMDD format."}},"required":["start","end"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.search","description":"Search for a user by Amplitude ID, device ID, user ID, or user ID prefix.","parameters":{"type":"object","properties":{"user":{"type":"string","minLength":1}},"required":["user"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.activity","description":"Read one user summary and a bounded window of recent or earliest events.","parameters":{"type":"object","properties":{"user":{"type":"string","minLength":1,"description":"Amplitude user ID."},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":0,"maximum":1000},"direction":{"type":"string","enum":["earliest","latest"]}},"required":["user"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"charts.results","description":"Export results from one saved Amplitude chart by chart ID.","parameters":{"type":"object","properties":{"chartId":{"type":"string","minLength":1}},"required":["chartId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"annotations.list","description":"List project chart annotations with optional category, chart, and date filters.","parameters":{"type":"object","properties":{"category":{"type":"string"},"chartId":{"type":"string"},"start":{"type":"string","description":"ISO 8601 timestamp with a time-zone offset."},"end":{"type":"string","description":"ISO 8601 timestamp with a time-zone offset."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"annotations.get","description":"Read one chart annotation by ID.","parameters":{"type":"object","properties":{"annotationId":{"type":"integer","minimum":1,"description":"Amplitude annotation ID."}},"required":["annotationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"annotations.create","description":"Create a project-wide or chart-specific annotation.","parameters":{"type":"object","properties":{"annotation":{"type":"object","properties":{"label":{"type":"string","minLength":1},"start":{"type":"string","description":"ISO 8601 timestamp with a time-zone offset."},"category":{"type":"string"},"chart_id":{"type":["string","null"]},"details":{"type":"string"},"end":{"type":["string","null"],"description":"ISO 8601 timestamp with a time-zone offset."}},"required":["label","start"],"additionalProperties":false}},"required":["annotation"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"annotations.update","description":"Partially update one annotation.","parameters":{"type":"object","properties":{"annotationId":{"type":"integer","minimum":1,"description":"Amplitude annotation ID."},"changes":{"type":"object","properties":{"label":{"type":"string","minLength":1},"start":{"type":"string","description":"ISO 8601 timestamp with a time-zone offset."},"category":{"type":"string"},"chart_id":{"type":["string","null"]},"details":{"type":"string"},"end":{"type":["string","null"],"description":"ISO 8601 timestamp with a time-zone offset."}},"required":[],"additionalProperties":false}},"required":["annotationId","changes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"annotations.delete","description":"Permanently delete one annotation.","parameters":{"type":"object","properties":{"annotationId":{"type":"integer","minimum":1,"description":"Amplitude annotation ID."}},"required":["annotationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"annotation-categories.list","description":"List annotation categories or filter by exact category name.","parameters":{"type":"object","properties":{"category":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"annotation-categories.get","description":"Read one annotation category by ID.","parameters":{"type":"object","properties":{"categoryId":{"type":"integer","minimum":1,"description":"Amplitude annotation category ID."}},"required":["categoryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"annotation-categories.create","description":"Create an annotation category.","parameters":{"type":"object","properties":{"category":{"type":"string","minLength":1}},"required":["category"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"annotation-categories.update","description":"Rename one annotation category.","parameters":{"type":"object","properties":{"categoryId":{"type":"integer","minimum":1,"description":"Amplitude annotation category ID."},"category":{"type":"string","minLength":1}},"required":["categoryId","category"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"annotation-categories.delete","description":"Permanently delete one annotation category.","parameters":{"type":"object","properties":{"categoryId":{"type":"integer","minimum":1,"description":"Amplitude annotation category ID."}},"required":["categoryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"anthropic","displayName":"Anthropic","description":"Generate completions with Claude models, run batch jobs, count tokens, and inspect uploaded files via the Anthropic Messages API.","auth":{"kind":"api-key","hint":"Anthropic workspace API key (starts with sk-ant-…). Create one at https://console.anthropic.com/settings/keys."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"messages.create","description":"Create a single message completion against a Claude model. Pass the full Messages-API body (model, max_tokens, messages, optional system, tools, stream).","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Anthropic model id, e.g. claude-opus-4-5-20251101 or claude-sonnet-4-5."},"max_tokens":{"type":"integer","minimum":1},"messages":{"type":"array","description":"Ordered conversation turns (role + content array).","items":{"type":"object"}},"system":{"description":"Optional system prompt — string or content-block array."},"temperature":{"type":"number","minimum":0,"maximum":1},"top_p":{"type":"number","minimum":0,"maximum":1},"top_k":{"type":"integer","minimum":0},"stop_sequences":{"type":"array","items":{"type":"string"}},"stream":{"type":"boolean"},"tools":{"type":"array","items":{"type":"object"}},"tool_choice":{"type":"object"},"metadata":{"type":"object"},"thinking":{"type":"object"}},"required":["model","max_tokens","messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"messages.count_tokens","description":"Return the input token count Anthropic would charge for a given message body, without running generation.","parameters":{"type":"object","properties":{"model":{"type":"string"},"messages":{"type":"array","items":{"type":"object"}},"system":{},"tools":{"type":"array","items":{"type":"object"}},"tool_choice":{"type":"object"}},"required":["model","messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"models.list","description":"List Claude models available to the calling workspace.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":1000},"after_id":{"type":"string"},"before_id":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"models.get","description":"Fetch metadata for a specific Claude model (display name, max output tokens, deprecation date).","parameters":{"type":"object","properties":{"model_id":{"type":"string"}},"required":["model_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"batches.create","description":"Submit a Message Batches job: an array of request objects each carrying its own custom_id and Messages-API params. Returns a batch handle the caller polls.","parameters":{"type":"object","properties":{"requests":{"type":"array","description":"Up to 100k requests; each item is { custom_id, params } where params matches /v1/messages.","items":{"type":"object"}}},"required":["requests"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"batches.list","description":"List recent message batches.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":1000},"after_id":{"type":"string"},"before_id":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"batches.get","description":"Retrieve the status of a previously-submitted message batch (in_progress, canceling, ended).","parameters":{"type":"object","properties":{"batch_id":{"type":"string"}},"required":["batch_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"batches.results","description":"Stream the JSONL results of an ended batch. The connector returns the raw response body — the caller is responsible for line-splitting.","parameters":{"type":"object","properties":{"batch_id":{"type":"string"}},"required":["batch_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"batches.cancel","description":"Request cancellation of an in-progress batch. In-flight requests may still complete.","parameters":{"type":"object","properties":{"batch_id":{"type":"string"}},"required":["batch_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"batches.delete","description":"Delete a batch (only allowed once the batch has ended).","parameters":{"type":"object","properties":{"batch_id":{"type":"string"}},"required":["batch_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.list","description":"List files previously uploaded for use with the Files API (file IDs referenced by document content blocks). Requires the files beta header at the server level.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":1000},"after_id":{"type":"string"},"before_id":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.get","description":"Fetch metadata for an uploaded file (size, mime type, created_at).","parameters":{"type":"object","properties":{"file_id":{"type":"string"}},"required":["file_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.delete","description":"Delete an uploaded file. File IDs already embedded in saved conversations remain dangling.","parameters":{"type":"object","properties":{"file_id":{"type":"string"}},"required":["file_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"anyhook-websocket","displayName":"AnyHook Websocket","description":"Subscribe and listen to websocket events through AnyHook proxy server for real-time communication.","auth":{"kind":"api-key","hint":"AnyHook server URL and websocket endpoint."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"websocket.subscribe","description":"Subscribe to websocket events from AnyHook endpoint.","parameters":{"type":"object","properties":{"websocketUrl":{"type":"string","description":"Websocket endpoint URL to connect to"},"subscriptionMessage":{"type":"object","description":"Message to send to subscribe to events"},"headers":{"type":"object","description":"Optional custom headers for the connection"}},"required":["websocketUrl","subscriptionMessage"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"apify","displayName":"Apify","description":"Manage Apify datasets, actors, and tasks. Get dataset items, run actors/tasks, scrape URLs, and access key-value store records.","auth":{"kind":"api-key","hint":"Apify API key from settings, API & Integrations section."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"datasets.items.get","description":"Get items from an Apify dataset.","parameters":{"type":"object","properties":{"datasetId":{"type":"string","description":"The ID of the dataset."},"offset":{"type":"integer","description":"Number of items to skip at the start."},"limit":{"type":"integer","description":"Maximum number of results to return."}},"required":["datasetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"keyvalue-stores.records.get","description":"Get a record from an Apify key-value store.","parameters":{"type":"object","properties":{"storeId":{"type":"string","description":"The ID of the key-value store."},"recordKey":{"type":"string","description":"The key of the record to retrieve."}},"required":["storeId","recordKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"actors.run","description":"Run an Apify actor.","parameters":{"type":"object","properties":{"actorId":{"type":"string","description":"The ID or name of the actor to run."},"input":{"type":"object","description":"Input data for the actor."}},"required":["actorId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.run","description":"Run an Apify task.","parameters":{"type":"object","properties":{"taskId":{"type":"string","description":"The ID of the task to run."},"input":{"type":"object","description":"Input data for the task."}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"web-scrape.url","description":"Scrape a single URL using Apify web scraper.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"URL to scrape. Must start with http:// or https://."},"crawlerType":{"type":"string","description":"Type of crawler to use (e.g., cheerio, playwright)."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"actor.abort","description":"Abort a running Apify actor run.","parameters":{"type":"object","properties":{"runId":{"type":"string","description":"Identifier of the actor run to abort."},"gracefully":{"type":"boolean","description":"Whether to abort gracefully (send SIGINT) instead of forcibly killing the run."}},"required":["runId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"actor.run.resurrect","description":"Resurrect a finished Apify actor run.","parameters":{"type":"object","properties":{"runId":{"type":"string","description":"Identifier of the finished run to resurrect."},"build":{"type":"string","description":"Tag or number of the actor build to use."},"timeout":{"type":"integer","description":"New timeout in seconds for the resurrected run."},"memory":{"type":"integer","description":"New memory limit (in MB) for the resurrected run."}},"required":["runId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"dataset.create","description":"Create a new named Apify dataset.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Name of the dataset to create."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"dataset.delete","description":"Delete an Apify dataset.","parameters":{"type":"object","properties":{"datasetId":{"type":"string","description":"Identifier of the dataset to delete."}},"required":["datasetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"apitable","displayName":"AITable","description":"Read and write records in AITable (APITable) datasheets via the Fusion REST API.","auth":{"kind":"api-key","hint":"AITable API token (Bearer) plus the instance URL of the AITable deployment."},"category":"spreadsheet","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.find","description":"List or filter records in an AITable datasheet.","parameters":{"type":"object","properties":{"datasheetId":{"type":"string"},"recordIds":{"type":"array","items":{"type":"string"}},"fieldNames":{"type":"array","items":{"type":"string"}},"filter":{"type":"string"},"maxRecords":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1,"maximum":1000},"pageNum":{"type":"integer","minimum":1}},"required":["datasheetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.create","description":"Create one or more records in an AITable datasheet.","parameters":{"type":"object","properties":{"datasheetId":{"type":"string"},"records":{"type":"array","items":{"type":"object","properties":{"fields":{"type":"object"}},"required":["fields"]}},"fieldKey":{"type":"string","enum":["name","id"]}},"required":["datasheetId","records"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Update one or more records in an AITable datasheet.","parameters":{"type":"object","properties":{"datasheetId":{"type":"string"},"recordId":{"type":"string"},"fields":{"type":"object"},"fieldKey":{"type":"string","enum":["name","id"]}},"required":["datasheetId","recordId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.delete","description":"Delete one or more records from an AITable datasheet.","parameters":{"type":"object","properties":{"datasheetId":{"type":"string","description":"Datasheet to delete records from."},"recordIds":{"type":"array","items":{"type":"string"},"description":"Identifiers of records to delete."}},"required":["datasheetId","recordIds"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"fields.create","description":"Add a field (column) to an AITable datasheet.","parameters":{"type":"object","properties":{"datasheetId":{"type":"string","description":"Datasheet to add the field to."},"name":{"type":"string","description":"Name of the new field."},"type":{"type":"string","description":"Type identifier for the field (e.g., SingleText, Number, SingleSelect)."},"property":{"type":"object","description":"Type-specific property configuration for the field."}},"required":["datasheetId","name","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"datasheets.create","description":"Create a new datasheet in an AITable space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string","description":"Space to create the datasheet in."},"name":{"type":"string","description":"Name of the new datasheet."},"folderId":{"type":"string","description":"Optional parent folder."},"preNodeId":{"type":"string","description":"Optional previous-sibling node id for ordering."},"description":{"type":"string","description":"Optional datasheet description."},"fields":{"type":"array","items":{"type":"object"},"description":"Optional initial field definitions."}},"required":["spaceId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"apitemplate-io","displayName":"APITemplate.io","description":"Generate PDFs and images from APITemplate.io templates or raw HTML/URLs, list generated objects, and manage account artifacts.","auth":{"kind":"api-key","hint":"APITemplate.io API key issued from the dashboard."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.get","description":"Get APITemplate.io account information, including plan and usage counters.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"objects.list","description":"List generated PDF/image objects, optionally filtered by template, transaction reference, or date range.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":300},"offset":{"type":"integer","minimum":0},"templateId":{"type":"string"},"transactionRef":{"type":"string"},"dateFrom":{"type":"string","description":"YYYY-MM-DD"},"dateTo":{"type":"string","description":"YYYY-MM-DD"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"image.create","description":"Render an image from an APITemplate.io image template by template ID, supplying an overrides payload.","parameters":{"type":"object","properties":{"templateId":{"type":"string"},"data":{"type":"object","description":"Template overrides payload, e.g. { \"overrides\": [ { \"name\": \"field\", \"text\": \"value\" } ] }."},"meta":{"type":"string","description":"External reference ID echoed back on the response."}},"required":["templateId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pdf.create","description":"Render a PDF from an APITemplate.io PDF template by template ID, supplying an overrides payload.","parameters":{"type":"object","properties":{"templateId":{"type":"string"},"data":{"type":"object","description":"Template overrides payload consumed by the PDF template."},"expiration":{"type":"integer","minimum":0,"maximum":10080,"description":"0 = permanent, 1-10080 minutes (7 days max) otherwise."},"meta":{"type":"string"},"generationDelay":{"type":"integer","description":"Delay in milliseconds before PDF generation."}},"required":["templateId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pdf.createFromHtml","description":"Render a PDF from raw HTML (and optional CSS) without an APITemplate.io template, with full page layout controls.","parameters":{"type":"object","properties":{"html":{"type":"string","description":"HTML body to render."},"css":{"type":"string","description":"Optional CSS applied to the HTML body."},"expiration":{"type":"integer","minimum":0,"maximum":10080},"meta":{"type":"string"},"pageSize":{"type":"string","description":"e.g. A4, Letter, Legal."},"orientation":{"type":"string","enum":["portrait","landscape"]},"marginTop":{"type":"number"},"marginBottom":{"type":"number"},"marginLeft":{"type":"number"},"marginRight":{"type":"number"},"printBackground":{"type":"boolean"},"displayHeaderFooter":{"type":"boolean"},"customHeader":{"type":"string"},"customFooter":{"type":"string"},"headerFontSize":{"type":"string"},"scale":{"type":"number","minimum":0.1,"maximum":2},"waitForTimeout":{"type":"integer"}},"required":["html"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pdf.createFromUrl","description":"Render a PDF by loading a remote URL in a headless browser, with viewport, scroll, and selector controls.","parameters":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"expiration":{"type":"integer","minimum":0,"maximum":10080},"meta":{"type":"string"},"pageSize":{"type":"string"},"orientation":{"type":"string","enum":["portrait","landscape"]},"marginTop":{"type":"number"},"marginBottom":{"type":"number"},"marginLeft":{"type":"number"},"marginRight":{"type":"number"},"printBackground":{"type":"boolean"},"scale":{"type":"number","minimum":0.1,"maximum":2},"waitForTimeout":{"type":"integer"},"waitForSelector":{"type":"string"},"viewportWidth":{"type":"integer"},"viewportHeight":{"type":"integer"},"fullPage":{"type":"boolean"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"object.delete","description":"Permanently delete a previously generated PDF or image object by transaction reference.","parameters":{"type":"object","properties":{"transactionRef":{"type":"string"}},"required":["transactionRef"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"apollo","displayName":"Apollo","description":"AI sales platform for prospecting, lead gen, and deal automation. Match and enrich people and companies, search organizations, news, and people.","auth":{"kind":"api-key","hint":"Apollo API key from Settings → Integrations → API. Sent as the X-Api-Key header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"match.person","description":"Match a person by email (and optional context) to an Apollo person record, returning enriched contact data.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the person to match."},"first_name":{"type":"string"},"last_name":{"type":"string"},"name":{"type":"string"},"organization_name":{"type":"string"},"domain":{"type":"string","description":"Company domain of the person."},"linkedin_url":{"type":"string"},"reveal_personal_emails":{"type":"boolean"},"reveal_phone_number":{"type":"boolean"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"enrich.company","description":"Enrich an organization record by domain, returning Apollo company data.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Company domain (e.g. apollo.io)."}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"news.articles.search","description":"Search news articles tied to organizations, with optional category and published-date filters.","parameters":{"type":"object","properties":{"organization_ids":{"type":"array","items":{"type":"string"},"description":"Apollo organization IDs to include."},"categories":{"type":"array","items":{"type":"string"},"description":"News categories to filter by (e.g. hires, investment, contract)."},"published_at_min":{"type":"string","description":"Lower bound of the date range (YYYY-MM-DD)."},"published_at_max":{"type":"string","description":"Upper bound of the date range (YYYY-MM-DD)."},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}},"required":["organization_ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"organization.job.postings","description":"List currently active job postings for a single Apollo organization.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"The Apollo organization ID to fetch job postings for."},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}},"required":["organization_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"organization.search","description":"Search Apollo organizations by name, domain, location, employee-count range, or industry tag.","parameters":{"type":"object","properties":{"q_organization_name":{"type":"string"},"q_organization_domains":{"type":"array","items":{"type":"string"},"description":"Filter by organization domains."},"organization_locations":{"type":"array","items":{"type":"string"}},"organization_not_locations":{"type":"array","items":{"type":"string"}},"organization_num_employees_ranges":{"type":"array","items":{"type":"string"},"description":"Employee-count ranges (e.g. \"1,10\", \"11,50\")."},"organization_industry_tag_ids":{"type":"array","items":{"type":"string"}},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sequences.add_contacts","description":"Add one or more contacts to an Apollo emailer campaign (sequence). Optionally specify the sender mailbox to enroll under via send_email_from_email_address.","parameters":{"type":"object","properties":{"campaign_id":{"type":"string","description":"Apollo emailer_campaign (sequence) id to enroll contacts into."},"contact_ids":{"type":"array","items":{"type":"string"},"description":"Apollo contact ids to add to the sequence."},"send_email_from_email_address":{"type":"string","description":"Optional sender mailbox address (must already be connected to Apollo) to send the sequence from."}},"required":["campaign_id","contact_ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"people.search","description":"Search Apollo people records by keyword, title, seniority, location, or organization filter.","parameters":{"type":"object","properties":{"q_keywords":{"type":"string","description":"Free-text keywords for people search."},"person_titles":{"type":"array","items":{"type":"string"}},"person_locations":{"type":"array","items":{"type":"string"}},"person_seniorities":{"type":"array","items":{"type":"string"},"description":"Seniority levels (e.g. owner, founder, c_suite, vp, director, manager)."},"organization_ids":{"type":"array","items":{"type":"string"}},"q_organization_domains":{"type":"array","items":{"type":"string"}},"organization_num_employees_ranges":{"type":"array","items":{"type":"string"}},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"appfollow","displayName":"AppFollow","description":"Manage and improve app reviews and ratings via AppFollow.","auth":{"kind":"api-key","hint":"AppFollow API key (sent as Bearer token)."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"reply.to.review","description":"Reply to an app store review.","parameters":{"type":"object","properties":{"ext_id":{"type":"string","description":"Application external id in AppFollow."},"review_id":{"type":"string","description":"Review id to reply to."},"fromDate":{"type":"string","description":"Start date for the reviews to reply to (YYYY-MM-DD)."},"toDate":{"type":"string","description":"End date for the reviews to reply to (YYYY-MM-DD)."},"answer_text":{"type":"string","description":"Text of the reply to the review."}},"required":["ext_id","review_id","fromDate","answer_text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"add.user","description":"Add a user to the AppFollow workspace.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Name of the user to be added."},"email":{"type":"string","description":"Email of the user to be added."},"role":{"type":"string","description":"Role of the user to be added."}},"required":["name","email","role"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"reviews.list","description":"List reviews for an application within a date range (powers the new.review trigger).","parameters":{"type":"object","properties":{"ext_id":{"type":"string","description":"Application external id in AppFollow."},"from":{"type":"string","description":"Start date (YYYY-MM-DD)."},"to":{"type":"string","description":"End date (YYYY-MM-DD)."},"page":{"type":"integer"}},"required":["ext_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tags.list","description":"List review tags for an application (powers the new.tag trigger).","parameters":{"type":"object","properties":{"ext_id":{"type":"string","description":"Application external id in AppFollow."}},"required":["ext_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reply.update","description":"Edit a previously posted reply to an app store review.","parameters":{"type":"object","properties":{"ext_id":{"type":"string","description":"Application external id in AppFollow."},"review_id":{"type":"string","description":"Review id whose reply will be updated."},"answer_text":{"type":"string","description":"New reply text."}},"required":["ext_id","review_id","answer_text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"reply.delete","description":"Delete a posted reply to an app store review.","parameters":{"type":"object","properties":{"ext_id":{"type":"string","description":"Application external id in AppFollow."},"review_id":{"type":"string","description":"Review id whose reply will be deleted."}},"required":["ext_id","review_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.assign","description":"Attach a tag to a review.","parameters":{"type":"object","properties":{"ext_id":{"type":"string","description":"Application external id in AppFollow."},"review_id":{"type":"string","description":"Review id to tag."},"tag":{"type":"string","description":"Tag value to attach."}},"required":["ext_id","review_id","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"asana","displayName":"Asana","description":"Search projects/tasks and create or update Asana tasks.","auth":{"kind":"one_of","preferred":"oauth2","options":[{"kind":"oauth2","authorizationUrl":"https://app.asana.com/-/oauth_authorize","tokenUrl":"https://app.asana.com/-/oauth_token","scopes":["default"],"clientIdEnv":"ASANA_OAUTH_CLIENT_ID","clientSecretEnv":"ASANA_OAUTH_CLIENT_SECRET"},{"kind":"api-key","hint":"Asana personal access token."}]},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"projects.search","description":"List or search projects in a workspace.","parameters":{"type":"object","properties":{"workspace":{"type":"string"},"archived":{"type":"boolean"},"limit":{"type":"integer"}},"required":["workspace"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.search","description":"Search tasks in a workspace.","parameters":{"type":"object","properties":{"workspace":{"type":"string"},"text":{"type":"string"},"limit":{"type":"integer"}},"required":["workspace"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.create","description":"Create an Asana task.","parameters":{"type":"object","properties":{"data":{"type":"object"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update an Asana task.","parameters":{"type":"object","properties":{"taskGid":{"type":"string"},"data":{"type":"object"}},"required":["taskGid","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.addComment","description":"Add a comment story to an Asana task. Comments are exposed as Asana stories with type=comment.","parameters":{"type":"object","properties":{"taskGid":{"type":"string","description":"Asana task gid."},"text":{"type":"string","description":"Comment body as plain text."}},"required":["taskGid","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.complete","description":"Mark an Asana task as completed. Idempotent: setting completed=true twice converges on the same state.","parameters":{"type":"object","properties":{"taskGid":{"type":"string","description":"Asana task gid."}},"required":["taskGid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"ashby","displayName":"Ashby","description":"Read and mutate Ashby ATS candidates, jobs, applications, offers, feedback, and interview schedules.","auth":{"kind":"api-key","hint":"Ashby API key. Sent as the username in HTTP Basic auth with an empty password (base64-encode \":\" for the Authorization header)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"candidates.list","description":"List candidates with optional cursor pagination and updatedAt filtering.","parameters":{"type":"object","properties":{"cursor":{"type":"string"},"syncToken":{"type":"string"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"candidates.info","description":"Fetch a single candidate by id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"candidates.search","description":"Search candidates by email or name.","parameters":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"candidates.create","description":"Create an Ashby candidate.","parameters":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"phoneNumber":{"type":"string"},"linkedInUrl":{"type":"string"},"githubUrl":{"type":"string"},"website":{"type":"string"},"location":{"type":"object"},"createdAt":{"type":"string"},"sourceId":{"type":"string"},"credentedSourceTypeId":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"candidates.update","description":"Update an existing candidate.","parameters":{"type":"object","properties":{"candidateId":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"phoneNumber":{"type":"string"},"linkedInUrl":{"type":"string"},"githubUrl":{"type":"string"},"website":{"type":"string"},"location":{"type":"object"}},"required":["candidateId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"candidates.addTag","description":"Attach a tag to a candidate.","parameters":{"type":"object","properties":{"candidateId":{"type":"string"},"tagId":{"type":"string"}},"required":["candidateId","tagId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"jobs.list","description":"List open and closed jobs.","parameters":{"type":"object","properties":{"cursor":{"type":"string"},"syncToken":{"type":"string"},"limit":{"type":"integer"},"status":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobs.info","description":"Fetch a single job by id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"applications.list","description":"List applications.","parameters":{"type":"object","properties":{"cursor":{"type":"string"},"syncToken":{"type":"string"},"limit":{"type":"integer"},"status":{"type":"string"},"jobId":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"applications.info","description":"Fetch a single application.","parameters":{"type":"object","properties":{"applicationId":{"type":"string"}},"required":["applicationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"applications.create","description":"Create a new application linking a candidate to a job.","parameters":{"type":"object","properties":{"candidateId":{"type":"string"},"jobId":{"type":"string"},"interviewPlanId":{"type":"string"},"interviewStageId":{"type":"string"},"sourceId":{"type":"string"},"credentedSourceTypeId":{"type":"string"},"createdAt":{"type":"string"}},"required":["candidateId","jobId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"applications.changeStage","description":"Advance or move an application to a new interview stage.","parameters":{"type":"object","properties":{"applicationId":{"type":"string"},"interviewStageId":{"type":"string"},"archiveReasonId":{"type":"string"}},"required":["applicationId","interviewStageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"offers.list","description":"List offers, optionally filtered by application.","parameters":{"type":"object","properties":{"applicationId":{"type":"string"},"cursor":{"type":"string"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"offers.info","description":"Fetch a single offer with version history.","parameters":{"type":"object","properties":{"offerId":{"type":"string"}},"required":["offerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"feedback.list","description":"List submitted interview feedback for an application.","parameters":{"type":"object","properties":{"applicationId":{"type":"string"},"cursor":{"type":"string"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"interviews.scheduleList","description":"List scheduled interviews.","parameters":{"type":"object","properties":{"applicationId":{"type":"string"},"cursor":{"type":"string"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"ask-handle","displayName":"AskHandle","description":"Manage leads, rooms, and messages with AskHandle.","auth":{"kind":"api-key","hint":"AskHandle API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"messages.create","description":"Create a message in AskHandle.","parameters":{"type":"object","properties":{"body":{"type":"string"},"room_id":{"type":"string"}},"required":["body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.create","description":"Create a lead in AskHandle.","parameters":{"type":"object","properties":{"nickname":{"type":"string"},"email":{"type":"string"},"phone_number":{"type":"string"},"device":{"type":"string"},"from_page_title":{"type":"string"},"referrer":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rooms.list","description":"List rooms in AskHandle.","parameters":{"type":"object","properties":{"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.list","description":"List leads in AskHandle.","parameters":{"type":"object","properties":{"start_date":{"type":"string"},"end_date":{"type":"string"},"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.update","description":"Update a draft AskHandle message.","parameters":{"type":"object","properties":{"message_id":{"type":"string","description":"Identifier of the message to update."},"body":{"type":"string","description":"New message body."}},"required":["message_id","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.delete","description":"Delete an AskHandle message.","parameters":{"type":"object","properties":{"message_id":{"type":"string","description":"Identifier of the message to delete."}},"required":["message_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update","description":"Patch attributes on an existing AskHandle lead.","parameters":{"type":"object","properties":{"lead_id":{"type":"string","description":"Identifier of the lead to patch."},"nickname":{"type":"string"},"email":{"type":"string"},"phone_number":{"type":"string"},"device":{"type":"string"},"from_page_title":{"type":"string"},"referrer":{"type":"string"}},"required":["lead_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.delete","description":"Delete an AskHandle lead.","parameters":{"type":"object","properties":{"lead_id":{"type":"string","description":"Identifier of the lead to delete."}},"required":["lead_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"asknews","displayName":"AskNews","description":"Search and retrieve enriched real-time and historical news articles, run news-aware chat completions, and manage AskNews newsletters and alerts.","auth":{"kind":"api-key","hint":"AskNews API key (client_id + client_secret minted in the AskNews console)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"search.news","description":"Search recent or historical news articles by natural-language query.","parameters":{"type":"object","properties":{"query":{"type":"string"},"nArticles":{"type":"integer"},"hoursBack":{"type":"integer"},"historical":{"type":"boolean"},"method":{"type":"string","enum":["nl","kw","both"]},"categories":{"type":"array","items":{"type":"string"}},"returnType":{"type":"string","enum":["string","dicts","both"]},"similarityScoreThreshold":{"type":"number"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"generate.news.knowledge.graph","description":"Build a knowledge graph from a news query, optionally rendering a visualization.","parameters":{"type":"object","properties":{"query":{"type":"string"},"nArticles":{"type":"integer"},"visualizeWith":{"type":"string"},"minClusterProbability":{"type":"number"},"geoDiambiguation":{"type":"boolean"},"queryMethod":{"type":"string","enum":["nl","kw","both"]},"hoursBack":{"type":"integer"},"historical":{"type":"boolean"},"categories":{"type":"array","items":{"type":"string"}}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.article.by.id","description":"Fetch one or more articles by their AskNews UUID.","parameters":{"type":"object","properties":{"articleIds":{"type":"array","items":{"type":"string"}},"returnType":{"type":"string","enum":["string","dicts","both"]}},"required":["articleIds"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"asknews.chat.completion","description":"Run a news-aware chat completion grounded in AskNews retrieval.","parameters":{"type":"object","properties":{"userMessage":{"type":"string"},"model":{"type":"string"},"temperature":{"type":"number"},"maxTokens":{"type":"integer"},"journalistMode":{"type":"boolean"},"inlineCitations":{"type":"string","enum":["none","numbered","markdown","hyperlinks"]},"appendReferences":{"type":"boolean"},"asknewsWatermark":{"type":"boolean"},"conversationalAwareness":{"type":"boolean"},"systemPrompt":{"type":"string"}},"required":["userMessage"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"search.stories","description":"Search AskNews stories (clusters of related articles) by query.","parameters":{"type":"object","properties":{"query":{"type":"string"},"categories":{"type":"array","items":{"type":"string"}},"expand_updates":{"type":"boolean"},"sort_by":{"type":"string","enum":["relevance","recency","coverage"]},"returnArticles":{"type":"boolean"},"hoursBack":{"type":"integer"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"create.anewsletter","description":"Create a new scheduled AskNews newsletter from a natural-language query.","parameters":{"type":"object","properties":{"name":{"type":"string"},"query":{"type":"string"},"cron":{"type":"string"},"sender":{"type":"string"},"subject":{"type":"string"},"logoUrl":{"type":"string"},"replyTo":{"type":"string"},"audienceId":{"type":"string"},"resendApiKey":{"type":"string"},"isPublic":{"type":"boolean"},"isActive":{"type":"boolean"},"expiresAt":{"type":"string"}},"required":["name","query","cron","sender"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.anewsletter","description":"Update an existing AskNews newsletter by ID.","parameters":{"type":"object","properties":{"newsletterId":{"type":"string"},"name":{"type":"string"},"query":{"type":"string"},"cron":{"type":"string"},"subject":{"type":"string"},"logoUrl":{"type":"string"},"replyTo":{"type":"string"},"isPublic":{"type":"boolean"},"isActive":{"type":"boolean"},"expiresAt":{"type":"string"}},"required":["newsletterId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"alert.for.query","description":"Register a scheduled alert that fires when a query matches new coverage.","parameters":{"type":"object","properties":{"query":{"type":"string"},"cron":{"type":"string"},"title":{"type":"string"},"alwaysTrigger":{"type":"boolean"},"repeat":{"type":"boolean"},"categories":{"type":"array","items":{"type":"string"}}},"required":["query","cron"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"assemblyai","displayName":"AssemblyAI","description":"Transcribe audio, run speech intelligence (speaker labels, sentiment, content safety, entity detection), export subtitles, and run LeMUR LLM tasks over finished transcripts.","auth":{"kind":"api-key","hint":"AssemblyAI workspace API key. Create one at https://www.assemblyai.com/app/account."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"transcripts.submit","description":"Queue a new transcription job. Pass `audio_url` (publicly reachable HTTPS) plus any AssemblyAI feature flags (speaker_labels, sentiment_analysis, content_safety, entity_detection, iab_categories, auto_chapters, summarization, language_code, etc.). Returns a transcript id the caller polls via transcripts.get.","parameters":{"type":"object","properties":{"audio_url":{"type":"string","description":"Publicly reachable HTTPS URL to the audio or video file."},"language_code":{"type":"string"},"language_detection":{"type":"boolean"},"punctuate":{"type":"boolean"},"format_text":{"type":"boolean"},"dual_channel":{"type":"boolean"},"speech_model":{"type":"string","description":"best | nano"},"speaker_labels":{"type":"boolean"},"speakers_expected":{"type":"integer","minimum":1},"sentiment_analysis":{"type":"boolean"},"content_safety":{"type":"boolean"},"iab_categories":{"type":"boolean"},"entity_detection":{"type":"boolean"},"auto_chapters":{"type":"boolean"},"summarization":{"type":"boolean"},"summary_model":{"type":"string"},"summary_type":{"type":"string"},"auto_highlights":{"type":"boolean"},"redact_pii":{"type":"boolean"},"redact_pii_audio":{"type":"boolean"},"redact_pii_policies":{"type":"array","items":{"type":"string"}},"redact_pii_sub":{"type":"string"},"filter_profanity":{"type":"boolean"},"disfluencies":{"type":"boolean"},"boost_param":{"type":"string"},"word_boost":{"type":"array","items":{"type":"string"}},"custom_spelling":{"type":"array","items":{"type":"object"}},"webhook_url":{"type":"string"},"webhook_auth_header_name":{"type":"string"},"webhook_auth_header_value":{"type":"string"}},"required":["audio_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"transcripts.get","description":"Fetch a transcript by id. The `status` field cycles queued → processing → completed | error; callers poll until it leaves processing.","parameters":{"type":"object","properties":{"transcript_id":{"type":"string"}},"required":["transcript_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transcripts.list","description":"List transcripts in the workspace, newest first. Pagination uses the `before_id` / `after_id` cursors AssemblyAI returns in `page_details`.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200},"status":{"type":"string","description":"Filter to queued | processing | completed | error."},"created_on":{"type":"string","description":"YYYY-MM-DD"},"before_id":{"type":"string"},"after_id":{"type":"string"},"throttled_only":{"type":"boolean"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transcripts.delete","description":"Delete a transcript and its derived artifacts. Useful for honouring data-retention requests; the underlying audio remains untouched.","parameters":{"type":"object","properties":{"transcript_id":{"type":"string"}},"required":["transcript_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transcripts.paragraphs","description":"Return paragraph-segmented view of a finished transcript with per-paragraph timestamps.","parameters":{"type":"object","properties":{"transcript_id":{"type":"string"}},"required":["transcript_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transcripts.sentences","description":"Return sentence-segmented view of a finished transcript with per-sentence timestamps.","parameters":{"type":"object","properties":{"transcript_id":{"type":"string"}},"required":["transcript_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transcripts.subtitles","description":"Export subtitles for a finished transcript. Format must be `srt` or `vtt`. `chars_per_caption` caps caption width.","parameters":{"type":"object","properties":{"transcript_id":{"type":"string"},"format":{"type":"string","description":"srt | vtt"},"chars_per_caption":{"type":"integer","minimum":1}},"required":["transcript_id","format"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transcripts.word_search","description":"Search a finished transcript for one or more words and return their match counts and timestamps.","parameters":{"type":"object","properties":{"transcript_id":{"type":"string"},"words":{"type":"array","description":"Keywords to search for in the transcript.","items":{"type":"string"}}},"required":["transcript_id","words"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transcripts.redacted_audio","description":"Fetch the URL of the PII-redacted audio file for a transcript submitted with `redact_pii_audio: true`. Returns `status` and `redacted_audio_url`.","parameters":{"type":"object","properties":{"transcript_id":{"type":"string"}},"required":["transcript_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lemur.summary","description":"Run LeMUR summary over one or more finished transcripts. Returns a summary string and the LeMUR request_id.","parameters":{"type":"object","properties":{"transcript_ids":{"type":"array","items":{"type":"string"}},"context":{"description":"Optional string or object describing the audio context."},"final_model":{"type":"string","description":"default | basic | anthropic/claude-3-5-sonnet | anthropic/claude-3-haiku | anthropic/claude-3-opus"},"max_output_size":{"type":"integer","minimum":1},"temperature":{"type":"number","minimum":0,"maximum":1},"answer_format":{"type":"string"}},"required":["transcript_ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"lemur.question_answer","description":"Ask LeMUR one or more structured questions about a set of finished transcripts. Each question carries its own `question`, optional `context`, and answer schema hints.","parameters":{"type":"object","properties":{"transcript_ids":{"type":"array","items":{"type":"string"}},"questions":{"type":"array","description":"List of { question, context?, answer_format?, answer_options? } objects.","items":{"type":"object"}},"context":{},"final_model":{"type":"string"},"max_output_size":{"type":"integer","minimum":1},"temperature":{"type":"number","minimum":0,"maximum":1}},"required":["transcript_ids","questions"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"lemur.action_items","description":"Extract action items from one or more finished transcripts via LeMUR.","parameters":{"type":"object","properties":{"transcript_ids":{"type":"array","items":{"type":"string"}},"context":{},"final_model":{"type":"string"},"max_output_size":{"type":"integer","minimum":1},"temperature":{"type":"number","minimum":0,"maximum":1},"answer_format":{"type":"string"}},"required":["transcript_ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"lemur.task","description":"Run a free-form LeMUR prompt over one or more finished transcripts. The `prompt` parameter is the natural-language instruction.","parameters":{"type":"object","properties":{"transcript_ids":{"type":"array","items":{"type":"string"}},"prompt":{"type":"string"},"context":{},"final_model":{"type":"string"},"max_output_size":{"type":"integer","minimum":1},"temperature":{"type":"number","minimum":0,"maximum":1}},"required":["transcript_ids","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"lemur.response","description":"Retrieve a previously-generated LeMUR response by its request_id.","parameters":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lemur.purge","description":"Purge a stored LeMUR request and its response, deleting the prompt + completion from AssemblyAI retention.","parameters":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"attio","displayName":"Attio","description":"Query and mutate Attio records, lists, notes, and tasks in workspace objects.","auth":{"kind":"oauth2","authorizationUrl":"https://app.attio.com/authorize","tokenUrl":"https://app.attio.com/oauth/token","scopes":["record_permission:read-write","object_configuration:read","list_configuration:read","list_entry:read-write","note:read-write","task:read-write","comment:read-write","user_management:read"],"clientIdEnv":"ATTIO_OAUTH_CLIENT_ID","clientSecretEnv":"ATTIO_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.query","description":"Query records on an Attio object (e.g. people, companies, deals) with a filter body.","parameters":{"type":"object","properties":{"object":{"type":"string","description":"Object slug or id (e.g. \"people\", \"companies\", or a custom object id)."},"filter":{"type":"object","description":"Attio filter expression applied server-side."},"sorts":{"type":"array","items":{"type":"object"}},"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0}},"required":["object"]},"requiredScopes":["record_permission:read-write","object_configuration:read"],"class":"read"},{"name":"records.get","description":"Read a single Attio record by id.","parameters":{"type":"object","properties":{"object":{"type":"string"},"recordId":{"type":"string"}},"required":["object","recordId"]},"requiredScopes":["record_permission:read-write"],"class":"read"},{"name":"records.create","description":"Create a record on an Attio object. `values` is a map of attribute slug to value list.","parameters":{"type":"object","properties":{"object":{"type":"string"},"values":{"type":"object","description":"Attribute slug → value list, per Attio attribute schema."}},"required":["object","values"]},"requiredScopes":["record_permission:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.assert","description":"Upsert a record by matching attribute (PUT) — creates if absent, updates in place otherwise.","parameters":{"type":"object","properties":{"object":{"type":"string"},"matching_attribute":{"type":"string","description":"Attribute slug used as the dedupe key (e.g. \"email_addresses\")."},"values":{"type":"object"}},"required":["object","matching_attribute","values"]},"requiredScopes":["record_permission:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Partially update an Attio record. Provided attribute slugs overwrite existing values.","parameters":{"type":"object","properties":{"object":{"type":"string"},"recordId":{"type":"string"},"values":{"type":"object"}},"required":["object","recordId","values"]},"requiredScopes":["record_permission:read-write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.delete","description":"Permanently delete an Attio record.","parameters":{"type":"object","properties":{"object":{"type":"string"},"recordId":{"type":"string"}},"required":["object","recordId"]},"requiredScopes":["record_permission:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.entries.query","description":"Query entries on an Attio list (e.g. pipeline stages, target lists).","parameters":{"type":"object","properties":{"list":{"type":"string","description":"List slug or id."},"filter":{"type":"object"},"sorts":{"type":"array","items":{"type":"object"}},"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0}},"required":["list"]},"requiredScopes":["list_entry:read-write","list_configuration:read"],"class":"read"},{"name":"lists.entries.create","description":"Add a record to an Attio list with optional per-entry attribute values.","parameters":{"type":"object","properties":{"list":{"type":"string"},"parent_record_id":{"type":"string","description":"Record id to add to the list."},"parent_object":{"type":"string","description":"Object slug the record belongs to."},"entry_values":{"type":"object","description":"Per-entry attribute slug → value list (stage, owner, etc.)."}},"required":["list","parent_record_id","parent_object"]},"requiredScopes":["list_entry:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.create","description":"Create a note attached to an Attio record.","parameters":{"type":"object","properties":{"parent_object":{"type":"string","description":"Object slug the note attaches to."},"parent_record_id":{"type":"string"},"title":{"type":"string"},"format":{"type":"string","enum":["plaintext","markdown"]},"content":{"type":"string"}},"required":["parent_object","parent_record_id","content"]},"requiredScopes":["note:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.create","description":"Create a task, optionally linked to records and assignees.","parameters":{"type":"object","properties":{"content":{"type":"string"},"format":{"type":"string","enum":["plaintext"]},"deadline_at":{"type":"string","description":"ISO-8601 deadline."},"is_completed":{"type":"boolean"},"linked_records":{"type":"array","items":{"type":"object"}},"assignees":{"type":"array","items":{"type":"object"}}},"required":["content"]},"requiredScopes":["task:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"auth0","displayName":"Auth0","description":"Manage Auth0 tenants: users, roles, organizations, connections, clients, and grants via the Management API v2.","auth":{"kind":"oauth2","authorizationUrl":"https://auth0.auth0.com/authorize","tokenUrl":"https://auth0.auth0.com/oauth/token","scopes":["read:users","update:users","create:users","delete:users","read:roles","update:roles","create:roles","delete:roles","read:role_members","create:role_members","delete:role_members","read:organizations","create:organizations","update:organizations","delete:organizations","read:organization_members","create:organization_members","delete:organization_members","read:clients","update:clients","create:clients","delete:clients","read:connections","update:connections","create:connections","delete:connections","read:grants","delete:grants","read:logs"],"clientIdEnv":"AUTH0_OAUTH_CLIENT_ID","clientSecretEnv":"AUTH0_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.list","description":"List Auth0 users with optional Lucene query, pagination, and sort.","parameters":{"type":"object","properties":{"q":{"type":"string","description":"Lucene search query (e.g. email:\"a@b.com\")."},"page":{"type":"number"},"per_page":{"type":"number"},"sort":{"type":"string"},"search_engine":{"type":"string","enum":["v3"]}}},"requiredScopes":["read:users"],"class":"read"},{"name":"users.get","description":"Read a single Auth0 user by id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["read:users"],"class":"read"},{"name":"users.create","description":"Create a new user in a specified connection. Email or phone_number is required by Auth0 depending on connection type.","parameters":{"type":"object","properties":{"connection":{"type":"string"},"email":{"type":"string"},"phone_number":{"type":"string"},"password":{"type":"string"},"email_verified":{"type":"boolean"},"phone_verified":{"type":"boolean"},"user_metadata":{"type":"object"},"app_metadata":{"type":"object"},"given_name":{"type":"string"},"family_name":{"type":"string"},"name":{"type":"string"},"nickname":{"type":"string"},"username":{"type":"string"},"blocked":{"type":"boolean"}},"required":["connection"]},"requiredScopes":["create:users"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.update","description":"Patch fields on an existing user (metadata, blocked, email, etc.).","parameters":{"type":"object","properties":{"id":{"type":"string"},"patch":{"type":"object"}},"required":["id","patch"]},"requiredScopes":["update:users"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"users.delete","description":"Delete an Auth0 user.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["delete:users"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.roles.list","description":"List roles assigned to a user.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["read:users","read:roles"],"class":"read"},{"name":"users.roles.assign","description":"Assign one or more roles to a user.","parameters":{"type":"object","properties":{"id":{"type":"string"},"roles":{"type":"array","items":{"type":"string"}}},"required":["id","roles"]},"requiredScopes":["update:users","create:role_members"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.roles.remove","description":"Remove one or more roles from a user.","parameters":{"type":"object","properties":{"id":{"type":"string"},"roles":{"type":"array","items":{"type":"string"}}},"required":["id","roles"]},"requiredScopes":["update:users","delete:role_members"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"roles.list","description":"List roles in the tenant.","parameters":{"type":"object","properties":{"name_filter":{"type":"string"},"page":{"type":"number"},"per_page":{"type":"number"}}},"requiredScopes":["read:roles"],"class":"read"},{"name":"roles.get","description":"Read a single role by id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["read:roles"],"class":"read"},{"name":"roles.create","description":"Create a new role.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}},"required":["name"]},"requiredScopes":["create:roles"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"roles.update","description":"Patch a role.","parameters":{"type":"object","properties":{"id":{"type":"string"},"patch":{"type":"object"}},"required":["id","patch"]},"requiredScopes":["update:roles"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"roles.delete","description":"Delete a role.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["delete:roles"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"organizations.list","description":"List organizations in the tenant.","parameters":{"type":"object","properties":{"page":{"type":"number"},"per_page":{"type":"number"}}},"requiredScopes":["read:organizations"],"class":"read"},{"name":"organizations.get","description":"Read a single organization by id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["read:organizations"],"class":"read"},{"name":"organizations.create","description":"Create a new organization.","parameters":{"type":"object","properties":{"name":{"type":"string"},"display_name":{"type":"string"},"branding":{"type":"object"},"metadata":{"type":"object"},"enabled_connections":{"type":"array"}},"required":["name"]},"requiredScopes":["create:organizations"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"organizations.update","description":"Patch an organization.","parameters":{"type":"object","properties":{"id":{"type":"string"},"patch":{"type":"object"}},"required":["id","patch"]},"requiredScopes":["update:organizations"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"organizations.delete","description":"Delete an organization.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["delete:organizations"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"organizations.members.list","description":"List members of an organization.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["read:organization_members"],"class":"read"},{"name":"organizations.members.add","description":"Add members (by user_id) to an organization.","parameters":{"type":"object","properties":{"id":{"type":"string"},"members":{"type":"array","items":{"type":"string"}}},"required":["id","members"]},"requiredScopes":["create:organization_members"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"organizations.members.remove","description":"Remove members from an organization.","parameters":{"type":"object","properties":{"id":{"type":"string"},"members":{"type":"array","items":{"type":"string"}}},"required":["id","members"]},"requiredScopes":["delete:organization_members"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"connections.list","description":"List connections (database, social, enterprise) configured on the tenant.","parameters":{"type":"object","properties":{"strategy":{"type":"string"},"page":{"type":"number"},"per_page":{"type":"number"}}},"requiredScopes":["read:connections"],"class":"read"},{"name":"connections.get","description":"Read a single connection by id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["read:connections"],"class":"read"},{"name":"clients.list","description":"List applications (M2M, SPA, regular web, native) registered on the tenant.","parameters":{"type":"object","properties":{"app_type":{"type":"string"},"is_global":{"type":"boolean"},"page":{"type":"number"},"per_page":{"type":"number"}}},"requiredScopes":["read:clients"],"class":"read"},{"name":"clients.get","description":"Read a single client/application by id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["read:clients"],"class":"read"},{"name":"grants.list","description":"List user grants (consented scopes) for the tenant.","parameters":{"type":"object","properties":{"user_id":{"type":"string"},"client_id":{"type":"string"},"audience":{"type":"string"},"page":{"type":"number"},"per_page":{"type":"number"}}},"requiredScopes":["read:grants"],"class":"read"},{"name":"grants.revoke","description":"Revoke a grant (delete by id).","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["delete:grants"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"logs.search","description":"Search tenant logs with a Lucene query (failed logins, signups, admin actions, etc.).","parameters":{"type":"object","properties":{"q":{"type":"string"},"from":{"type":"string"},"take":{"type":"number"},"sort":{"type":"string"}}},"requiredScopes":["read:logs"],"class":"read"}]},{"kind":"autobound","displayName":"Autobound","description":"AI sales-intelligence API that enriches companies and contacts with buyer-intent signals for personalized outreach.","auth":{"kind":"api-key","hint":"API key from your Autobound account (Developer Hub). Sent as the X-API-KEY header. Base host is the Signals API at signals.autobound.ai."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.get","description":"Return account details and rate limits. Consumes no credits.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.enrich","description":"Enrich a company with intent and news signals by domain (billed per returned signal).","parameters":{"type":"object","properties":{"domain":{"type":"string"},"signal_types":{"type":"array","items":{"type":"string"}},"limit":{"type":"integer"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"company.search","description":"Search companies aggregated by entity, filtered by signal type and firmographics.","parameters":{"type":"object","properties":{"signal_types":{"type":"array","items":{"type":"string"}},"company_domains":{"type":"array","items":{"type":"string"}},"limit":{"type":"integer"}},"required":["signal_types"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contact.enrich","description":"Enrich a contact with personal signals by email or LinkedIn URL (billed per returned signal).","parameters":{"type":"object","properties":{"contact_email":{"type":"string"},"contact_linkedin_url":{"type":"string"},"signal_types":{"type":"array","items":{"type":"string"}},"limit":{"type":"integer"}},"required":["contact_email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"contact.search","description":"Search contacts aggregated by entity, filtered by signal type.","parameters":{"type":"object","properties":{"signal_types":{"type":"array","items":{"type":"string"}},"limit":{"type":"integer"}},"required":["signal_types"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"autocalls","displayName":"Autocalls","description":"Place outbound calls, send SMS, and manage Autocalls campaign leads.","auth":{"kind":"api-key","hint":"Autocalls API key — create one in app.autocalls.ai and send it as a bearer token."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"make.phone.call","description":"Call a customer phone number using a selected Autocalls assistant.","parameters":{"type":"object","properties":{"assistant":{"type":"string","description":"Assistant id from /api/user/assistants/outbound."},"phone_number":{"type":"string","description":"Customer phone number to dial."},"variables":{"type":"object","description":"Variables passed to the assistant prompt."}},"required":["assistant","phone_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"add.lead","description":"Add a lead (primary + optional secondary contacts) to an Autocalls campaign.","parameters":{"type":"object","properties":{"campaign":{"type":"string","description":"Campaign id from /api/user/campaigns."},"phone_number":{"type":"string"},"variables":{"type":"object"},"allow_dupplicate":{"type":"boolean","description":"Allow re-adding the same phone number."},"num_secondary_contacts":{"type":"integer"},"secondary_contacts":{"type":"array","items":{"type":"object","properties":{"phone_number":{"type":"string"},"variables":{"type":"object"}}}}},"required":["campaign","phone_number","variables","allow_dupplicate"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"send.sms","description":"Send an SMS from an Autocalls-owned phone number to a customer.","parameters":{"type":"object","properties":{"from":{"type":"string","description":"SMS-capable phone number id from /api/user/phone-numbers."},"to":{"type":"string","description":"Customer phone number."},"body":{"type":"string","description":"Message body (max 300 characters)."}},"required":["from","to","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"campaign.control","description":"Change the status of an Autocalls campaign (start, pause, resume, stop).","parameters":{"type":"object","properties":{"campaign":{"type":"string","description":"Campaign id from /api/user/campaigns."},"action":{"type":"string","description":"Status transition to apply to the campaign.","enum":["start","pause","resume","stop"]}},"required":["campaign","action"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"delete.lead","description":"Delete a lead from Autocalls by id.","parameters":{"type":"object","properties":{"lead":{"type":"string","description":"Lead id from /api/user/leads."}},"required":["lead"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"avalara","displayName":"Avalara AvaTax","description":"Calculate tax and manage AvaTax transaction documents, adjustments, commits, voids, and refunds.","auth":{"kind":"api-key","hint":"JSON credential bundle: {\"accountId\":\"...\",\"licenseKey\":\"...\"}. Use apiBaseUrl metadata for the sandbox host when needed."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"rates.by-address","description":"Estimate the total tax rate for one postal address.","parameters":{"type":"object","properties":{"line1":{"type":"string"},"city":{"type":"string"},"region":{"type":"string"},"postalCode":{"type":"string"},"country":{"type":"string"}},"required":["postalCode","country"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"definitions.tax-codes.list","description":"List Avalara system tax codes for product classification.","parameters":{"type":"object","properties":{"top":{"type":"integer","minimum":1,"maximum":1000},"skip":{"type":"integer","minimum":0},"filter":{"type":"string"},"orderBy":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transactions.create","description":"Create an AvaTax transaction document and calculate its tax.","parameters":{"type":"object","properties":{"model":{"type":"object","description":"Provider-native AvaTax v2 request model."}},"required":["model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.create-or-adjust","description":"Create a transaction or adjust the existing transaction with the same company/code/type.","parameters":{"type":"object","properties":{"model":{"type":"object","description":"Provider-native AvaTax v2 request model."}},"required":["model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.get","description":"Read one AvaTax transaction and its summary.","parameters":{"type":"object","properties":{"companyCode":{"type":"string","description":"Avalara company code."},"transactionCode":{"type":"string","description":"Merchant transaction code."},"documentType":{"type":"string"},"include":{"type":"string","description":"Related response objects to include."}},"required":["companyCode","transactionCode"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transactions.audit","description":"Read the audit trail for one AvaTax transaction.","parameters":{"type":"object","properties":{"companyCode":{"type":"string","description":"Avalara company code."},"transactionCode":{"type":"string","description":"Merchant transaction code."}},"required":["companyCode","transactionCode"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transactions.commit","description":"Commit a transaction for reporting and filing.","parameters":{"type":"object","properties":{"companyCode":{"type":"string","description":"Avalara company code."},"transactionCode":{"type":"string","description":"Merchant transaction code."},"documentType":{"type":"string"},"include":{"type":"string","description":"Related response objects to include."},"model":{"type":"object","description":"Provider-native AvaTax v2 request model."}},"required":["companyCode","transactionCode","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.void","description":"Void a transaction with an explicit AvaTax void reason.","parameters":{"type":"object","properties":{"companyCode":{"type":"string","description":"Avalara company code."},"transactionCode":{"type":"string","description":"Merchant transaction code."},"documentType":{"type":"string"},"include":{"type":"string","description":"Related response objects to include."},"model":{"type":"object","description":"Provider-native AvaTax v2 request model."}},"required":["companyCode","transactionCode","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.refund","description":"Create a full or partial refund transaction.","parameters":{"type":"object","properties":{"companyCode":{"type":"string","description":"Avalara company code."},"transactionCode":{"type":"string","description":"Merchant transaction code."},"documentType":{"type":"string"},"include":{"type":"string","description":"Related response objects to include."},"model":{"type":"object","description":"Provider-native AvaTax v2 request model."}},"required":["companyCode","transactionCode","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.lock","description":"Lock a transaction against further edits.","parameters":{"type":"object","properties":{"companyCode":{"type":"string","description":"Avalara company code."},"transactionCode":{"type":"string","description":"Merchant transaction code."},"documentType":{"type":"string"},"include":{"type":"string","description":"Related response objects to include."},"model":{"type":"object","description":"Provider-native AvaTax v2 request model."}},"required":["companyCode","transactionCode","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"companies.list","description":"List AvaTax companies accessible to the account.","parameters":{"type":"object","properties":{"top":{"type":"integer","minimum":1,"maximum":1000},"skip":{"type":"integer","minimum":0},"filter":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"avian","displayName":"Avian","description":"Run chat completions against Avian-hosted language models via the OpenAI-compatible /v1/chat/completions surface.","auth":{"kind":"api-key","hint":"Avian API key (see your Avian account dashboard). Sent as `Authorization: Bearer `."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"ask.avian","description":"Generate a completion from an Avian-hosted model. Mirrors the OpenAI chat-completions request shape.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Avian model id (e.g. an Avian-hosted Llama or Mixtral variant)."},"messages":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["system","user","assistant","tool"]},"content":{"type":"string"},"name":{"type":"string"},"tool_call_id":{"type":"string"}},"required":["role","content"]},"description":"Chat history as an array of role/content messages. If absent, `prompt` is wrapped into a single user message."},"prompt":{"type":"string","description":"Convenience single-turn prompt; combined with `roles` into a `messages` array at request time."},"roles":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["system","user","assistant","tool"]},"content":{"type":"string"},"name":{"type":"string"},"tool_call_id":{"type":"string"}},"required":["role","content"]},"description":"Optional system/assistant priming messages prepended to `prompt`."},"temperature":{"type":"number","description":"Sampling temperature (0–2). Lower is more deterministic. Recommend altering this OR top_p but not both."},"topP":{"type":"number","description":"Nucleus-sampling cutoff (0–1). Considers tokens covering top_p of the probability mass."},"maxTokens":{"type":"integer","description":"Hard upper bound on tokens generated for this completion."},"frequencyPenalty":{"type":"number","description":"Frequency-penalty (-2.0 to 2.0). Discourages literal token repetition."},"presencePenalty":{"type":"number","description":"Presence-penalty (-2.0 to 2.0). Encourages topic variety."},"responseFormat":{"type":"string","enum":["text","json_object"],"description":"Constrain the output format. When `json_object`, the prompt MUST also instruct the model to emit JSON."},"memoryKey":{"type":"string","description":"Shared-history key — when set, Avian threads the conversation across runs that reuse the same key."},"stream":{"type":"boolean","description":"Stream tokens as server-sent events instead of returning a single response."}},"required":["model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"models.list","description":"List Avian-hosted models available to the current API key.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"avoma","displayName":"Avoma","description":"Push completed dialer calls into Avoma and retrieve meeting transcripts and recording URLs.","auth":{"kind":"api-key","hint":"Avoma API key sent as a Bearer token."},"category":"calendar","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.create","description":"Register a completed external-dialer call so Avoma can ingest its recording and create meeting intelligence.","parameters":{"type":"object","properties":{"external_id":{"type":"string"},"user_email":{"type":"string"},"source":{"type":"string"},"direction":{"type":"string"},"start_at":{"type":"string"},"end_at":{"type":"string"},"frm":{"type":"string"},"to":{"type":"string"},"frm_name":{"type":"string"},"to_name":{"type":"string"},"recording_url":{"type":"string"},"participants":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"crm_id":{"type":"string"},"crm_type":{"type":"string"},"crm_system":{"type":"string"}},"required":["name","email"]}},"answered":{"type":"boolean"},"is_voicemail":{"type":"boolean"},"additional_details":{"type":"string"}},"required":["external_id","user_email","source","direction","start_at","frm","to","recording_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"meetings.transcription.get","description":"Fetch a speaker-attributed Avoma transcription by transcription UUID.","parameters":{"type":"object","properties":{"transcription_uuid":{"type":"string"}},"required":["transcription_uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"meetings.recording.get","description":"Fetch time-limited audio and video recording URLs for an Avoma meeting UUID.","parameters":{"type":"object","properties":{"meeting_uuid":{"type":"string"}},"required":["meeting_uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"aws-cloudwatch","displayName":"AWS CloudWatch","description":"Read and publish CloudWatch metrics, manage metric alarms, and manage dashboards.","auth":{"kind":"api-key","hint":"AWS credentials as JSON: {\"accessKeyId\":\"AKIA…\",\"secretAccessKey\":\"…\",\"region\":\"us-east-1\"}. Optional \"sessionToken\" and \"endpoint\" support temporary credentials and local AWS-compatible endpoints."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"metrics.list","description":"List available CloudWatch metrics and their dimensions.","parameters":{"type":"object","properties":{"namespace":{"type":"string"},"metricName":{"type":"string"},"dimensions":{"type":"array","description":"AWS DimensionFilter objects."},"nextToken":{"type":"string"},"recentlyActive":{"type":"string","enum":["PT3H"]},"includeLinkedAccounts":{"type":"boolean"},"owningAccount":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"metrics.statistics.get","description":"Get statistics for one metric over a time range.","parameters":{"type":"object","properties":{"namespace":{"type":"string"},"metricName":{"type":"string"},"dimensions":{"type":"array","description":"AWS Dimension objects."},"startTime":{"type":"number","description":"Unix epoch seconds."},"endTime":{"type":"number","description":"Unix epoch seconds."},"period":{"type":"integer","description":"Aggregation period in seconds."},"statistics":{"type":"array","items":{"type":"string"}},"extendedStatistics":{"type":"array","items":{"type":"string"}},"unit":{"type":"string"}},"required":["namespace","metricName","startTime","endTime","period"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"metrics.data.get","description":"Run up to 500 metric-data or metric-math queries in one request.","parameters":{"type":"object","properties":{"metricDataQueries":{"type":"array","description":"AWS MetricDataQuery objects."},"startTime":{"type":"number","description":"Unix epoch seconds."},"endTime":{"type":"number","description":"Unix epoch seconds."},"nextToken":{"type":"string"},"scanBy":{"type":"string","enum":["TimestampDescending","TimestampAscending"]},"maxDatapoints":{"type":"integer"},"labelOptions":{"type":"object"}},"required":["metricDataQueries","startTime","endTime"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"alarms.list","description":"List metric and composite alarms with optional filters.","parameters":{"type":"object","properties":{"alarmNames":{"type":"array","items":{"type":"string"}},"alarmNamePrefix":{"type":"string"},"alarmTypes":{"type":"array","items":{"type":"string"}},"childrenOfAlarmName":{"type":"string"},"parentsOfAlarmName":{"type":"string"},"stateValue":{"type":"string","enum":["OK","ALARM","INSUFFICIENT_DATA"]},"actionPrefix":{"type":"string"},"maxRecords":{"type":"integer"},"nextToken":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"dashboards.list","description":"List CloudWatch dashboards in the account.","parameters":{"type":"object","properties":{"dashboardNamePrefix":{"type":"string"},"nextToken":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"dashboards.get","description":"Get one CloudWatch dashboard definition.","parameters":{"type":"object","properties":{"dashboardName":{"type":"string"}},"required":["dashboardName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"metrics.publish","description":"Publish custom metric data or entity metric data to CloudWatch.","parameters":{"type":"object","properties":{"namespace":{"type":"string"},"metricData":{"type":"array","description":"AWS MetricDatum objects."},"entityMetricData":{"type":"array","description":"AWS EntityMetricData objects."},"strictEntityValidation":{"type":"boolean"}},"required":["namespace"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"alarms.put","description":"Create or fully replace a CloudWatch metric alarm.","parameters":{"type":"object","properties":{"alarm":{"type":"object","description":"AWS PutMetricAlarm input without undeclared transport fields."}},"required":["alarm"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"alarms.delete","description":"Delete up to 100 CloudWatch alarms by name.","parameters":{"type":"object","properties":{"alarmNames":{"type":"array","items":{"type":"string"}}},"required":["alarmNames"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"dashboards.put","description":"Create or fully replace a CloudWatch dashboard.","parameters":{"type":"object","properties":{"dashboardName":{"type":"string"},"dashboardBody":{"type":"string","description":"CloudWatch dashboard JSON string."}},"required":["dashboardName","dashboardBody"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"dashboards.delete","description":"Delete up to 100 CloudWatch dashboards by name.","parameters":{"type":"object","properties":{"dashboardNames":{"type":"array","items":{"type":"string"}}},"required":["dashboardNames"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"aws-lambda","displayName":"AWS Lambda","description":"Inspect, invoke, create, update, version, alias, and delete AWS Lambda functions.","auth":{"kind":"api-key","hint":"AWS credentials as JSON: {\"accessKeyId\":\"AKIA…\",\"secretAccessKey\":\"…\",\"region\":\"us-east-1\"}. Optional \"sessionToken\" and \"endpoint\" support temporary credentials and local AWS-compatible endpoints."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"functions.list","description":"List Lambda functions in the configured AWS region.","parameters":{"type":"object","properties":{"marker":{"type":"string","description":"Pagination marker."},"maxItems":{"type":"integer","description":"Maximum functions to return (1-50)."},"functionVersion":{"type":"string","enum":["ALL"],"description":"Include published versions when set to ALL."},"masterRegion":{"type":"string","description":"Filter Lambda@Edge replicas by region."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"functions.get","description":"Get one function configuration and its temporary deployment-package URL.","parameters":{"type":"object","properties":{"functionName":{"type":"string","description":"Function name or ARN."},"qualifier":{"type":"string","description":"Version number or alias."}},"required":["functionName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"aliases.list","description":"List aliases for a Lambda function.","parameters":{"type":"object","properties":{"functionName":{"type":"string"},"functionVersion":{"type":"string"},"marker":{"type":"string"},"maxItems":{"type":"integer"}},"required":["functionName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"functions.invoke","description":"Invoke a Lambda function synchronously, asynchronously, or as a dry-run permission check.","parameters":{"type":"object","properties":{"functionName":{"type":"string","description":"Function name or ARN."},"qualifier":{"type":"string","description":"Version number or alias."},"invocationType":{"type":"string","enum":["RequestResponse","Event","DryRun"]},"logType":{"type":"string","enum":["None","Tail"]},"clientContext":{"type":"string","description":"Base64-encoded client context for synchronous invocation."},"payload":{"description":"JSON payload passed directly to the function."}},"required":["functionName","payload"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"functions.create","description":"Create a Lambda function from an S3 object, inline zip, or ECR image.","parameters":{"type":"object","properties":{"functionName":{"type":"string"},"role":{"type":"string","description":"Execution-role ARN."},"code":{"type":"object","description":"AWS FunctionCode shape: S3Bucket/S3Key/S3ObjectVersion, ZipFile, or ImageUri."},"runtime":{"type":"string"},"handler":{"type":"string"},"description":{"type":"string"},"timeout":{"type":"integer"},"memorySize":{"type":"integer"},"publish":{"type":"boolean"},"packageType":{"type":"string","enum":["Zip","Image"]},"architectures":{"type":"array","items":{"type":"string"}},"environment":{"type":"object","description":"AWS Environment shape."},"vpcConfig":{"type":"object","description":"AWS VpcConfig shape."},"layers":{"type":"array","items":{"type":"string"}},"tags":{"type":"object"},"ephemeralStorage":{"type":"object"},"loggingConfig":{"type":"object"}},"required":["functionName","role","code"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"functions.code.update","description":"Replace the unpublished code for a Lambda function.","parameters":{"type":"object","properties":{"functionName":{"type":"string"},"s3Bucket":{"type":"string"},"s3Key":{"type":"string"},"s3ObjectVersion":{"type":"string"},"imageUri":{"type":"string"},"zipFile":{"type":"string","description":"Base64-encoded zip bytes."},"publish":{"type":"boolean"},"dryRun":{"type":"boolean"},"revisionId":{"type":"string"},"architectures":{"type":"array","items":{"type":"string"}}},"required":["functionName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"functions.configuration.update","description":"Update the unpublished configuration for a Lambda function.","parameters":{"type":"object","properties":{"functionName":{"type":"string"},"role":{"type":"string"},"handler":{"type":"string"},"description":{"type":"string"},"timeout":{"type":"integer"},"memorySize":{"type":"integer"},"runtime":{"type":"string"},"environment":{"type":"object"},"layers":{"type":"array","items":{"type":"string"}},"vpcConfig":{"type":"object"},"revisionId":{"type":"string"},"ephemeralStorage":{"type":"object"},"loggingConfig":{"type":"object"}},"required":["functionName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"versions.publish","description":"Publish an immutable version from the current function code and configuration.","parameters":{"type":"object","properties":{"functionName":{"type":"string"},"codeSha256":{"type":"string"},"description":{"type":"string"},"revisionId":{"type":"string"}},"required":["functionName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"aliases.create","description":"Create an alias that points to a published function version.","parameters":{"type":"object","properties":{"functionName":{"type":"string"},"name":{"type":"string"},"functionVersion":{"type":"string"},"description":{"type":"string"},"routingConfig":{"type":"object"}},"required":["functionName","name","functionVersion"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"aliases.update","description":"Move or reconfigure an existing function alias.","parameters":{"type":"object","properties":{"functionName":{"type":"string"},"name":{"type":"string"},"functionVersion":{"type":"string"},"description":{"type":"string"},"routingConfig":{"type":"object"},"revisionId":{"type":"string"}},"required":["functionName","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"aliases.delete","description":"Delete a function alias without deleting the function version.","parameters":{"type":"object","properties":{"functionName":{"type":"string"},"name":{"type":"string"}},"required":["functionName","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"functions.delete","description":"Permanently delete a Lambda function or one published version.","parameters":{"type":"object","properties":{"functionName":{"type":"string"},"qualifier":{"type":"string","description":"Version to delete. Omit to delete all versions."}},"required":["functionName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"azure-ad","displayName":"Azure Active Directory","description":"Manage users, groups, and licenses in Microsoft Entra ID (Azure AD) via Microsoft Graph.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["offline_access","User.ReadWrite.All","Group.ReadWrite.All","GroupMember.ReadWrite.All","Directory.ReadWrite.All","User.ManageIdentities.All"],"clientIdEnv":"AZURE_AD_OAUTH_CLIENT_ID","clientSecretEnv":"AZURE_AD_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.list","description":"List directory users with optional $filter, $select, $top, and $search.","parameters":{"type":"object","properties":{"$filter":{"type":"string"},"$select":{"type":"string"},"$top":{"type":"integer"},"$search":{"type":"string"},"$orderby":{"type":"string"}}},"requiredScopes":["User.ReadWrite.All"],"class":"read"},{"name":"users.list.enabled","description":"List directory users whose accountEnabled flag is true.","parameters":{"type":"object","properties":{"$select":{"type":"string"},"$top":{"type":"integer"}}},"requiredScopes":["User.ReadWrite.All"],"class":"read"},{"name":"users.get","description":"Read a single user by id or userPrincipalName.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["User.ReadWrite.All"],"class":"read"},{"name":"users.create","description":"Create a new directory user. Requires accountEnabled, displayName, mailNickname, userPrincipalName, and passwordProfile.","parameters":{"type":"object","properties":{"accountEnabled":{"type":"boolean"},"displayName":{"type":"string"},"mailNickname":{"type":"string"},"userPrincipalName":{"type":"string"},"passwordProfile":{"type":"object"},"givenName":{"type":"string"},"surname":{"type":"string"},"jobTitle":{"type":"string"},"department":{"type":"string"},"usageLocation":{"type":"string"}},"required":["accountEnabled","displayName","mailNickname","userPrincipalName","passwordProfile"]},"requiredScopes":["User.ReadWrite.All"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.update","description":"Patch fields on an existing user.","parameters":{"type":"object","properties":{"id":{"type":"string"},"patch":{"type":"object"}},"required":["id","patch"]},"requiredScopes":["User.ReadWrite.All"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"users.delete","description":"Delete a directory user (moves to the deleted-items container for 30 days).","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["User.ReadWrite.All"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.revoke.sessions","description":"Invalidate all refresh tokens for a user, forcing reauthentication on every active session.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["User.ReadWrite.All"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.license.assign","description":"Add or remove license SKUs assigned to a user.","parameters":{"type":"object","properties":{"id":{"type":"string"},"addLicenses":{"type":"array","items":{"type":"object"}},"removeLicenses":{"type":"array","items":{"type":"string"}}},"required":["id"]},"requiredScopes":["User.ReadWrite.All","Directory.ReadWrite.All"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"groups.get","description":"Read a single group by id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["Group.ReadWrite.All"],"class":"read"},{"name":"groups.attributes.get","description":"Read custom security attributes assigned to a group.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["Group.ReadWrite.All","CustomSecAttributeAssignment.ReadWrite.All"],"class":"read"},{"name":"groups.attributes.reset","description":"Clear custom security attributes on a group by patching customSecurityAttributes to an empty object.","parameters":{"type":"object","properties":{"id":{"type":"string"},"customSecurityAttributes":{"type":"object"}},"required":["id","customSecurityAttributes"]},"requiredScopes":["Group.ReadWrite.All","CustomSecAttributeAssignment.ReadWrite.All"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"groups.create","description":"Create a new group. Microsoft 365 groups require groupTypes:[\"Unified\"]; security groups omit it.","parameters":{"type":"object","properties":{"displayName":{"type":"string"},"mailNickname":{"type":"string"},"description":{"type":"string"},"securityEnabled":{"type":"boolean"},"mailEnabled":{"type":"boolean"},"groupTypes":{"type":"array","items":{"type":"string"}},"owners":{"type":"array","items":{"type":"string"}},"members":{"type":"array","items":{"type":"string"}},"visibility":{"type":"string"}},"required":["displayName","mailNickname","securityEnabled","mailEnabled"]},"requiredScopes":["Group.ReadWrite.All"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"groups.delete","description":"Delete a group (Microsoft 365 groups move to a 30-day soft-delete container).","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["Group.ReadWrite.All"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"groups.members.list","description":"List the direct members of a group.","parameters":{"type":"object","properties":{"id":{"type":"string"},"$select":{"type":"string"},"$top":{"type":"integer"}},"required":["id"]},"requiredScopes":["GroupMember.ReadWrite.All","Group.ReadWrite.All"],"class":"read"},{"name":"groups.members.add","description":"Add a directory object as a member of the group. The @odata.id payload references the user/group/service-principal by id.","parameters":{"type":"object","properties":{"id":{"type":"string"},"memberId":{"type":"string"}},"required":["id","memberId"]},"requiredScopes":["GroupMember.ReadWrite.All","Group.ReadWrite.All"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"azure-blob-storage","displayName":"Azure Blob Storage","description":"List and manage Azure Blob Storage containers, blobs, downloads, uploads, and index tags using a customer-owned storage connection string.","auth":{"kind":"api-key","hint":"Azure Storage connection string containing AccountName and either AccountKey or SharedAccessSignature. Store it only in the encrypted credential field. Public Azure cloud endpoints are supported; development-storage and arbitrary custom endpoints are rejected."},"category":"storage","defaultConsistencyModel":"authoritative","rateLimit":{"requests":500,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"containers.list","class":"read","description":"List storage containers with optional prefix and system/deleted filters.","parameters":{"type":"object","properties":{"prefix":{"type":"string"},"includeDeleted":{"type":"boolean"},"includeSystem":{"type":"boolean"},"marker":{"type":"string","description":"Opaque continuation marker from a previous response."},"maxResults":{"type":"integer","minimum":1,"maximum":5000}},"required":[]}},{"name":"containers.create","class":"mutation","description":"Create a private blob container.","parameters":{"type":"object","properties":{"containerName":{"type":"string","description":"DNS-compatible Azure container name."}},"required":["containerName"]},"cas":"none","externalEffect":true},{"name":"containers.delete","class":"mutation","description":"Delete a blob container and its contents.","parameters":{"type":"object","properties":{"containerName":{"type":"string"}},"required":["containerName"]},"cas":"none","externalEffect":true},{"name":"blobs.list","class":"read","description":"List blobs in a container with metadata and optional snapshots.","parameters":{"type":"object","properties":{"containerName":{"type":"string"},"prefix":{"type":"string"},"includeSnapshots":{"type":"boolean"},"marker":{"type":"string"},"maxResults":{"type":"integer","minimum":1,"maximum":5000}},"required":["containerName"]}},{"name":"blobs.findByTags","class":"read","description":"Find blobs in one container whose Azure index tags match all supplied values.","parameters":{"type":"object","properties":{"containerName":{"type":"string"},"tags":{"type":"object","minProperties":1,"maxProperties":10,"additionalProperties":{"type":"string"}},"marker":{"type":"string"},"maxResults":{"type":"integer","minimum":1,"maximum":5000}},"required":["containerName","tags"]}},{"name":"blobs.read","class":"read","description":"Download a bounded blob payload as base64 with its content type and ETag.","parameters":{"type":"object","properties":{"containerName":{"type":"string"},"blobName":{"type":"string"},"maxBytes":{"type":"integer","minimum":1,"maximum":10485760}},"required":["containerName","blobName"]}},{"name":"blobs.upload","class":"mutation","description":"Upload or replace a block blob from UTF-8 or base64 content.","parameters":{"type":"object","properties":{"containerName":{"type":"string"},"blobName":{"type":"string"},"content":{"type":"string","maxLength":14000000,"description":"UTF-8 text or base64-encoded bytes, up to 10 MiB after decoding."},"encoding":{"type":"string","enum":["utf-8","base64"],"default":"utf-8"},"contentType":{"type":"string"},"tags":{"type":"object","maxProperties":10,"additionalProperties":{"type":"string"}}},"required":["containerName","blobName","content"]},"cas":"none","externalEffect":true},{"name":"blobs.delete","class":"mutation","description":"Delete a blob and optionally its snapshots.","parameters":{"type":"object","properties":{"containerName":{"type":"string"},"blobName":{"type":"string"},"deleteSnapshots":{"type":"string","enum":["include","only"]}},"required":["containerName","blobName"]},"cas":"none","externalEffect":true},{"name":"blobs.tags.set","class":"mutation","description":"Replace blob index tags or merge them with the current tags.","parameters":{"type":"object","properties":{"containerName":{"type":"string"},"blobName":{"type":"string"},"tags":{"type":"object","minProperties":1,"maxProperties":10,"additionalProperties":{"type":"string"}},"keepExistingTags":{"type":"boolean"}},"required":["containerName","blobName","tags"]},"cas":"none","externalEffect":true}]},{"kind":"azure-communication-services","displayName":"Azure Communication Services","description":"Send transactional email through the Azure Communication Services Email REST API.","auth":{"kind":"api-key","hint":"Azure Communication Services connection string (AccessKey). Endpoint is read from the connection string host."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"send.email","description":"Send an email via the Azure Communication Services Email API (POST /emails:send).","parameters":{"type":"object","properties":{"senderAddress":{"type":"string"},"content":{"type":"object","properties":{"subject":{"type":"string"},"plainText":{"type":"string"},"html":{"type":"string"}},"required":["subject"]},"recipients":{"type":"object","properties":{"to":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"displayName":{"type":"string"}},"required":["address"]}},"cc":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"displayName":{"type":"string"}},"required":["address"]}},"bcc":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"displayName":{"type":"string"}},"required":["address"]}}},"required":["to"]},"replyTo":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"displayName":{"type":"string"}},"required":["address"]}},"attachments":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"contentType":{"type":"string"},"contentInBase64":{"type":"string"}},"required":["name","contentType","contentInBase64"]}},"headers":{"type":"object"},"userEngagementTrackingDisabled":{"type":"boolean"}},"required":["senderAddress","content","recipients"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"send.sms","description":"Send an SMS message through the Azure Communication Services SMS API (POST /sms?api-version=2021-03-07).","parameters":{"type":"object","properties":{"from":{"type":"string","description":"ACS-provisioned sender phone number (E.164)."},"smsRecipients":{"type":"array","items":{"type":"object","properties":{"to":{"type":"string"},"repeatabilityRequestId":{"type":"string"},"repeatabilityFirstSent":{"type":"string"}},"required":["to"]},"description":"Recipient list. Each entry carries an E.164 destination and optional repeatability fields."},"message":{"type":"string","description":"SMS body text. Plain text only; ACS handles GSM7/UCS2 segmentation."},"smsSendOptions":{"type":"object","properties":{"enableDeliveryReport":{"type":"boolean"},"tag":{"type":"string"}}}},"required":["from","smsRecipients","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chat.thread.create","description":"Create a chat thread for ACS Chat (POST /chat/threads?api-version=2021-09-07). Returns the thread id used by chat.message.send.","parameters":{"type":"object","properties":{"topic":{"type":"string","description":"Human-readable thread topic."},"participants":{"type":"array","items":{"type":"object","properties":{"id":{"type":"object","properties":{"communicationUser":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},"required":["communicationUser"]},"displayName":{"type":"string"}},"required":["id"]},"description":"Initial participants; each carries an ACS communication user identity."}},"required":["topic","participants"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chat.message.send","description":"Post a message to an existing ACS chat thread (POST /chat/threads/{threadId}/messages?api-version=2021-09-07). Pass the full ACS message body as `message`.","parameters":{"type":"object","properties":{"threadId":{"type":"string","description":"Chat thread id (returned by chat.thread.create)."},"message":{"type":"object","description":"ACS message body. Carries `content` (required), and optional `senderDisplayName`, `type` (text|html), and `metadata`.","properties":{"content":{"type":"string"},"senderDisplayName":{"type":"string"},"type":{"type":"string","enum":["text","html"]},"metadata":{"type":"object"}},"required":["content"]}},"required":["threadId","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"azure-event-grid","displayName":"Azure Event Grid","description":"Publish Event Grid and CloudEvents batches to customer topics and authenticate inbound subscription validation and event delivery.","auth":{"kind":"api-key","hint":"JSON containing endpoint, accessKey, and deliverySecret. endpoint is the Azure custom topic or domain /api/events URL. Configure deliverySecret as the static x-tangle-eventgrid-secret delivery header on each Event Grid subscription."},"category":"webhook","defaultConsistencyModel":"advisory","rateLimit":{"requests":600,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"events.publish","class":"mutation","description":"Publish a bounded batch using the native Azure Event Grid event schema.","parameters":{"type":"object","properties":{"events":{"type":"array","minItems":1,"maxItems":5000,"description":"Events require id, eventType, subject, eventTime, dataVersion, and data."}},"required":["events"]},"cas":"none","externalEffect":true},{"name":"cloudEvents.publish","class":"mutation","description":"Publish a bounded CloudEvents 1.0 batch.","parameters":{"type":"object","properties":{"events":{"type":"array","minItems":1,"maxItems":5000,"description":"CloudEvents require id, source, type, specversion=1.0, and data."}},"required":["events"]},"cas":"none","externalEffect":true}]},{"kind":"azure-openai","displayName":"Azure OpenAI","description":"Call Azure OpenAI Service deployments (chat completions, completions, embeddings, images, audio) on your tenant-owned resource endpoint with a per-resource api-key.","auth":{"kind":"api-key","hint":"Azure OpenAI resource key from the Azure Portal (Keys and Endpoint blade). The connection metadata must also carry the per-resource endpoint, e.g. https://.openai.azure.com."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"deployments.list","description":"List deployments (model bindings) on this Azure OpenAI resource.","parameters":{"type":"object","properties":{"apiVersion":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"deployments.get","description":"Retrieve a single deployment by name.","parameters":{"type":"object","properties":{"deployment":{"type":"string"},"apiVersion":{"type":"string"}},"required":["deployment"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"models.list","description":"List models available to this Azure OpenAI resource (independent of deployment).","parameters":{"type":"object","properties":{"apiVersion":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"chat.completions.create","description":"Create a chat completion against a named deployment. Mirrors the catalog `askGpt` action with the full Azure chat surface (tools, structured output, vision).","parameters":{"type":"object","properties":{"deployment":{"type":"string"},"apiVersion":{"type":"string"},"messages":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["system","user","assistant","tool","function","developer"]},"content":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"text":{"type":"string"},"image_url":{"type":"object","properties":{"url":{"type":"string"}}}},"required":["type"]}}]},"name":{"type":"string"},"tool_call_id":{"type":"string"}},"required":["role"]}},"temperature":{"type":"number","minimum":0,"maximum":2},"top_p":{"type":"number","minimum":0,"maximum":1},"n":{"type":"integer","minimum":1},"stop":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"max_tokens":{"type":"integer","minimum":1},"max_completion_tokens":{"type":"integer","minimum":1},"presence_penalty":{"type":"number","minimum":-2,"maximum":2},"frequency_penalty":{"type":"number","minimum":-2,"maximum":2},"logit_bias":{"type":"object"},"user":{"type":"string"},"seed":{"type":"integer"},"response_format":{"type":"object"},"tools":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["function"]},"function":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"parameters":{"type":"object"}},"required":["name"]}},"required":["type","function"]}},"tool_choice":{"oneOf":[{"type":"string"},{"type":"object"}]},"parallel_tool_calls":{"type":"boolean"},"stream":{"type":"boolean","const":false}},"required":["deployment","messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"completions.create","description":"Create a non-chat completion against a named deployment. Useful for fine-tuned base-model deployments and legacy text-completion workflows.","parameters":{"type":"object","properties":{"deployment":{"type":"string"},"apiVersion":{"type":"string"},"prompt":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"max_tokens":{"type":"integer","minimum":1},"temperature":{"type":"number","minimum":0,"maximum":2},"top_p":{"type":"number","minimum":0,"maximum":1},"n":{"type":"integer","minimum":1},"stop":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"presence_penalty":{"type":"number","minimum":-2,"maximum":2},"frequency_penalty":{"type":"number","minimum":-2,"maximum":2},"logit_bias":{"type":"object"},"user":{"type":"string"},"seed":{"type":"integer"},"stream":{"type":"boolean","const":false}},"required":["deployment","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"embeddings.create","description":"Generate embedding vectors for the given input(s) against an embeddings deployment.","parameters":{"type":"object","properties":{"deployment":{"type":"string"},"apiVersion":{"type":"string"},"input":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"array","items":{"type":"array","items":{"type":"integer"}}}]},"encoding_format":{"type":"string","enum":["float","base64"]},"dimensions":{"type":"integer","minimum":1},"user":{"type":"string"}},"required":["deployment","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"images.generate","description":"Generate an image from a prompt against a DALL·E / gpt-image deployment.","parameters":{"type":"object","properties":{"deployment":{"type":"string"},"apiVersion":{"type":"string"},"prompt":{"type":"string"},"n":{"type":"integer","minimum":1,"maximum":10},"size":{"type":"string"},"quality":{"type":"string"},"style":{"type":"string"},"response_format":{"type":"string","enum":["url","b64_json"]},"user":{"type":"string"}},"required":["deployment","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"audio.transcriptions.create","description":"Transcribe audio (whisper-style) against a transcription deployment.","parameters":{"type":"object","properties":{"deployment":{"type":"string"},"apiVersion":{"type":"string"},"file":{"type":"string","description":"Base64-encoded audio payload or upload reference."},"prompt":{"type":"string"},"response_format":{"type":"string","enum":["json","text","srt","verbose_json","vtt"]},"temperature":{"type":"number","minimum":0,"maximum":1},"language":{"type":"string"}},"required":["deployment","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"audio.translations.create","description":"Translate audio to English against a transcription deployment.","parameters":{"type":"object","properties":{"deployment":{"type":"string"},"apiVersion":{"type":"string"},"file":{"type":"string"},"prompt":{"type":"string"},"response_format":{"type":"string","enum":["json","text","srt","verbose_json","vtt"]},"temperature":{"type":"number","minimum":0,"maximum":1}},"required":["deployment","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"audio.speech.create","description":"Synthesize speech audio from text against a text-to-speech deployment.","parameters":{"type":"object","properties":{"deployment":{"type":"string"},"apiVersion":{"type":"string"},"input":{"type":"string"},"voice":{"type":"string"},"response_format":{"type":"string","enum":["mp3","opus","aac","flac","wav","pcm"]},"speed":{"type":"number","minimum":0.25,"maximum":4}},"required":["deployment","input","voice"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"azure-service-bus","displayName":"Azure Service Bus","description":"Send and receive Azure Service Bus queue and topic messages and discover queue, topic, and subscription entities with a customer-owned SAS connection string.","auth":{"kind":"api-key","hint":"Azure Service Bus connection string containing Endpoint, SharedAccessKeyName, and SharedAccessKey. EntityPath is supported and restricts this connection to that queue or topic."},"category":"webhook","defaultConsistencyModel":"advisory","rateLimit":{"requests":600,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"queues.list","class":"read","description":"List queues visible to a namespace-level Manage policy.","parameters":{"type":"object","properties":{"skip":{"type":"integer","minimum":0},"top":{"type":"integer","minimum":1,"maximum":1000}}}},{"name":"queues.get","class":"read","description":"Get one queue description and message counts.","parameters":{"type":"object","properties":{"queue":{"type":"string"}},"required":["queue"]}},{"name":"topics.list","class":"read","description":"List topics visible to a namespace-level Manage policy.","parameters":{"type":"object","properties":{"skip":{"type":"integer","minimum":0},"top":{"type":"integer","minimum":1,"maximum":1000}}}},{"name":"topics.get","class":"read","description":"Get one topic description and message counts.","parameters":{"type":"object","properties":{"topic":{"type":"string"}},"required":["topic"]}},{"name":"subscriptions.list","class":"read","description":"List subscriptions for one topic.","parameters":{"type":"object","properties":{"topic":{"type":"string"},"skip":{"type":"integer","minimum":0},"top":{"type":"integer","minimum":1,"maximum":1000}},"required":["topic"]}},{"name":"subscriptions.get","class":"read","description":"Get one topic subscription description and message counts.","parameters":{"type":"object","properties":{"topic":{"type":"string"},"subscription":{"type":"string"}},"required":["topic","subscription"]}},{"name":"queues.send","class":"mutation","description":"Send a UTF-8 or base64 message to a queue.","parameters":{"type":"object","properties":{"queue":{"type":"string"},"content":{"type":"string","description":"UTF-8 text or canonical base64 message body."},"encoding":{"type":"string","enum":["utf-8","base64"],"default":"utf-8"},"contentType":{"type":"string"},"brokerProperties":{"type":"object","description":"Allowed broker properties such as MessageId, CorrelationId, Label, SessionId, TimeToLive, and ScheduledEnqueueTimeUtc."},"applicationProperties":{"type":"object","description":"Application property headers with string, number, or boolean values."}},"required":["queue","content"]},"cas":"none","externalEffect":true},{"name":"topics.send","class":"mutation","description":"Publish a UTF-8 or base64 message to a topic.","parameters":{"type":"object","properties":{"topic":{"type":"string"},"content":{"type":"string","description":"UTF-8 text or canonical base64 message body."},"encoding":{"type":"string","enum":["utf-8","base64"],"default":"utf-8"},"contentType":{"type":"string"},"brokerProperties":{"type":"object","description":"Allowed broker properties such as MessageId, CorrelationId, Label, SessionId, TimeToLive, and ScheduledEnqueueTimeUtc."},"applicationProperties":{"type":"object","description":"Application property headers with string, number, or boolean values."}},"required":["topic","content"]},"cas":"none","externalEffect":true},{"name":"queues.receiveDelete","class":"mutation","description":"Receive and permanently delete the next queue message.","parameters":{"type":"object","properties":{"queue":{"type":"string"},"timeoutSeconds":{"type":"integer","minimum":0,"maximum":55}},"required":["queue"]},"cas":"none","externalEffect":true},{"name":"subscriptions.receiveDelete","class":"mutation","description":"Receive and permanently delete the next message from a topic subscription.","parameters":{"type":"object","properties":{"topic":{"type":"string"},"subscription":{"type":"string"},"timeoutSeconds":{"type":"integer","minimum":0,"maximum":55}},"required":["topic","subscription"]},"cas":"none","externalEffect":true},{"name":"queues.deadLetters.receiveDelete","class":"mutation","description":"Receive and permanently delete the next queue dead-letter message.","parameters":{"type":"object","properties":{"queue":{"type":"string"},"timeoutSeconds":{"type":"integer","minimum":0,"maximum":55}},"required":["queue"]},"cas":"none","externalEffect":true},{"name":"subscriptions.deadLetters.receiveDelete","class":"mutation","description":"Receive and permanently delete the next subscription dead-letter message.","parameters":{"type":"object","properties":{"topic":{"type":"string"},"subscription":{"type":"string"},"timeoutSeconds":{"type":"integer","minimum":0,"maximum":55}},"required":["topic","subscription"]},"cas":"none","externalEffect":true}]},{"kind":"backblaze","displayName":"Backblaze B2","description":"Read and upload objects on a Backblaze B2 bucket via the S3-compatible REST API at s3.{region}.backblazeb2.com.","auth":{"kind":"api-key","hint":"Backblaze B2 application key pair as JSON: {\"accessKeyId\":\"…\",\"secretAccessKey\":\"…\",\"region\":\"us-west-001\",\"bucket\":\"…\"} scoped to the target bucket. Optional \"endpoint\" overrides the host. Requests are signed with AWS Signature V4 (S3-compatible); the region selects the s3..backblazeb2.com endpoint."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"files.read","description":"Read an object from the configured bucket. Returns the object bytes and S3 response headers (Content-Type, Content-Length, ETag, x-amz-meta-*). `key` is the full object key including any extension; folder-style keys use forward slashes.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name. Defaults to the connector-configured bucket when omitted."},"key":{"type":"string","description":"Full object key (e.g. \"reports/2026/q1.pdf\"). Include the extension verbatim — Backblaze treats keys as opaque byte strings."}},"required":["key"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.s3_upload","description":"Upload an object to the bucket via S3 PutObject. The destination key is built from `folderPath` + `fileName` when both are present, otherwise `fileName` is used as the full key. `type` selects the Content-Type sent on the PUT, and `acl` maps to the S3 canned-ACL header (private | public-read).","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name. Defaults to the connector-configured bucket when omitted."},"fileName":{"type":"string","description":"File name without extension by activepieces convention. Combined with `folderPath` to form the destination key; pass a full path here (e.g. \"reports/q1.pdf\") to store at the bucket root."},"folderPath":{"type":"string","description":"Optional folder prefix (e.g. \"reports/2026\"). Joined to `fileName` with a single \"/\" separator."},"file":{"type":"string","description":"Object body. Pass a base64-encoded string for binary content, or a UTF-8 string for text. The runtime decodes and sets Content-Length."},"type":{"type":"string","description":"MIME type sent as the Content-Type header (e.g. \"application/pdf\", \"image/png\"). Required by the activepieces piece."},"acl":{"type":"string","enum":["private","public-read"],"description":"S3 canned ACL applied to the new object. Backblaze honors `private` and `public-read`; other canned ACLs are rejected."}},"required":["fileName","file","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.list","description":"List objects in the bucket using S3 ListObjectsV2. `prefix` narrows the listing to a key prefix; `maxKeys` caps the number of returned keys (S3 cap is 1000).","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name. Defaults to the connector-configured bucket when omitted."},"prefix":{"type":"string","description":"Only list keys that start with this prefix (e.g. \"reports/2026/\")."},"maxKeys":{"type":"integer","description":"Maximum number of keys to return (1..1000). Defaults to 1000."},"continuationToken":{"type":"string","description":"Opaque token from a previous response when paginating."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.delete","description":"Delete an object from the bucket via S3 DeleteObject. The key is opaque — pass the full key including any folder prefix.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name. Defaults to the connector-configured bucket when omitted."},"key":{"type":"string","description":"Full object key (e.g. \"reports/2026/q1.pdf\"). Include the extension verbatim."}},"required":["key"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.copy","description":"Server-side copy of an object to a new key in the same (or another) bucket via S3 PUT + x-amz-copy-source. `sourceKey` is the full source object key; `destKey` is the destination key.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Destination bucket name. Defaults to the connector-configured bucket when omitted."},"sourceBucket":{"type":"string","description":"Source bucket name. Defaults to `bucket` when omitted."},"sourceKey":{"type":"string","description":"Full source object key."},"destKey":{"type":"string","description":"Full destination object key."},"acl":{"type":"string","enum":["private","public-read"],"description":"S3 canned ACL applied to the new object."}},"required":["sourceBucket","sourceKey","destKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"bamboohr","displayName":"BambooHR","description":"Read and update BambooHR employee records, time-off requests, custom reports, and employee files via the BambooHR Gateway REST API.","auth":{"kind":"api-key","hint":"BambooHR API key. Generate one under your BambooHR account → API Keys, then paste the base64 of `:x` (the literal letter x as password — BambooHR ignores the password but HTTP Basic requires one)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"employees.directory","description":"List every employee in the BambooHR directory (id, displayName, jobTitle, workEmail, department, location, supervisor). Useful as a tenant-wide lookup table.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"employees.get","description":"Fetch a single employee record by id. Pass `fields` as a comma-separated list of BambooHR field aliases (firstName,lastName,workEmail,jobTitle,hireDate,…).","parameters":{"type":"object","properties":{"employeeId":{"type":"string","description":"BambooHR employee id (or \"0\" for the API-key owner)."},"fields":{"type":"string","description":"Comma-separated field aliases to project; required by BambooHR."}},"required":["employeeId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"employees.create","description":"Create a new employee. Body is a flat object of BambooHR field aliases (firstName, lastName, workEmail, jobTitle, department, hireDate). BambooHR returns the new employee id in the `Location` response header.","parameters":{"type":"object","properties":{"fields":{"type":"object","description":"Flat map of BambooHR field aliases → values. firstName and lastName are required."}},"required":["fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"employees.update","description":"Update an existing employee. Body is a flat object of BambooHR field aliases → new values. BambooHR returns 200 with no body on success.","parameters":{"type":"object","properties":{"employeeId":{"type":"string"},"fields":{"type":"object"}},"required":["employeeId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"employees.list_custom_table","description":"Read a row set from a BambooHR table (jobInfo, compensation, employmentStatus, …) for a single employee. Returns one entry per historical row.","parameters":{"type":"object","properties":{"employeeId":{"type":"string"},"tableName":{"type":"string","description":"BambooHR table alias, e.g. jobInfo, compensation, employmentStatus."}},"required":["employeeId","tableName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"timeoff.types.list","description":"List the time-off types configured for the tenant (vacation, sick, jury duty, …). Returns id, name, units.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"timeoff.requests.list","description":"List time-off requests in a date window. `start` and `end` are ISO-8601 dates (YYYY-MM-DD); `status` filters by approved/denied/superseded/requested.","parameters":{"type":"object","properties":{"start":{"type":"string","format":"date"},"end":{"type":"string","format":"date"},"employeeId":{"type":"string"},"status":{"type":"string","enum":["approved","denied","superseded","requested","canceled"]},"type":{"type":"string","description":"Time-off type id."}},"required":["start","end"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"timeoff.requests.create","description":"File a time-off request on behalf of an employee. status defaults to \"requested\" so it routes through the tenant's normal approval chain.","parameters":{"type":"object","properties":{"employeeId":{"type":"string"},"status":{"type":"string","enum":["approved","denied","superseded","requested"]},"start":{"type":"string","format":"date"},"end":{"type":"string","format":"date"},"timeOffTypeId":{"type":"integer"},"amount":{"type":"number","description":"Hours or days depending on the time-off type units."},"notes":{"type":"object","description":"Free-form notes; BambooHR shows them on the request."},"dates":{"type":"array","description":"Optional per-day breakdown ({date, amount}).","items":{"type":"object"}}},"required":["employeeId","start","end","timeOffTypeId","amount"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"timeoff.requests.change_status","description":"Approve, deny, or cancel an existing time-off request. status must be one of approved | denied | superseded | requested | canceled.","parameters":{"type":"object","properties":{"requestId":{"type":"string"},"status":{"type":"string","enum":["approved","denied","superseded","requested","canceled"]},"note":{"type":"string"}},"required":["requestId","status"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"reports.list","description":"List the tenant's saved custom reports (id, name, owner). Use the id with `reports.run`.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reports.run","description":"Run a saved BambooHR report by id and return its rows. format defaults to JSON; set fd=yes to flatten field aliases into the response keys.","parameters":{"type":"object","properties":{"reportId":{"type":"string"},"format":{"type":"string","enum":["JSON","CSV","PDF","XLS","XML"]},"fd":{"type":"string","enum":["yes","no"],"description":"Field-data toggle."}},"required":["reportId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reports.custom","description":"Build an ad-hoc report from a list of field aliases. Body matches BambooHR's custom-report contract: { title, fields, filters?, includeWorkflowStatus? }.","parameters":{"type":"object","properties":{"title":{"type":"string"},"fields":{"type":"array","description":"BambooHR field aliases to include as report columns.","items":{"type":"string"}},"filters":{"type":"object"},"includeWorkflowStatus":{"type":"boolean"},"format":{"type":"string","enum":["JSON","CSV","PDF","XLS","XML"]}},"required":["title","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":false},{"name":"files.list","description":"List the files attached to an employee (id, name, originalFileName, size, dateCreated, category).","parameters":{"type":"object","properties":{"employeeId":{"type":"string"}},"required":["employeeId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.get_metadata","description":"Fetch a single employee file's metadata by id. To download bytes, the caller follows the returned URL with the same credentials.","parameters":{"type":"object","properties":{"employeeId":{"type":"string"},"fileId":{"type":"string"}},"required":["employeeId","fileId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"meta.fields","description":"List every BambooHR field the tenant has configured (alias, name, type). Use this to discover field aliases dynamically.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"meta.lists","description":"List the tenant's list-typed field options (departments, divisions, locations, employment statuses).","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"bannerbear","displayName":"Bannerbear","description":"Automate image generation using Bannerbear templates.","auth":{"kind":"api-key","hint":"Bannerbear API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"images.create","description":"Create an image using a Bannerbear template with specified modifications.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"The ID of the template to use for image creation."},"modifications":{"type":"object","description":"A list of modifications to apply to the template layers."},"templateVersion":{"type":"integer","description":"Create image based on a specific version of the template."},"transparent":{"type":"boolean","description":"Render a PNG with a transparent background. Default is false."},"renderPdf":{"type":"boolean","description":"Render a PDF instead of a PNG. Default is false."},"metadata":{"type":"string","description":"Any metadata you need to store, e.g., ID of a record in your DB."}},"required":["templateId","modifications"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"images.delete","description":"Delete a previously-rendered image by its Bannerbear image id.","parameters":{"type":"object","properties":{"imageId":{"type":"string","description":"Bannerbear image id (uid returned by images.create)."}},"required":["imageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"videos.create","description":"Render a video from a Bannerbear video template. Pass the Bannerbear video-create body directly (snake_case fields: video_template, modifications, input_media_url, blur_media_url, frames, frames_per_row, metadata, webhook_url).","parameters":{"type":"object","properties":{"video_template":{"type":"string","description":"Bannerbear video template id."},"modifications":{"type":"array","description":"Per-layer modifications applied to the video template (text/image/colour overrides).","items":{"type":"object"}},"input_media_url":{"type":"string","description":"URL to source media when the template ingests external footage."},"blur_media_url":{"type":"string","description":"URL to media used as background blur (template-specific)."},"frames":{"type":"array","description":"Per-frame modifications for multi-frame video templates.","items":{"type":"object"}},"frames_per_row":{"type":"integer","description":"Layout hint for multi-frame templates (frames per row)."},"metadata":{"type":"string","description":"Free-form metadata stored on the video render."},"webhook_url":{"type":"string","description":"Callback URL invoked when the video render completes."}},"required":["video_template"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.create","description":"Create a Bannerbear collection render — a single API call that fans out one set of modifications across every template attached to the collection template. Pass the body directly (snake_case fields: template_set, modifications, transparent, render_pdf, metadata, webhook_url).","parameters":{"type":"object","properties":{"template_set":{"type":"string","description":"Bannerbear template-set (collection) id."},"modifications":{"type":"array","description":"Per-layer modifications applied to every template in the set.","items":{"type":"object"}},"transparent":{"type":"boolean","description":"Render PNGs with transparent backgrounds. Default false."},"render_pdf":{"type":"boolean","description":"Render PDFs instead of PNGs. Default false."},"metadata":{"type":"string","description":"Free-form metadata stored on the collection render."},"webhook_url":{"type":"string","description":"Callback URL invoked when the collection render completes."}},"required":["template_set","modifications"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"barcode-lookup","displayName":"Barcode Lookup","description":"Look up product information by UPC, EAN, or ISBN barcode number.","auth":{"kind":"api-key","hint":"Barcode Lookup API key, sent as the \"key\" query parameter."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"search.by.barcode","description":"Look up product information for a UPC, EAN, or ISBN barcode.","parameters":{"type":"object","properties":{"barcode":{"type":"string","description":"The barcode/UPC/EAN/ISBN number to search for."},"formatted":{"type":"boolean","description":"Return results in a clean, easy-to-read format."}},"required":["barcode"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"baremetrics","displayName":"Baremetrics","description":"Create and update customers, plans, and subscriptions in Baremetrics, the analytics and metrics platform for subscription businesses.","auth":{"kind":"api-key","hint":"Baremetrics API key from Settings → API. Sent as a bearer token."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.customer","description":"Create a customer under a Baremetrics source. Pass `body` matching the Baremetrics customers payload (oid, name, email, notes, current_plan_oid, etc.).","parameters":{"type":"object","properties":{"sourceId":{"type":"string","description":"Baremetrics source id (e.g. the connected Stripe/Recurly/Chargify source)."},"body":{"type":"object","description":"Baremetrics customer payload: { oid, name?, email?, notes?, current_plan_oid? }."}},"required":["sourceId","body"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.plan","description":"Create a plan under a Baremetrics source. Pass `body` matching the Baremetrics plans payload (oid, name, currency, amounts, interval, interval_count, etc.).","parameters":{"type":"object","properties":{"sourceId":{"type":"string","description":"Baremetrics source id."},"body":{"type":"object","description":"Baremetrics plan payload: { oid, name, currency, amount, interval, interval_count, trial_days? }."}},"required":["sourceId","body"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.subscription","description":"Create a subscription under a Baremetrics source. Pass `body` matching the Baremetrics subscriptions payload (oid, started_at, customer_oid, plan_oid, etc.).","parameters":{"type":"object","properties":{"sourceId":{"type":"string","description":"Baremetrics source id."},"body":{"type":"object","description":"Baremetrics subscription payload: { oid, started_at, customer_oid, plan_oid, canceled_at? }."}},"required":["sourceId","body"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.customer","description":"Update an existing Baremetrics customer (identified by its oid) under a given source. Pass `body` with the updatable fields per the Baremetrics customers update payload.","parameters":{"type":"object","properties":{"sourceId":{"type":"string","description":"Baremetrics source id."},"customerOid":{"type":"string","description":"External id of the customer to update (the oid value previously created)."},"body":{"type":"object","description":"Baremetrics customer update payload: { name?, email?, notes?, current_plan_oid? }."}},"required":["sourceId","customerOid","body"]},"requiredScopes":["write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"delete.customer","description":"Delete a Baremetrics customer (identified by its oid) from a given source. Permanently removes customer history from Baremetrics analytics.","parameters":{"type":"object","properties":{"sourceId":{"type":"string","description":"Baremetrics source id."},"customerOid":{"type":"string","description":"External id of the customer to delete."}},"required":["sourceId","customerOid"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cancel.subscription","description":"Cancel a Baremetrics subscription (identified by its oid) under a given source. Marks the subscription as canceled in Baremetrics.","parameters":{"type":"object","properties":{"sourceId":{"type":"string","description":"Baremetrics source id."},"subscriptionOid":{"type":"string","description":"External id of the subscription to cancel."}},"required":["sourceId","subscriptionOid"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"delete.plan","description":"Delete a Baremetrics plan definition (identified by its oid) under a given source.","parameters":{"type":"object","properties":{"sourceId":{"type":"string","description":"Baremetrics source id."},"planOid":{"type":"string","description":"External id of the plan to delete."}},"required":["sourceId","planOid"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.annotation","description":"Create a chart annotation in Baremetrics. Annotations appear as labelled markers on time-series charts.","parameters":{"type":"object","properties":{"metric":{"type":"string","description":"Metric the annotation should appear on (e.g. mrr, active_customers)."},"title":{"type":"string","description":"Short annotation title."},"description":{"type":"string","description":"Optional longer annotation body."},"date":{"type":"string","description":"Date of the annotation in YYYY-MM-DD format."}},"required":["metric","title","date"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"base44","displayName":"Base44","description":"Create, find, and manage entities in Base44 with flexible query and filtering capabilities.","auth":{"kind":"api-key","hint":"Base44 App ID and API token."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"entities.create","description":"Create a new entity in Base44.","parameters":{"type":"object","properties":{"entityType":{"type":"string","description":"The name of the entity type"},"entityData":{"type":"object","description":"The data to create the entity with"}},"required":["entityType","entityData"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"entities.find","description":"Find entities in Base44 matching a search query.","parameters":{"type":"object","properties":{"entityType":{"type":"string","description":"The name of the entity type"},"searchQuery":{"type":"object","description":"Query object to filter entities"}},"required":["entityType","searchQuery"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"entities.findOrCreate","description":"Find an entity or create it if not found.","parameters":{"type":"object","properties":{"entityType":{"type":"string","description":"The name of the entity type"},"searchQuery":{"type":"object","description":"Query to find the entity"},"createData":{"type":"object","description":"Data to create the entity with if not found"}},"required":["entityType","searchQuery","createData"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"entities.update","description":"Update an existing entity row by id.","parameters":{"type":"object","properties":{"entityType":{"type":"string","description":"The name of the entity type"},"entityId":{"type":"string","description":"Id of the entity to update"},"entityData":{"type":"object","description":"Fields to update on the entity"}},"required":["entityType","entityId","entityData"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"entities.delete","description":"Delete an entity row by id.","parameters":{"type":"object","properties":{"entityType":{"type":"string","description":"The name of the entity type"},"entityId":{"type":"string","description":"Id of the entity to delete"}},"required":["entityType","entityId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"entities.bulkUpsert","description":"Bulk upsert a list of entities under a single entity type.","parameters":{"type":"object","properties":{"entityType":{"type":"string","description":"The name of the entity type"},"entities":{"type":"array","description":"Array of entity payloads to upsert.","items":{"type":"object"}}},"required":["entityType","entities"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"basecamp","displayName":"Basecamp","description":"Read projects, message boards, to-do lists, to-dos, and campfire chats from a connected Basecamp 3 account; create message-board posts, to-dos, and campfire lines.","auth":{"kind":"oauth2","authorizationUrl":"https://launchpad.37signals.com/authorization/new","tokenUrl":"https://launchpad.37signals.com/authorization/token","scopes":[],"clientIdEnv":"BASECAMP_OAUTH_CLIENT_ID","clientSecretEnv":"BASECAMP_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"projects.list","description":"List active projects visible to the authorized user. Paginates 15 per page; use `page` to walk.","parameters":{"type":"object","properties":{"status":{"type":"string","description":"Filter by archived/trashed lifecycle. Defaults to active when omitted.","enum":["archived","trashed"]},"page":{"type":"integer","minimum":1}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.get","description":"Read a single project, including the dock of tools (message board, todoset, campfire, schedule) attached to it.","parameters":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.create","description":"Create a new project. Returns the project payload with its dock of default tools attached.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"message_board.messages.list","description":"List messages on a project message board. `messageBoardId` is the id of the message_board tool from projects.get.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"messageBoardId":{"type":"string"}},"required":["projectId","messageBoardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"message_board.messages.get","description":"Read a single message-board post by id.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"messageId":{"type":"string"}},"required":["projectId","messageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"message_board.messages.create","description":"Post a new active message to a project message board. `content` is HTML (Basecamp's rich-text format); `subject` is plain text. Published immediately (status=\"active\").","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"messageBoardId":{"type":"string"},"subject":{"type":"string"},"content":{"type":"string","description":"HTML body. Basecamp strips disallowed tags server-side."}},"required":["projectId","messageBoardId","subject","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"todoset.get","description":"Read the project's todoset (the container that holds all to-do lists). `todosetId` is the id of the todoset tool from projects.get.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"todosetId":{"type":"string"}},"required":["projectId","todosetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"todolists.list","description":"List to-do lists inside a todoset.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"todosetId":{"type":"string"},"status":{"type":"string","enum":["archived","trashed"]}},"required":["projectId","todosetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"todolists.create","description":"Create a new to-do list inside a todoset. `name` and `description` are both required body fields here; Basecamp accepts an empty `description` if the list has none.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"todosetId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string","description":"Plain text; pass an empty string if none."}},"required":["projectId","todosetId","name","description"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"todos.list","description":"List to-dos inside a single to-do list. Use `status=archived|trashed|completed` to slice.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"todolistId":{"type":"string"},"status":{"type":"string","enum":["archived","trashed"]},"completed":{"type":"boolean"}},"required":["projectId","todolistId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"todos.get","description":"Read a single to-do by id, including assignees, due date, and completion state.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"todoId":{"type":"string"}},"required":["projectId","todoId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"todos.create","description":"Create a to-do inside a to-do list. Body fields follow Basecamp's wire format verbatim: `content` (required), `description` (HTML), `assignee_ids` / `notify_ids` / `completion_subscriber_ids` (arrays of person ids), `due_on` and `starts_on` (ISO YYYY-MM-DD). Path-only args (`projectId`, `todolistId`) are scrubbed by Basecamp server-side.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"todolistId":{"type":"string"},"content":{"type":"string"},"description":{"type":"string"},"assignee_ids":{"type":"array","items":{"type":"integer"}},"notify_ids":{"type":"array","items":{"type":"integer"}},"completion_subscriber_ids":{"type":"array","items":{"type":"integer"}},"due_on":{"type":"string","description":"ISO date YYYY-MM-DD."},"starts_on":{"type":"string","description":"ISO date YYYY-MM-DD."}},"required":["projectId","todolistId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"todos.update","description":"Edit an existing to-do. Wire field names match Basecamp directly (`content`, `description`, `assignee_ids`, `notify_ids`, `due_on`, `starts_on`). Omitted fields are left untouched server-side.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"todoId":{"type":"string"},"content":{"type":"string"},"description":{"type":"string"},"assignee_ids":{"type":"array","items":{"type":"integer"}},"notify_ids":{"type":"array","items":{"type":"integer"}},"due_on":{"type":"string"},"starts_on":{"type":"string"}},"required":["projectId","todoId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"todos.complete","description":"Mark a to-do completed. Idempotent on Basecamp's side — re-POSTing on an already-completed to-do is a no-op 204.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"todoId":{"type":"string"}},"required":["projectId","todoId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"todos.uncomplete","description":"Reopen a previously completed to-do.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"todoId":{"type":"string"}},"required":["projectId","todoId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.list","description":"List comments attached to a recording (to-do, message, document, upload — any commentable resource).","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"recordingId":{"type":"string","description":"Id of the parent recording (to-do, message, etc.)."}},"required":["projectId","recordingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"comments.create","description":"Post a comment on any commentable recording. `content` is HTML.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"recordingId":{"type":"string"},"content":{"type":"string","description":"HTML body."}},"required":["projectId","recordingId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campfire.lines.list","description":"List recent lines (messages) in a project's campfire (group chat). `campfireId` is the id of the chat tool from projects.get.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"campfireId":{"type":"string"}},"required":["projectId","campfireId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campfire.lines.create","description":"Post a single line to a project's campfire chat. `content` is HTML.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"campfireId":{"type":"string"},"content":{"type":"string","description":"HTML body."}},"required":["projectId","campfireId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"people.list","description":"List people on the account. Use this to resolve assignee ids for to-do creation.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"people.get","description":"Read a single person on the account.","parameters":{"type":"object","properties":{"personId":{"type":"string"}},"required":["personId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"baserow","displayName":"Baserow","description":"List tables and fields, and create, read, update, move, or delete Baserow rows.","auth":{"kind":"api-key","hint":"Baserow database token. Grant only the tables and create/read/update/delete permissions this connection needs."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tables.list","description":"List every table the database token can access and its granted permissions.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"fields.list","description":"List field definitions for a table.","parameters":{"type":"object","properties":{"tableId":{"type":"integer","description":"Baserow table id."}},"required":["tableId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"fields.create","description":"Create a field using a provider-native field definition.","parameters":{"type":"object","properties":{"tableId":{"type":"integer","description":"Baserow table id."},"field":{"type":"object","description":"Field definition containing at least name and type."}},"required":["tableId","field"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"rows.list","description":"List, search, filter, and order rows using human-readable field names.","parameters":{"type":"object","properties":{"tableId":{"type":"integer","description":"Baserow table id."},"page":{"type":"integer","minimum":1},"size":{"type":"integer","minimum":1,"maximum":200},"search":{"type":"string"},"orderBy":{"type":"string","description":"Comma-separated field names, prefixed with - for descending."},"filters":{"type":"string","description":"JSON-serialized Baserow filter tree."},"filterType":{"type":"string","enum":["AND","OR"]},"include":{"type":"string","description":"Comma-separated field names to include."},"exclude":{"type":"string","description":"Comma-separated field names to exclude."},"viewId":{"type":"integer"}},"required":["tableId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rows.get","description":"Read one row using human-readable field names.","parameters":{"type":"object","properties":{"tableId":{"type":"integer","description":"Baserow table id."},"rowId":{"type":"integer","description":"Baserow row id."}},"required":["tableId","rowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rows.create","description":"Create one row using human-readable field names.","parameters":{"type":"object","properties":{"tableId":{"type":"integer","description":"Baserow table id."},"fields":{"type":"object","description":"Field-name to value map."},"beforeRowId":{"type":"integer"},"sendWebhookEvents":{"type":"boolean"}},"required":["tableId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"rows.update","description":"Update one row using human-readable field names.","parameters":{"type":"object","properties":{"tableId":{"type":"integer","description":"Baserow table id."},"rowId":{"type":"integer","description":"Baserow row id."},"fields":{"type":"object","description":"Field-name to value map."},"sendWebhookEvents":{"type":"boolean"}},"required":["tableId","rowId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"rows.delete","description":"Delete one row.","parameters":{"type":"object","properties":{"tableId":{"type":"integer","description":"Baserow table id."},"rowId":{"type":"integer","description":"Baserow row id."},"sendWebhookEvents":{"type":"boolean"}},"required":["tableId","rowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"rows.batch-create","description":"Create up to 200 rows in one request.","parameters":{"type":"object","properties":{"tableId":{"type":"integer","description":"Baserow table id."},"items":{"type":"array","minItems":1,"maxItems":200,"items":{"type":"object"}},"beforeRowId":{"type":"integer"},"sendWebhookEvents":{"type":"boolean"}},"required":["tableId","items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"rows.batch-update","description":"Update up to 200 rows; each item must include its id.","parameters":{"type":"object","properties":{"tableId":{"type":"integer","description":"Baserow table id."},"items":{"type":"array","minItems":1,"maxItems":200,"items":{"type":"object"}},"sendWebhookEvents":{"type":"boolean"}},"required":["tableId","items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"rows.batch-delete","description":"Delete multiple rows by id.","parameters":{"type":"object","properties":{"tableId":{"type":"integer","description":"Baserow table id."},"rowIds":{"type":"array","minItems":1,"items":{"type":"integer"}},"sendWebhookEvents":{"type":"boolean"}},"required":["tableId","rowIds"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"rows.move","description":"Move a row before another row, or to the end when beforeRowId is omitted.","parameters":{"type":"object","properties":{"tableId":{"type":"integer","description":"Baserow table id."},"rowId":{"type":"integer","description":"Baserow row id."},"beforeRowId":{"type":"integer"},"sendWebhookEvents":{"type":"boolean"}},"required":["tableId","rowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"beamer","displayName":"Beamer","description":"Publish announcement posts, raise and vote on feature requests, and comment on feedback in a Beamer workspace.","auth":{"kind":"api-key","hint":"Beamer workspace REST API key. Generate one from Beamer dashboard → Settings → REST API."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"posts.query","description":"List announcement posts in the workspace, newest first.","parameters":{"type":"object","properties":{"maxResults":{"type":"integer","description":"Max number of posts (Beamer caps at 100)."},"cursor":{"type":"string","description":"Pagination cursor returned by a previous call."},"filter":{"type":"string","description":"Optional category / status filter expression."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"posts.get","description":"Read a single announcement post by id.","parameters":{"type":"object","properties":{"postId":{"type":"string"}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"featureRequests.query","description":"List feature requests on the workspace feedback board.","parameters":{"type":"object","properties":{"maxResults":{"type":"integer"},"cursor":{"type":"string"},"status":{"type":"string","description":"Filter by status id (open, planned, in-progress, done, …)."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"featureRequests.get","description":"Read a single feature request by id.","parameters":{"type":"object","properties":{"featureRequestId":{"type":"string"}},"required":["featureRequestId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"comments.create","description":"Post a comment on a feature request. Activepieces action: createComment. Either userId or userEmail identifies the author.","parameters":{"type":"object","properties":{"featureRequestId":{"type":"string","description":"Id of the feature request to comment on."},"text":{"type":"string","description":"Comment body."},"userId":{"type":"string","description":"Beamer user id of the author."},"userEmail":{"type":"string","description":"Email of the author if userId is not known."},"userFirstname":{"type":"string","description":"Optional display first name."}},"required":["featureRequestId","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"featureRequests.create","description":"Create a new feature request on the Beamer feedback board. Activepieces action: createNewFeatureRequest.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"Feature-request title."},"content":{"type":"string","description":"Long-form description / body."},"category":{"type":"string","description":"Category id for the request."},"status":{"type":"string","description":"Status id (open, planned, …)."},"requestedby":{"type":"string","description":"Email of the user requesting the feature."},"userFirstname":{"type":"string"}},"required":["title","content","requestedby"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.create","description":"Publish an announcement post in the Beamer workspace. Activepieces action: createBeamerPost.","parameters":{"type":"object","properties":{"title":{"type":"string"},"content":{"type":"string","description":"Post body — plain text or markdown depending on md flag."},"md":{"type":"boolean","description":"true if content is markdown, false if plain text."},"category":{"type":"string"},"visible":{"type":"string","description":"public | private | scheduled"},"showInWidget":{"type":"boolean"},"showInStandalone":{"type":"boolean"},"enableFeedback":{"type":"boolean"},"enableReactions":{"type":"boolean"},"enableSocialShare":{"type":"boolean"},"autoOpen":{"type":"boolean"},"sendPushNotification":{"type":"boolean"}},"required":["title","content","category","visible"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"votes.create","description":"Cast a vote on a feature request. Activepieces action: createVote. Vote attribution requires userId or userEmail.","parameters":{"type":"object","properties":{"featureRequestId":{"type":"string","description":"Id of the feature request being voted on."},"userId":{"type":"string"},"userEmail":{"type":"string"},"userFirstname":{"type":"string"}},"required":["featureRequestId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.update","description":"Edit a published announcement post. Pass only the fields you wish to change; omitted fields are left untouched.","parameters":{"type":"object","properties":{"postId":{"type":"string","description":"Id of the post to update."},"title":{"type":"string"},"content":{"type":"string"},"md":{"type":"boolean"},"category":{"type":"string"},"visible":{"type":"string","description":"public | private | scheduled"},"showInWidget":{"type":"boolean"},"showInStandalone":{"type":"boolean"},"enableFeedback":{"type":"boolean"},"enableReactions":{"type":"boolean"},"enableSocialShare":{"type":"boolean"},"autoOpen":{"type":"boolean"}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.delete","description":"Delete an announcement post.","parameters":{"type":"object","properties":{"postId":{"type":"string","description":"Id of the post to delete."}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.delete","description":"Delete a comment on a feature request.","parameters":{"type":"object","properties":{"featureRequestId":{"type":"string","description":"Id of the feature request."},"commentId":{"type":"string","description":"Id of the comment to delete."}},"required":["featureRequestId","commentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"featureRequests.update","description":"Update an existing feature request (title, content, category, status). Pass only the fields you wish to change.","parameters":{"type":"object","properties":{"featureRequestId":{"type":"string","description":"Id of the feature request to update."},"title":{"type":"string"},"content":{"type":"string"},"category":{"type":"string"},"status":{"type":"string"}},"required":["featureRequestId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"beehiiv","displayName":"Beehiiv","description":"Manage subscriptions, automations, and posts in Beehiiv.","auth":{"kind":"api-key","hint":"Beehiiv API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"subscriptions.create","description":"Create a subscription in Beehiiv.","parameters":{"type":"object","properties":{"publication_id":{"type":"string"},"email":{"type":"string"},"double_opt_override":{"type":"boolean"},"reactivate_existing":{"type":"boolean"},"send_welcome_email":{"type":"boolean"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"referring_site":{"type":"string"},"referral_code":{"type":"string"},"tier":{"type":"string"},"stripe_customer_id":{"type":"string"}},"required":["publication_id","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.update","description":"Update a subscription in Beehiiv.","parameters":{"type":"object","properties":{"subscription_id":{"type":"string"},"email":{"type":"string"},"tier":{"type":"string"},"unsubscribe":{"type":"boolean"},"stripe_customer_id":{"type":"string"}},"required":["subscription_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"automations.list","description":"List automations in a publication.","parameters":{"type":"object","properties":{"publication_id":{"type":"string"},"limit":{"type":"integer"},"page":{"type":"integer"},"expand":{"type":"string"}},"required":["publication_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.add.to.automation","description":"Add a subscription to an automation.","parameters":{"type":"object","properties":{"automation_id":{"type":"string"},"subscription_id":{"type":"string"}},"required":["automation_id","subscription_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.list","description":"List posts in a publication.","parameters":{"type":"object","properties":{"publication_id":{"type":"string"},"platform":{"type":"string"},"status":{"type":"string"},"limit":{"type":"integer"},"page":{"type":"integer"},"content_tags":{"type":"object"}},"required":["publication_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.delete","description":"Unsubscribe and remove a subscriber from a publication. Hard-deletes the subscription record.","parameters":{"type":"object","properties":{"publication_id":{"type":"string"},"subscription_id":{"type":"string"}},"required":["publication_id","subscription_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.create","description":"Draft a new post in a Beehiiv publication.","parameters":{"type":"object","properties":{"publication_id":{"type":"string"},"title":{"type":"string"},"subtitle":{"type":"string"},"body_content":{"type":"string","description":"HTML or markdown body, depending on publication configuration."},"status":{"type":"string","description":"draft | scheduled | confirmed (default: draft)."},"audience":{"type":"string","description":"free | premium | all"},"platform":{"type":"string","description":"web | email | both"}},"required":["publication_id","title","body_content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.publish","description":"Publish a previously drafted Beehiiv post.","parameters":{"type":"object","properties":{"publication_id":{"type":"string"},"post_id":{"type":"string"}},"required":["publication_id","post_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"segments.create","description":"Create a subscriber segment under a publication.","parameters":{"type":"object","properties":{"publication_id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","description":"dynamic | static — controls whether the segment is recomputed."},"filters":{"type":"object","description":"Beehiiv segment filter expression."}},"required":["publication_id","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"bettercontact","displayName":"BetterContact","description":"Waterfall email and phone enrichment that queries 20+ data providers to find a contact's work email and direct phone number.","auth":{"kind":"api-key","hint":"API key from the BetterContact dashboard (Settings -> API). Sent as the X-API-Key header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"enrichment.create","description":"Start an asynchronous waterfall enrichment for 1-100 contacts to find work emails and/or direct phone numbers. Consumes credits per found data point.","parameters":{"type":"object","properties":{"data":{"type":"array","description":"Array of 1-100 lead objects to enrich; each supports first_name, last_name, company, company_domain, linkedin_url, and custom_fields.","items":{"type":"object"}},"enrich_email_address":{"type":"boolean","description":"If true, enrich the work email address."},"enrich_phone_number":{"type":"boolean","description":"If true, enrich the direct phone number."},"webhook":{"type":"string","description":"Optional URL to which results are pushed when enrichment completes."}},"required":["data","enrich_email_address","enrich_phone_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"enrichment.get","description":"Retrieve the status and enriched results of a previously submitted enrichment request by its request id.","parameters":{"type":"object","properties":{"request_id":{"type":"string","description":"The id returned by enrichment.create."}},"required":["request_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"bettermode","displayName":"Bettermode","description":"Assign or revoke member badges and create discussions or questions in a Bettermode community.","auth":{"kind":"api-key","hint":"Bettermode member access token (Bearer)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"badge.assign","description":"Assign a badge to a member identified by email.","parameters":{"type":"object","properties":{"badgeId":{"type":"string"},"email":{"type":"string"}},"required":["badgeId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"badge.revoke","description":"Revoke a previously assigned badge from a member.","parameters":{"type":"object","properties":{"badgeId":{"type":"string"},"email":{"type":"string"}},"required":["badgeId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"discussion.create","description":"Create a discussion post in a Bettermode space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"title":{"type":"string"},"content":{"type":"string"},"tagNames":{"type":"array","items":{"type":"string"}},"locked":{"type":"boolean"}},"required":["spaceId","title","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"question.create","description":"Create a question post in a Bettermode space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"title":{"type":"string"},"content":{"type":"string"},"tagNames":{"type":"array","items":{"type":"string"}},"locked":{"type":"boolean"}},"required":["spaceId","title","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"discussion.update","description":"Edit an existing discussion post (title and/or content).","parameters":{"type":"object","properties":{"postId":{"type":"string","description":"Bettermode post id to update."},"title":{"type":"string"},"content":{"type":"string"}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"discussion.delete","description":"Delete a discussion post.","parameters":{"type":"object","properties":{"postId":{"type":"string","description":"Bettermode post id to delete."}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"member.invite","description":"Invite a new community member by email.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email of the member to invite."},"roleId":{"type":"string","description":"Role to assign on accept (optional)."},"spaceIds":{"type":"array","items":{"type":"string"},"description":"Spaces the invited member should be added to (optional)."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"reply.create","description":"Post a reply to a discussion or question post.","parameters":{"type":"object","properties":{"postId":{"type":"string","description":"Id of the parent discussion/question being replied to."},"content":{"type":"string","description":"Reply body."}},"required":["postId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"bexio","displayName":"Bexio","description":"Swiss business software for accounting, invoicing, contacts, products, projects, and time tracking.","auth":{"kind":"oauth2","authorizationUrl":"https://idp.bexio.com/authorize","tokenUrl":"https://idp.bexio.com/token","scopes":["openid","profile","offline_access","accounting","contact_show","contact_edit","article_show","article_edit","kb_invoice_show","kb_invoice_edit","kb_order_show","kb_order_edit","kb_offer_show","kb_offer_edit","project_show","project_edit","monitoring_show","monitoring_edit","file_show","file_edit"],"clientIdEnv":"BEXIO_OAUTH_CLIENT_ID","clientSecretEnv":"BEXIO_OAUTH_CLIENT_SECRET"},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.manual.entry","description":"Post a manual accounting entry (journal voucher) with one or more debit/credit lines.","parameters":{"type":"object","properties":{"type":{"type":"string","description":"Entry type, e.g. \"manual_single_entry\"."},"date":{"type":"string","description":"ISO-8601 booking date."},"reference_nr":{"type":"string"},"entries":{"type":"array","description":"Array of voucher lines (debit_account_id, credit_account_id, amount, tax_id, description, currency_id).","items":{"type":"object"}}},"required":["type","date","entries"]},"requiredScopes":["accounting"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.company","description":"Create a company contact (contact_type_id=2).","parameters":{"type":"object","properties":{"name_1":{"type":"string","description":"Company name."},"name_2":{"type":"string"},"address":{"type":"string"},"postcode":{"type":"string"},"city":{"type":"string"},"country_id":{"type":"integer"},"mail":{"type":"string"},"phone_fixed":{"type":"string"},"user_id":{"type":"integer"},"owner_id":{"type":"integer"}},"required":["name_1","user_id","owner_id"]},"requiredScopes":["contact_edit"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.company","description":"Partially update a company contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"integer"},"patch":{"type":"object","description":"Subset of contact fields to overwrite."}},"required":["contactId","patch"]},"requiredScopes":["contact_edit"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.person","description":"Create a person contact (contact_type_id=1).","parameters":{"type":"object","properties":{"name_1":{"type":"string","description":"Last name."},"name_2":{"type":"string","description":"First name."},"salutation_id":{"type":"integer"},"mail":{"type":"string"},"phone_fixed":{"type":"string"},"phone_mobile":{"type":"string"},"address":{"type":"string"},"postcode":{"type":"string"},"city":{"type":"string"},"country_id":{"type":"integer"},"contact_group_ids":{"type":"string"},"user_id":{"type":"integer"},"owner_id":{"type":"integer"}},"required":["name_1","user_id","owner_id"]},"requiredScopes":["contact_edit"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.person","description":"Partially update a person contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"integer"},"patch":{"type":"object"}},"required":["contactId","patch"]},"requiredScopes":["contact_edit"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.file","description":"Upload a file to the Bexio file store. Body should be a multipart payload reference.","parameters":{"type":"object","properties":{"file":{"type":"object","description":"Multipart file payload (name, content)."}},"required":["file"]},"requiredScopes":["file_edit"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.sales.invoice","description":"Create a sales invoice (kb_invoice) with one or more positions.","parameters":{"type":"object","properties":{"contact_id":{"type":"integer"},"user_id":{"type":"integer"},"logopaper_id":{"type":"integer"},"language_id":{"type":"integer"},"bank_account_id":{"type":"integer"},"currency_id":{"type":"integer"},"payment_type_id":{"type":"integer"},"header":{"type":"string"},"footer":{"type":"string"},"mwst_type":{"type":"integer"},"mwst_is_net":{"type":"boolean"},"positions":{"type":"array","items":{"type":"object"}}},"required":["contact_id","user_id","positions"]},"requiredScopes":["kb_invoice_edit"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"export.invoice.pdf","description":"Render a sales invoice as PDF.","parameters":{"type":"object","properties":{"invoiceId":{"type":"integer"}},"required":["invoiceId"]},"requiredScopes":["kb_invoice_show"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"send.sales.invoice","description":"Send a sales invoice by email.","parameters":{"type":"object","properties":{"invoiceId":{"type":"integer"},"recipient_email":{"type":"string"},"subject":{"type":"string"},"message":{"type":"string"},"mark_as_open":{"type":"boolean"},"attach_pdf":{"type":"boolean"}},"required":["invoiceId","recipient_email"]},"requiredScopes":["kb_invoice_edit"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.product","description":"Create an article (product) in Bexio.","parameters":{"type":"object","properties":{"intern_name":{"type":"string"},"intern_code":{"type":"string"},"intern_description":{"type":"string"},"purchase_price":{"type":"string"},"sale_price":{"type":"string"},"purchase_total":{"type":"string"},"sale_total":{"type":"string"},"currency_id":{"type":"integer"},"tax_income_id":{"type":"integer"},"tax_id":{"type":"integer"},"tax_consideration":{"type":"boolean"},"user_id":{"type":"integer"},"article_type_id":{"type":"integer"}},"required":["intern_name","user_id"]},"requiredScopes":["article_edit"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.product","description":"Partially update an article by id.","parameters":{"type":"object","properties":{"articleId":{"type":"integer"},"patch":{"type":"object"}},"required":["articleId","patch"]},"requiredScopes":["article_edit"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.sales.order","description":"Create a sales order (kb_order).","parameters":{"type":"object","properties":{"contact_id":{"type":"integer"},"user_id":{"type":"integer"},"logopaper_id":{"type":"integer"},"language_id":{"type":"integer"},"currency_id":{"type":"integer"},"header":{"type":"string"},"footer":{"type":"string"},"mwst_type":{"type":"integer"},"mwst_is_net":{"type":"boolean"},"positions":{"type":"array","items":{"type":"object"}}},"required":["contact_id","user_id","positions"]},"requiredScopes":["kb_order_edit"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.project","description":"Create a project.","parameters":{"type":"object","properties":{"name":{"type":"string"},"contact_id":{"type":"integer"},"user_id":{"type":"integer"},"pr_state_id":{"type":"integer"},"pr_project_type_id":{"type":"integer"},"pr_invoice_type_id":{"type":"integer"},"start_date":{"type":"string"},"end_date":{"type":"string"},"comment":{"type":"string"}},"required":["name","user_id"]},"requiredScopes":["project_edit"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.sales.quote","description":"Create a sales quote / offer (kb_offer).","parameters":{"type":"object","properties":{"contact_id":{"type":"integer"},"user_id":{"type":"integer"},"logopaper_id":{"type":"integer"},"language_id":{"type":"integer"},"currency_id":{"type":"integer"},"header":{"type":"string"},"footer":{"type":"string"},"mwst_type":{"type":"integer"},"mwst_is_net":{"type":"boolean"},"positions":{"type":"array","items":{"type":"object"}}},"required":["contact_id","user_id","positions"]},"requiredScopes":["kb_offer_edit"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.time.tracking","description":"Create a timesheet entry.","parameters":{"type":"object","properties":{"user_id":{"type":"integer"},"status_id":{"type":"integer"},"client_service_id":{"type":"integer"},"contact_id":{"type":"integer"},"pr_project_id":{"type":"integer"},"text":{"type":"string"},"allowable_bill":{"type":"boolean"},"tracking":{"type":"object","description":"Tracking range or duration (type=duration|range with date/duration or date_start/date_end)."}},"required":["user_id","tracking"]},"requiredScopes":["monitoring_edit"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"find.account","description":"List ledger accounts; supports server-side search via the search payload.","parameters":{"type":"object","properties":{"search":{"type":"array","items":{"type":"object"},"description":"Bexio search expressions on field/value/criteria."},"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":["accounting"],"class":"read"},{"name":"find.company","description":"Search contacts filtered to companies (contact_type_id=2).","parameters":{"type":"object","properties":{"search":{"type":"array","items":{"type":"object"}},"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":["contact_show"],"class":"read"},{"name":"find.person","description":"Search contacts filtered to persons (contact_type_id=1).","parameters":{"type":"object","properties":{"search":{"type":"array","items":{"type":"object"}},"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":["contact_show"],"class":"read"},{"name":"find.product","description":"Search articles (products) by intern_code, intern_name, or other fields.","parameters":{"type":"object","properties":{"search":{"type":"array","items":{"type":"object"}},"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":["article_show"],"class":"read"},{"name":"find.country","description":"List or search countries by name or ISO code.","parameters":{"type":"object","properties":{"search":{"type":"array","items":{"type":"object"}},"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.invoice","description":"Search sales invoices (kb_invoice) by document_nr, title, contact_id, etc.","parameters":{"type":"object","properties":{"search":{"type":"array","items":{"type":"object"}},"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":["kb_invoice_show"],"class":"read"},{"name":"search.order","description":"Search sales orders (kb_order).","parameters":{"type":"object","properties":{"search":{"type":"array","items":{"type":"object"}},"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":["kb_order_show"],"class":"read"},{"name":"search.quote","description":"Search sales quotes / offers (kb_offer).","parameters":{"type":"object","properties":{"search":{"type":"array","items":{"type":"object"}},"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":["kb_offer_show"],"class":"read"}]},{"kind":"bigcommerce","displayName":"BigCommerce","description":"Search and update BigCommerce catalog products and orders for a connected storefront.","auth":{"kind":"oauth2","authorizationUrl":"https://login.bigcommerce.com/oauth2/authorize","tokenUrl":"https://login.bigcommerce.com/oauth2/token","scopes":["store_v2_products","store_v2_orders","store_v2_customers_read_only","store_v2_information_read_only"],"clientIdEnv":"BIGCOMMERCE_OAUTH_CLIENT_ID","clientSecretEnv":"BIGCOMMERCE_OAUTH_CLIENT_SECRET"},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"products.search","description":"Search catalog products with optional name/SKU/category filters and pagination.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Partial product name match (uses BigCommerce :like)."},"sku":{"type":"string"},"categories":{"type":"string","description":"Comma-separated category ids (maps to BigCommerce categories:in)."},"is_visible":{"type":"boolean"},"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1,"maximum":250},"include":{"type":"string","description":"Comma-separated sub-resources, e.g. variants,images."}}},"requiredScopes":["store_v2_products"],"class":"read"},{"name":"products.get","description":"Read a single catalog product by id.","parameters":{"type":"object","properties":{"productId":{"type":"integer"},"include":{"type":"string","description":"Comma-separated sub-resources, e.g. variants,images,custom_fields."}},"required":["productId"]},"requiredScopes":["store_v2_products"],"class":"read"},{"name":"products.create","description":"Create a catalog product. Required fields: name, type, weight, price.","parameters":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["physical","digital"]},"weight":{"type":"number"},"price":{"type":"number"},"sku":{"type":"string"},"description":{"type":"string"},"categories":{"type":"array","items":{"type":"integer"}},"inventory_level":{"type":"integer"},"is_visible":{"type":"boolean"}},"required":["name","type","weight","price"]},"requiredScopes":["store_v2_products"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.update","description":"Patch a catalog product. Only the supplied fields are updated.","parameters":{"type":"object","properties":{"productId":{"type":"integer"},"fields":{"type":"object","description":"Partial product payload to merge."}},"required":["productId","fields"]},"requiredScopes":["store_v2_products"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.search","description":"List orders with optional status / date / customer filters.","parameters":{"type":"object","properties":{"status_id":{"type":"integer","description":"BigCommerce order status id (e.g. 11 Awaiting Fulfillment)."},"customer_id":{"type":"integer"},"min_date_created":{"type":"string","description":"RFC 2822 date string."},"max_date_created":{"type":"string","description":"RFC 2822 date string."},"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1,"maximum":250}}},"requiredScopes":["store_v2_orders"],"class":"read"},{"name":"orders.get","description":"Read a single order by id.","parameters":{"type":"object","properties":{"orderId":{"type":"integer"}},"required":["orderId"]},"requiredScopes":["store_v2_orders"],"class":"read"},{"name":"orders.update","description":"Update an existing order (status, staff notes, etc.).","parameters":{"type":"object","properties":{"orderId":{"type":"integer"},"fields":{"type":"object","description":"Partial order payload, e.g. { status_id: 10, staff_notes: \"...\" }."}},"required":["orderId","fields"]},"requiredScopes":["store_v2_orders"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.refund","description":"Issue a refund on an order via Payment Actions.","parameters":{"type":"object","properties":{"orderId":{"type":"integer"},"items":{"type":"array","description":"Refund line items: [{ item_id, item_type, quantity, amount?, reason? }, ...].","items":{"type":"object"}},"memo":{"type":"string","description":"Internal memo attached to the refund."}},"required":["orderId","items","memo"]},"requiredScopes":["store_v2_orders"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.delete","description":"Delete a catalog product by id.","parameters":{"type":"object","properties":{"productId":{"type":"integer"}},"required":["productId"]},"requiredScopes":["store_v2_products"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.create","description":"Create one or more customer records (BigCommerce v3 batches single creates as an array).","parameters":{"type":"object","properties":{"customers":{"type":"array","description":"Array of customer payloads; each at minimum requires email + first_name + last_name.","items":{"type":"object"}}},"required":["customers"]},"requiredScopes":["store_v2_customers_read_only"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.update","description":"Update one or more customer records by id (v3 batched PUT).","parameters":{"type":"object","properties":{"customers":{"type":"array","description":"Array of partial customer payloads; each entry MUST include the customer id.","items":{"type":"object"}}},"required":["customers"]},"requiredScopes":["store_v2_customers_read_only"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"bigin-by-zoho","displayName":"Bigin by Zoho CRM","description":"Manage Bigin by Zoho CRM: read and write companies, contacts, deals (pipeline records), tasks, calls, events, and search products and users.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.zoho.com/oauth/v2/auth","tokenUrl":"https://accounts.zoho.com/oauth/v2/token","scopes":["ZohoBigin.modules.ALL","ZohoBigin.users.READ","ZohoBigin.settings.READ"],"scopeSeparator":",","clientIdEnv":"BIGIN_BY_ZOHO_OAUTH_CLIENT_ID","clientSecretEnv":"BIGIN_BY_ZOHO_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent"},"tokenMetadata":{"apiDomain":{"field":"api_domain","required":true}}},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.search","description":"Search records in any Bigin module (Pipelines, Accounts, Contacts, Products) by criteria, email, phone, or free-text word.","parameters":{"type":"object","properties":{"module":{"type":"string","description":"Bigin module API name. Common values: Accounts (Companies), Contacts, Tasks, Calls, Events, Pipelines, Products."},"criteria":{"type":"string","description":"Zoho criteria syntax, e.g. (Last_Name:equals:Smith)"},"email":{"type":"string"},"phone":{"type":"string"},"word":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":200}},"required":["module"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"read"},{"name":"users.search","description":"List users in the Bigin org. Filter via the `type` query (e.g. ActiveUsers, AdminUsers, CurrentUser).","parameters":{"type":"object","properties":{"type":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":200}}},"requiredScopes":["ZohoBigin.users.READ"],"class":"read"},{"name":"company.create","description":"Create one or more companies (Accounts module). Batches up to 100 per call.","parameters":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Bigin v2 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["data"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"company.update","description":"Update an existing company by record id.","parameters":{"type":"object","properties":{"recordId":{"type":"string"},"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Bigin v2 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["recordId","data"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contact.create","description":"Create one or more contacts. Batches up to 100 per call.","parameters":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Bigin v2 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["data"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contact.update","description":"Update an existing contact by record id.","parameters":{"type":"object","properties":{"recordId":{"type":"string"},"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Bigin v2 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["recordId","data"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"task.create","description":"Create one or more tasks.","parameters":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Bigin v2 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["data"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"task.update","description":"Update an existing task by record id.","parameters":{"type":"object","properties":{"recordId":{"type":"string"},"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Bigin v2 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["recordId","data"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"call.create","description":"Log one or more calls.","parameters":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Bigin v2 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["data"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"event.create","description":"Create one or more calendar events.","parameters":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Bigin v2 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["data"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"event.update","description":"Update an existing calendar event by record id.","parameters":{"type":"object","properties":{"recordId":{"type":"string"},"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Bigin v2 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["recordId","data"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"pipeline.record.create","description":"Create one or more pipeline records (deals). Bigin maps deals to the Pipelines module.","parameters":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Bigin v2 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["data"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pipeline.record.update","description":"Update an existing pipeline record by record id.","parameters":{"type":"object","properties":{"recordId":{"type":"string"},"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Bigin v2 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["recordId","data"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"bika","displayName":"Bika.ai","description":"Interactive spreadsheets with collaboration. Create, find, update, and delete records.","auth":{"kind":"api-key","hint":"Bika API token."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.create","description":"Create a new record in Bika.","parameters":{"type":"object","properties":{"data":{"type":"object"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.find","description":"Find records in Bika with optional filtering and pagination.","parameters":{"type":"object","properties":{"filter":{"type":"string"},"maxRecords":{"type":"integer"},"pageSize":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.get","description":"Get a specific record by ID.","parameters":{"type":"object","properties":{"recordId":{"type":"string"}},"required":["recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.update","description":"Update an existing record.","parameters":{"type":"object","properties":{"recordId":{"type":"string"},"data":{"type":"object"}},"required":["recordId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.delete","description":"Delete a record by ID.","parameters":{"type":"object","properties":{"recordId":{"type":"string"}},"required":["recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.batchCreate","description":"Create multiple records in one call.","parameters":{"type":"object","properties":{"records":{"type":"array","description":"Array of record payloads, each shaped like { fields: { ... } }.","items":{"type":"object"}}},"required":["records"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.batchUpdate","description":"Update multiple records in one call.","parameters":{"type":"object","properties":{"records":{"type":"array","description":"Array of record updates, each shaped like { id, fields: { ... } }.","items":{"type":"object"}}},"required":["records"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tables.create","description":"Create a table in a workspace.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"name":{"type":"string"},"fields":{"type":"array","description":"Initial column / field definitions for the table.","items":{"type":"object"}}},"required":["workspaceId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"bill-com","displayName":"BILL","description":"Read vendors, bills, payments, and chart-of-account records through the BILL API v3.","auth":{"kind":"api-key","hint":"JSON credential bundle: {\"developerKey\":\"...\",\"sessionId\":\"...\"}."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"vendors.list","description":"List vendors.","parameters":{"type":"object","properties":{"max":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bills.list","description":"List accounts-payable bills.","parameters":{"type":"object","properties":{"max":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"payments.list","description":"List payments.","parameters":{"type":"object","properties":{"max":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"chart-of-accounts.list","description":"List chart-of-account records.","parameters":{"type":"object","properties":{"max":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"billplz","displayName":"Billplz","description":"Create and retrieve Billplz bills for Malaysian Ringgit payment collection.","auth":{"kind":"api-key","hint":"Billplz API key from Settings → Account Settings. Used as the HTTP Basic username with an empty password."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.bill","description":"Create a Billplz bill in a collection and (optionally) trigger delivery to the recipient.","parameters":{"type":"object","properties":{"collection_id":{"type":"string","description":"Collection identifier that will own the new bill."},"email":{"type":"string","description":"Recipient email address (required if mobile is omitted)."},"mobile":{"type":"string","description":"Recipient mobile number with country code (required if email is omitted)."},"name":{"type":"string","description":"Name of the bill recipient as displayed on the bill."},"amount":{"type":"integer","description":"Amount in sen (1/100 of a Ringgit). E.g. 200 represents RM 2.00."},"description":{"type":"string","description":"Bill description rendered on the payment page."},"callback_url":{"type":"string","description":"Webhook URL Billplz will POST to on payment state changes."},"due_at":{"type":"string","description":"Due date in YYYY-MM-DD format. Defaults to today when omitted."},"redirect_url":{"type":"string","description":"URL the payer is redirected to after completing payment."},"deliver":{"type":"boolean","description":"If true, Billplz emails/SMSes the bill link to the recipient."},"reference_1_label":{"type":"string","description":"Label for the first custom reference field."},"reference_1":{"type":"string","description":"Value for the first custom reference field."},"reference_2_label":{"type":"string","description":"Label for the second custom reference field."},"reference_2":{"type":"string","description":"Value for the second custom reference field."}},"required":["collection_id","name","amount","description","callback_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.bill","description":"Fetch a Billplz bill by its identifier, including current payment state.","parameters":{"type":"object","properties":{"bill_id":{"type":"string","description":"Billplz bill identifier returned by create.bill."}},"required":["bill_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cancel.bill","description":"Delete (cancel) an unpaid Billplz bill by its identifier. Paid bills cannot be deleted and the upstream will reject the request.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Billplz bill identifier to cancel."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.refund","description":"Refund a paid Billplz bill in full or in part. Amount is in sen (1/100 of a Ringgit) and must not exceed the original paid amount.","parameters":{"type":"object","properties":{"bill_id":{"type":"string","description":"Identifier of the paid bill being refunded."},"amount":{"type":"integer","description":"Refund amount in sen (1/100 of a Ringgit). E.g. 200 represents RM 2.00."},"reason":{"type":"string","description":"Reason recorded on the refund for audit/reporting."}},"required":["bill_id","amount","reason"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"bitly","displayName":"Bitly","description":"URL shortening and link management platform with analytics.","auth":{"kind":"api-key","hint":"Bitly access token (used as Bearer credentials)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"bitlink.get","description":"Get details for a Bitlink.","parameters":{"type":"object","properties":{"bitlink":{"type":"string"}},"required":["bitlink"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bitlink.create","description":"Shorten a long URL into a Bitlink.","parameters":{"type":"object","properties":{"long_url":{"type":"string"},"domain":{"type":"string"},"group_guid":{"type":"string"},"title":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"deeplinks":{"type":"array","items":{"type":"object"}}},"required":["long_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bitlink.update","description":"Update title, tags, archival state, or deeplinks on a Bitlink.","parameters":{"type":"object","properties":{"bitlink":{"type":"string"},"title":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"archived":{"type":"boolean"},"deeplinks":{"type":"array","items":{"type":"object"}}},"required":["bitlink"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"bitlink.archive","description":"Archive a Bitlink (Bitly has no hard delete; archival is the destructive op).","parameters":{"type":"object","properties":{"bitlink":{"type":"string"}},"required":["bitlink"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"qr.create","description":"Create a QR code for a destination URL or existing Bitlink.","parameters":{"type":"object","properties":{"group_guid":{"type":"string"},"destination":{"type":"object"},"render_customizations":{"type":"object"},"title":{"type":"string"},"archived":{"type":"boolean"}},"required":["group_guid","destination"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bitlink.delete","description":"Soft-delete (archive permanently) a Bitlink.","parameters":{"type":"object","properties":{"bitlink":{"type":"string"}},"required":["bitlink"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"group.update","description":"Update group display name.","parameters":{"type":"object","properties":{"group_guid":{"type":"string"},"name":{"type":"string"}},"required":["group_guid","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"qr.delete","description":"Delete a generated QR code.","parameters":{"type":"object","properties":{"qrcode_id":{"type":"string"}},"required":["qrcode_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"bland-ai","displayName":"Bland AI","description":"AI phone calling platform for outbound and conversational voice workflows.","auth":{"kind":"api-key","hint":"Bland AI API key, sent in the Authorization header."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.send","description":"Place an outbound AI phone call. Either a Task or a Pathway ID must be supplied; Pathway overrides Task when both are present.","parameters":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"Destination phone number in E.164 format (e.g. +12223334444), country code required."},"task":{"type":"string","description":"Instructions for the AI agent — what it should say, ask, or accomplish during the call."},"pathwayId":{"type":"string","description":"UUID of a pre-built Pathway from the Bland AI dashboard. Overrides task when present."},"fromNumber":{"type":"string","description":"Optional origin phone number."},"firstSentence":{"type":"string","description":"Exact opening line the agent will say when the call is answered."},"voice":{"type":"string","description":"Bland AI preset voice identifier."},"model":{"type":"string","description":"Bland AI model identifier."},"language":{"type":"string","description":"Language code for transcription and speech (e.g. en, es)."},"maxDuration":{"type":"integer","description":"Maximum call length in minutes; the call ends automatically after this time. Defaults to 30."},"waitForGreeting":{"type":"boolean","description":"When true, the AI waits for the recipient to speak first before responding."},"record":{"type":"boolean","description":"When true, the call is recorded; the recording URL is included in the post-call data."},"transferPhoneNumber":{"type":"string","description":"E.164 phone number to transfer the call to when the AI hands off."},"webhook":{"type":"string","description":"URL that receives a POST request with full call data after the call ends."},"summaryPrompt":{"type":"string","description":"Custom instructions for the post-call summary (max 2000 characters)."}},"required":["phoneNumber"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.get","description":"Fetch the full record for a single call by its Bland AI call ID.","parameters":{"type":"object","properties":{"callId":{"type":"string","description":"The Bland AI call identifier."}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.list","description":"List recent calls, optionally filtered by origin or destination number.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of calls to return."},"fromNumber":{"type":"string","description":"Filter by origin phone number."},"toNumber":{"type":"string","description":"Filter by destination phone number."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.cancel","description":"Cancel a queued outbound call.","parameters":{"type":"object","properties":{"callId":{"type":"string","description":"The Bland AI call identifier."}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.stop","description":"Force-end an in-progress call.","parameters":{"type":"object","properties":{"callId":{"type":"string","description":"The Bland AI call identifier."}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pathways.create","description":"Create a conversational pathway.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Pathway display name."},"description":{"type":"string","description":"Free-form description."},"nodes":{"type":"array","items":{"type":"object"},"description":"Pathway state nodes."},"edges":{"type":"array","items":{"type":"object"},"description":"Transitions between nodes."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"bluesky","displayName":"Bluesky","description":"Read and write to the AT Protocol network (Bluesky and self-hosted PDS instances): create / like / repost posts, search timeline + author feeds, and resolve thread context.","auth":{"kind":"api-key","hint":"Bluesky identifier (handle or email) and app password exchanged for an access JWT via com.atproto.server.createSession on the configured PDS host (default https://bsky.social)."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.post","description":"Create a new post (app.bsky.feed.post record) under the authenticated repo.","parameters":{"type":"object","properties":{"repo":{"type":"string"},"text":{"type":"string"},"createdAt":{"type":"string"},"langs":{"type":"array","items":{"type":"string"}},"reply":{"type":"object"},"embed":{"type":"object"},"facets":{"type":"array","items":{"type":"object"}}},"required":["repo","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"like.post","description":"Like a post by creating an app.bsky.feed.like record pointing at the target post (subject = { uri, cid }).","parameters":{"type":"object","properties":{"repo":{"type":"string"},"subject":{"type":"object","properties":{"uri":{"type":"string"},"cid":{"type":"string"}},"required":["uri","cid"]},"createdAt":{"type":"string"}},"required":["repo","subject"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"repost.post","description":"Repost a post by creating an app.bsky.feed.repost record pointing at the target post (subject = { uri, cid }).","parameters":{"type":"object","properties":{"repo":{"type":"string"},"subject":{"type":"object","properties":{"uri":{"type":"string"},"cid":{"type":"string"}},"required":["uri","cid"]},"createdAt":{"type":"string"}},"required":["repo","subject"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"find.post","description":"Search the public Bluesky post index (app.bsky.feed.searchPosts) by query, with optional author / language / sort / pagination filters.","parameters":{"type":"object","properties":{"q":{"type":"string"},"author":{"type":"string"},"lang":{"type":"string"},"sort":{"type":"string"},"since":{"type":"string"},"until":{"type":"string"},"limit":{"type":"integer"},"cursor":{"type":"string"}},"required":["q"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"find.thread","description":"Resolve full thread context for a post URI (app.bsky.feed.getPostThread), including ancestor / descendant replies up to the requested depth.","parameters":{"type":"object","properties":{"uri":{"type":"string"},"depth":{"type":"integer"},"parentHeight":{"type":"integer"}},"required":["uri"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"author.feed","description":"Read an author's feed (app.bsky.feed.getAuthorFeed) — backs the \"new posts by author\" trigger. Use filter to control replies/reposts inclusion.","parameters":{"type":"object","properties":{"actor":{"type":"string"},"filter":{"type":"string"},"includePins":{"type":"boolean"},"limit":{"type":"integer"},"cursor":{"type":"string"}},"required":["actor"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"timeline.read","description":"Read the authenticated user's home timeline (app.bsky.feed.getTimeline) — backs the \"new timeline posts\" trigger.","parameters":{"type":"object","properties":{"algorithm":{"type":"string"},"limit":{"type":"integer"},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"followers.list","description":"List followers of an actor (app.bsky.graph.getFollowers) — backs the \"new follower on account\" trigger via polling + cursor diff.","parameters":{"type":"object","properties":{"actor":{"type":"string"},"limit":{"type":"integer"},"cursor":{"type":"string"}},"required":["actor"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"post.delete","description":"Delete a post by URI.","parameters":{"type":"object","properties":{"repo":{"type":"string"},"rkey":{"type":"string","description":"Record key extracted from the post AT URI."}},"required":["repo","rkey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"follow.user","description":"Follow a Bluesky account.","parameters":{"type":"object","properties":{"repo":{"type":"string"},"subject":{"type":"string","description":"DID of the actor to follow."},"createdAt":{"type":"string"}},"required":["repo","subject"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"unfollow.user","description":"Unfollow a Bluesky account.","parameters":{"type":"object","properties":{"repo":{"type":"string"},"rkey":{"type":"string","description":"Record key of the follow record to delete."}},"required":["repo","rkey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"mute.user","description":"Mute an account.","parameters":{"type":"object","properties":{"actor":{"type":"string","description":"Handle or DID of the actor to mute."}},"required":["actor"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"bolna","displayName":"Bolna AI","description":"Place outbound AI voice calls with Bolna agents and inspect agent and call execution history.","auth":{"kind":"api-key","hint":"Bolna API key, sent as the Authorization: Bearer header."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"agents.list","description":"List the Bolna agents available to the current API key.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"agents.get","description":"Fetch a single Bolna agent by id.","parameters":{"type":"object","properties":{"agentId":{"type":"string"}},"required":["agentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"executions.list","description":"List recent call executions for a Bolna agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["agentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"executions.get","description":"Fetch the result of a single Bolna call execution.","parameters":{"type":"object","properties":{"executionId":{"type":"string"}},"required":["executionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.cancel","description":"Cancel a queued or scheduled Bolna voice call by execution id.","parameters":{"type":"object","properties":{"executionId":{"type":"string","description":"Bolna call execution id to cancel."}},"required":["executionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"agents.create","description":"Create a new Bolna voice agent definition.","parameters":{"type":"object","properties":{"agent_config":{"type":"object","description":"Bolna agent configuration (prompts, voice, model, etc.)."},"agent_prompts":{"type":"object","description":"Prompt set for the agent (task prompts keyed by task name)."}},"required":["agent_config"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"agents.update","description":"Update an existing Bolna voice agent definition.","parameters":{"type":"object","properties":{"agentId":{"type":"string","description":"Bolna agent id to update."},"agent_config":{"type":"object","description":"Updated agent configuration."},"agent_prompts":{"type":"object","description":"Updated prompt set for the agent."}},"required":["agentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"agents.delete","description":"Delete a Bolna voice agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string","description":"Bolna agent id to delete."}},"required":["agentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.make","description":"Place an outbound AI voice call with a Bolna agent. Maps to the activepieces makePhoneCall action.","parameters":{"type":"object","properties":{"agent_id":{"type":"string","description":"Bolna agent id that will own the call."},"recipient_phone_number":{"type":"string","description":"Recipient phone number in E.164 format (e.g., +10123456789)."},"from_phone_number":{"type":"string","description":"Optional sender phone number in E.164 format."},"scheduled_at":{"type":"string","description":"Optional ISO 8601 timestamp with time zone at which to place the call (e.g., 2025-08-21T10:35:00Z). Leave empty to call immediately."},"user_data":{"type":"object","description":"Dynamic variables injected into the agent prompt."}},"required":["agent_id","recipient_phone_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.batch","description":"Place a batch of outbound AI voice calls for a single Bolna agent.","parameters":{"type":"object","properties":{"agent_id":{"type":"string"},"recipients":{"type":"array","items":{"type":"object","properties":{"recipient_phone_number":{"type":"string"},"user_data":{"type":"object"}},"required":["recipient_phone_number"]}},"from_phone_number":{"type":"string"},"scheduled_at":{"type":"string"}},"required":["agent_id","recipients"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"bonjoro","displayName":"Bonjoro","description":"Send personal video greeting messages to delight customers via Bonjoro.","auth":{"kind":"api-key","hint":"Bonjoro account API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"greets.add","description":"Create a new Bonjoro greet for a customer, optionally tied to an assignee, campaign, or template.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email of the recipient to greet."},"note":{"type":"string","description":"Note to send with the greet."},"first":{"type":"string","description":"Recipient first name."},"last":{"type":"string","description":"Recipient last name."},"assignee":{"type":"string","description":"Assignee user id."},"campaign":{"type":"string","description":"Campaign id to attach the greet to."},"template":{"type":"string","description":"Template id to use for the greet."},"custom":{"type":"object","description":"Custom attributes attached to the greet."}},"required":["email","note"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"greets.update","description":"Update an existing Bonjoro greet (note, assignee, template, custom fields).","parameters":{"type":"object","properties":{"greetId":{"type":"string","description":"Bonjoro greet id to update."},"note":{"type":"string","description":"Updated note for the greet."},"assignee":{"type":"string","description":"Assignee user id."},"template":{"type":"string","description":"Template id to use for the greet."},"campaign":{"type":"string","description":"Campaign id the greet belongs to."},"custom":{"type":"object","description":"Custom attributes attached to the greet."}},"required":["greetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"greets.delete","description":"Delete a Bonjoro greet by id.","parameters":{"type":"object","properties":{"greetId":{"type":"string","description":"Bonjoro greet id to delete."}},"required":["greetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.create","description":"Create a new Bonjoro campaign.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Display name of the campaign."},"assignee":{"type":"string","description":"Default assignee user id for greets in the campaign."},"template":{"type":"string","description":"Default template id for greets in the campaign."},"description":{"type":"string","description":"Optional campaign description."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assignees.list","description":"List Bonjoro account members eligible to be assigned a greet.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.list","description":"List Bonjoro campaigns available on the account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"templates.list","description":"List greet templates available on the Bonjoro account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"bookedin","displayName":"Bookedin","description":"AI agents for lead conversion and appointment booking — manage Bookedin leads.","auth":{"kind":"api-key","hint":"Bookedin API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"leads.list","description":"List or search Bookedin leads with optional filters.","parameters":{"type":"object","properties":{"search":{"type":"string","description":"Search text in name, email, or phone number."},"source":{"type":"string","description":"Filter by lead source."},"handling_status":{"type":"string"},"limit":{"type":"integer"},"skip":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.get","description":"Read a single Bookedin lead by id.","parameters":{"type":"object","properties":{"leadId":{"type":"string"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.stats","description":"Get aggregate Bookedin lead statistics.","parameters":{"type":"object","properties":{"source":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.create","description":"Create a Bookedin lead.","parameters":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"source":{"type":"string"}},"required":["firstName","lastName","email","phone"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update","description":"Update an existing Bookedin lead. Individual fields merge with the optional update_json payload.","parameters":{"type":"object","properties":{"leadId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"handling_status":{"type":"string"},"update_json":{"type":"object","description":"Optional JSON body for complex updates. Merges with individual fields."}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"leads.delete","description":"Delete a Bookedin lead.","parameters":{"type":"object","properties":{"leadId":{"type":"string"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"appointments.create","description":"Book a new Bookedin appointment for a lead or customer.","parameters":{"type":"object","properties":{"leadId":{"type":"string","description":"Optional lead id to attach the appointment to."},"serviceId":{"type":"string","description":"Service or appointment type id."},"staffId":{"type":"string","description":"Staff member to assign to the appointment."},"startTime":{"type":"string","description":"ISO 8601 start time for the appointment."},"endTime":{"type":"string","description":"ISO 8601 end time for the appointment."},"notes":{"type":"string","description":"Optional notes attached to the appointment."}},"required":["serviceId","startTime"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"appointments.cancel","description":"Cancel an existing Bookedin appointment.","parameters":{"type":"object","properties":{"appointmentId":{"type":"string","description":"Bookedin appointment id to cancel."},"reason":{"type":"string","description":"Optional cancellation reason."}},"required":["appointmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"appointments.reschedule","description":"Reschedule an existing Bookedin appointment to a new start/end time.","parameters":{"type":"object","properties":{"appointmentId":{"type":"string","description":"Bookedin appointment id to reschedule."},"startTime":{"type":"string","description":"New ISO 8601 start time."},"endTime":{"type":"string","description":"New ISO 8601 end time."},"staffId":{"type":"string","description":"Optional new staff member id."}},"required":["appointmentId","startTime"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"box","displayName":"Box","description":"Read, write, and search files and folders in a Box Content Cloud account. Standard OAuth2 with rotating refresh tokens; targets the v2.0 REST API at api.box.com.","auth":{"kind":"oauth2","authorizationUrl":"https://account.box.com/api/oauth2/authorize","tokenUrl":"https://api.box.com/oauth2/token","scopes":["root_readonly"],"clientIdEnv":"BOX_OAUTH_CLIENT_ID","clientSecretEnv":"BOX_OAUTH_CLIENT_SECRET"},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.me","description":"Read the currently authenticated Box user (used for connection self-test).","parameters":{"type":"object","properties":{"fields":{"type":"string","description":"Comma-separated subset of user fields to return (e.g. \"id,login,name,enterprise\")."}}},"requiredScopes":["root_readonly"],"class":"read"},{"name":"folders.get","description":"Read folder metadata and the first page of child items. The root folder of every Box account has id \"0\".","parameters":{"type":"object","properties":{"folderId":{"type":"string","description":"Box folder id. Use \"0\" for the account root."},"fields":{"type":"string","description":"Comma-separated subset of folder fields."}},"required":["folderId"]},"requiredScopes":["root_readonly"],"class":"read"},{"name":"folders.items","description":"List the children of a folder with limit/offset pagination. Returns mixed files, folders, and weblinks; inspect each entry's `type` field.","parameters":{"type":"object","properties":{"folderId":{"type":"string","description":"Box folder id; \"0\" is the account root."},"limit":{"type":"integer","minimum":1,"maximum":1000,"default":100},"offset":{"type":"integer","minimum":0,"default":0},"sort":{"type":"string","enum":["id","name","date"],"description":"Sort key; Box defaults to \"name\"."},"direction":{"type":"string","enum":["ASC","DESC"]},"fields":{"type":"string","description":"Comma-separated item fields to return."}},"required":["folderId"]},"requiredScopes":["root_readonly"],"class":"read"},{"name":"folders.create","description":"Create a folder under a parent. Box rejects duplicate (parent_id, name) with 409 conflict; the declarative layer surfaces those as { status: \"conflict\" }.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"New folder name; 1-255 chars, no leading/trailing whitespace."},"parent":{"type":"object","description":"Reference to the destination folder.","properties":{"id":{"type":"string","description":"Parent folder id; \"0\" is the root."}},"required":["id"]}},"required":["name","parent"]},"requiredScopes":["root_readwrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.get","description":"Read file metadata (size, sha1, parent, modified_at, version, etag). Does NOT return the file contents — use the Box download URL flow for that.","parameters":{"type":"object","properties":{"fileId":{"type":"string","description":"Box file id."},"fields":{"type":"string"}},"required":["fileId"]},"requiredScopes":["root_readonly"],"class":"read"},{"name":"files.update","description":"Rename, move (change parent), or restore-from-trash a file. Pass any subset of {name, parent, description, tags, shared_link} as fields. Honors If-Match against the file etag for optimistic concurrency.","parameters":{"type":"object","properties":{"fileId":{"type":"string"},"fields":{"type":"object","description":"Partial file payload; e.g. { \"name\": \"Report-v2.pdf\", \"parent\": { \"id\": \"12345\" } }."}},"required":["fileId","fields"]},"requiredScopes":["root_readwrite"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"files.copy","description":"Server-side copy a file into a destination folder. Optional `name` for renaming on copy; Box 409s on duplicate (parent, name).","parameters":{"type":"object","properties":{"fileId":{"type":"string"},"parent":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"name":{"type":"string"},"version":{"type":"string","description":"Optional file version id to copy from (defaults to current)."}},"required":["fileId","parent"]},"requiredScopes":["root_readwrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.delete","description":"Send a file to trash. Box keeps trashed files for 30 days by default (enterprise-configurable). Honors If-Match against the file etag.","parameters":{"type":"object","properties":{"fileId":{"type":"string"}},"required":["fileId"]},"requiredScopes":["root_readwrite"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"folders.delete","description":"Send a folder to trash. Pass recursive=true to delete a non-empty folder; otherwise Box rejects with 400.","parameters":{"type":"object","properties":{"folderId":{"type":"string"},"recursive":{"type":"boolean","default":false}},"required":["folderId"]},"requiredScopes":["root_readwrite"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"search","description":"Full-text + metadata search across the enterprise. Filters by type (file|folder|web_link), file_extensions, ancestor_folder_ids, content_types, and created_at_range / updated_at_range (ISO-8601, comma-joined).","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search query."},"type":{"type":"string","enum":["file","folder","web_link"]},"file_extensions":{"type":"string","description":"Comma-separated list of extensions WITHOUT dot, e.g. \"pdf,docx\"."},"ancestor_folder_ids":{"type":"string","description":"Comma-separated folder ids to scope the search to."},"content_types":{"type":"string","description":"Comma-separated list of content fields to match, e.g. \"name,description,file_content\"."},"created_at_range":{"type":"string","description":"ISO8601 range \"from,to\"."},"updated_at_range":{"type":"string","description":"ISO8601 range \"from,to\"."},"limit":{"type":"integer","minimum":1,"maximum":200,"default":30},"offset":{"type":"integer","minimum":0,"default":0}},"required":["query"]},"requiredScopes":["root_readonly"],"class":"read"},{"name":"collaborations.create","description":"Share a file or folder with a Box user (by id or login email) at a given role. Box dedupes (item, accessible_by) pairs.","parameters":{"type":"object","properties":{"item":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["file","folder"]}},"required":["id","type"]},"accessible_by":{"type":"object","properties":{"id":{"type":"string","description":"Box user/group id (mutually exclusive with login)."},"login":{"type":"string","description":"Email login of the target user."},"type":{"type":"string","enum":["user","group"]}},"required":["type"]},"role":{"type":"string","enum":["editor","viewer","previewer","uploader","previewer uploader","viewer uploader","co-owner","owner"]}},"required":["item","accessible_by","role"]},"requiredScopes":["root_readwrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"brave-search","displayName":"Brave Search","description":"Query the Brave Search API for privacy-preserving web results.","auth":{"kind":"api-key","hint":"Brave Search subscription token (X-Subscription-Token)."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"brave.web.search","description":"Run a Brave web search query and return result documents.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query string."},"count":{"type":"integer","minimum":1,"maximum":20,"description":"Number of results (1-20)."}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"braze","displayName":"Braze","description":"Track Braze users, trigger campaign/canvas sends, and manage subscription state through the REST API.","auth":{"kind":"api-key","hint":"Braze REST API key from Settings → REST API Keys with the per-endpoint permissions the agent needs (users.track, campaigns.trigger.send, etc.)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.track","description":"Server-side ingest of user attributes, custom events, and purchases (POST /users/track).","parameters":{"type":"object","properties":{"attributes":{"type":"array","description":"User attribute updates keyed by external_id or braze_id.","items":{"type":"object","properties":{"external_id":{"type":"string"},"braze_id":{"type":"string"},"user_alias":{"type":"object","properties":{"alias_name":{"type":"string"},"alias_label":{"type":"string"}},"required":["alias_name","alias_label"]},"_update_existing_only":{"type":"boolean"}},"additionalProperties":true}},"events":{"type":"array","description":"Custom events with name, time (ISO-8601), and optional properties.","items":{"type":"object","properties":{"external_id":{"type":"string"},"braze_id":{"type":"string"},"user_alias":{"type":"object","properties":{"alias_name":{"type":"string"},"alias_label":{"type":"string"}},"required":["alias_name","alias_label"]},"app_id":{"type":"string"},"name":{"type":"string"},"time":{"type":"string"},"properties":{"type":"object"},"_update_existing_only":{"type":"boolean"}},"required":["name","time"]}},"purchases":{"type":"array","description":"Purchase records with product_id, currency, price, time.","items":{"type":"object","properties":{"external_id":{"type":"string"},"braze_id":{"type":"string"},"user_alias":{"type":"object","properties":{"alias_name":{"type":"string"},"alias_label":{"type":"string"}},"required":["alias_name","alias_label"]},"app_id":{"type":"string"},"product_id":{"type":"string"},"currency":{"type":"string"},"price":{"type":"number"},"quantity":{"type":"integer"},"time":{"type":"string"},"properties":{"type":"object"},"_update_existing_only":{"type":"boolean"}},"required":["product_id","currency","price","time"]}}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.identify","description":"Merge a user_alias profile onto an external_id (POST /users/identify).","parameters":{"type":"object","properties":{"aliases_to_identify":{"type":"array","items":{"type":"object","properties":{"external_id":{"type":"string"},"user_alias":{"type":"object","properties":{"alias_name":{"type":"string"},"alias_label":{"type":"string"}},"required":["alias_name","alias_label"]}},"required":["external_id","user_alias"]}},"merge_behavior":{"type":"string","enum":["none","merge"],"description":"How to reconcile attributes when both records exist."}},"required":["aliases_to_identify"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.export.ids","description":"Export user profiles by external_id, user_alias, braze_id, email_address, or phone (POST /users/export/ids).","parameters":{"type":"object","properties":{"external_ids":{"type":"array","items":{"type":"string"}},"user_aliases":{"type":"array","items":{"type":"object","properties":{"alias_name":{"type":"string"},"alias_label":{"type":"string"}},"required":["alias_name","alias_label"]}},"device_id":{"type":"string"},"braze_id":{"type":"string"},"email_address":{"type":"string"},"phone":{"type":"string"},"fields_to_export":{"type":"array","items":{"type":"string"}}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.delete","description":"Delete user profiles by external_id, user_alias, or braze_id (POST /users/delete).","parameters":{"type":"object","properties":{"external_ids":{"type":"array","items":{"type":"string"}},"user_aliases":{"type":"array","items":{"type":"object","properties":{"alias_name":{"type":"string"},"alias_label":{"type":"string"}},"required":["alias_name","alias_label"]}},"braze_ids":{"type":"array","items":{"type":"string"}}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.trigger.send","description":"Fire an API-triggered Braze campaign send (POST /campaigns/trigger/send).","parameters":{"type":"object","properties":{"campaign_id":{"type":"string"},"send_id":{"type":"string","description":"Optional dispatch_id echoed back for tracking; pass a deterministic value to dedupe."},"trigger_properties":{"type":"object"},"broadcast":{"type":"boolean"},"audience":{"type":"object","description":"Connected audience segment filter object."},"recipients":{"type":"array","items":{"type":"object","properties":{"external_user_id":{"type":"string"},"user_alias":{"type":"object","properties":{"alias_name":{"type":"string"},"alias_label":{"type":"string"}},"required":["alias_name","alias_label"]},"trigger_properties":{"type":"object"},"send_to_existing_only":{"type":"boolean"},"attributes":{"type":"object"}}}}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"canvas.trigger.send","description":"Fire an API-triggered Braze Canvas send (POST /canvas/trigger/send).","parameters":{"type":"object","properties":{"canvas_id":{"type":"string"},"canvas_entry_properties":{"type":"object"},"broadcast":{"type":"boolean"},"audience":{"type":"object"},"recipients":{"type":"array","items":{"type":"object","properties":{"external_user_id":{"type":"string"},"user_alias":{"type":"object","properties":{"alias_name":{"type":"string"},"alias_label":{"type":"string"}},"required":["alias_name","alias_label"]},"canvas_entry_properties":{"type":"object"},"send_to_existing_only":{"type":"boolean"},"attributes":{"type":"object"}}}}},"required":["canvas_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscription.status.set","description":"Update subscription state for a list of users on a subscription group (POST /subscription/status/set).","parameters":{"type":"object","properties":{"subscription_group_id":{"type":"string"},"subscription_state":{"type":"string","enum":["subscribed","unsubscribed"]},"external_id":{"description":"External user id (string) or array of external user ids.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"email":{"description":"Email (string) or array of emails.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"phone":{"description":"E.164 phone (string) or array of E.164 phones.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["subscription_group_id","subscription_state"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscription.status.get","description":"Read subscription state for users on a subscription group (GET /subscription/status/get).","parameters":{"type":"object","properties":{"subscription_group_id":{"type":"string"},"external_id":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"}},"required":["subscription_group_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"email.blacklist","description":"Suppress one or more email addresses from future Braze sends (POST /email/blacklist).","parameters":{"type":"object","properties":{"email":{"description":"Email (string) or array of emails to suppress.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.list","description":"List Braze campaigns ordered by last edit time (GET /campaigns/list).","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":0},"include_archived":{"type":"boolean"},"sort_direction":{"type":"string","enum":["asc","desc"]},"last_edit_time_gt":{"type":"string","description":"ISO-8601 lower bound on last_edit.time filter."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"canvas.list","description":"List Braze Canvases ordered by last edit time (GET /canvas/list).","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":0},"include_archived":{"type":"boolean"},"sort_direction":{"type":"string","enum":["asc","desc"]},"last_edit_time_gt":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"brex","displayName":"Brex","description":"Read Brex users, cards, card transactions, vendors, expenses, and payments.","auth":{"kind":"api-key","hint":"Brex OAuth access token or customer-generated user token, stored as a bearer token."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.list","description":"List Brex users.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cards.list","description":"List Brex cards and card status.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"card-transactions.list","description":"List primary card transactions.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"vendors.list","description":"List vendors configured in Brex.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"expenses.list","description":"List card expenses and receipt/memo status.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"payments.list","description":"List outbound payments.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"brightdata","displayName":"Bright Data","description":"Scrape any website at scale using Bright Data's Web Unlocker (bypasses anti-bot protection) and Web Scraper API (structured dataset collection jobs).","auth":{"kind":"api-key","hint":"API token from your Bright Data dashboard (Account settings -> API tokens). Sent as the Authorization: Bearer header."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"unlocker.request","description":"Fetch a target URL through the Web Unlocker, returning the page content with anti-bot bypass, CAPTCHA solving, and JS rendering handled.","parameters":{"type":"object","properties":{"zone":{"type":"string","description":"Your Web Unlocker API zone name."},"url":{"type":"string","description":"Target URL to fetch."},"format":{"type":"string","description":"Response format, e.g. 'raw' for the unmodified site response or 'json'."},"body":{"type":"string","description":"Optional raw POST payload to send to the target URL."}},"required":["zone","url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scraper.trigger","description":"Trigger an asynchronous Web Scraper data collection job for a given dataset, returning a snapshot_id used to poll progress and download results.","parameters":{"type":"object","properties":{"dataset_id":{"type":"string","description":"Scraper dataset id, e.g. gd_xxxxxxxxxxxxxxxxx."},"format":{"type":"string","description":"Delivery format of results, e.g. json."},"include_errors":{"type":"boolean","description":"Include error records in the result set."},"inputs":{"type":"array","description":"Array of input objects, each typically containing a url to scrape.","items":{"type":"object"}}},"required":["dataset_id","inputs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"scraper.progress","description":"Check the status of a Web Scraper collection job (starting, running, ready, or failed) by its snapshot_id.","parameters":{"type":"object","properties":{"snapshot_id":{"type":"string","description":"Snapshot id returned by scraper.trigger."}},"required":["snapshot_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scraper.snapshot","description":"Download the collected records for a completed Web Scraper snapshot in the requested format.","parameters":{"type":"object","properties":{"snapshot_id":{"type":"string","description":"Snapshot id returned by scraper.trigger."},"format":{"type":"string","description":"Output format, e.g. json, ndjson, jsonl, or csv."}},"required":["snapshot_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"brilliant-directories","displayName":"Brilliant Directories","description":"Create users on a Brilliant Directories website instance.","auth":{"kind":"api-key","hint":"Brilliant Directories API key from admin → API Settings; site_url passed as metadata.siteUrl."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.create","description":"Create a new user on the Brilliant Directories site instance.","parameters":{"type":"object","properties":{"email":{"type":"string"},"password":{"type":"string"},"subscription_id":{"type":"string"},"meta":{"type":"object"}},"required":["email","password","subscription_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.update","description":"Update an existing Brilliant Directories member.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"Brilliant Directories user id to update."},"email":{"type":"string"},"subscription_id":{"type":"string"},"meta":{"type":"object"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.delete","description":"Delete a Brilliant Directories member by user id.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"Brilliant Directories user id to delete."}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"listings.create","description":"Create a new listing on the Brilliant Directories site instance.","parameters":{"type":"object","properties":{"user_id":{"type":"string","description":"Owning member user id."},"subscription_id":{"type":"string","description":"Listing subscription/plan id."},"title":{"type":"string","description":"Listing title."},"meta":{"type":"object","description":"Listing custom fields and content."}},"required":["user_id","subscription_id","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"listings.update","description":"Update a listing on the Brilliant Directories site instance.","parameters":{"type":"object","properties":{"listingId":{"type":"string","description":"Brilliant Directories listing id to update."},"title":{"type":"string"},"meta":{"type":"object"}},"required":["listingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"browse-ai","displayName":"Browse AI","description":"Run Browse AI robots, list available robots, and fetch task details from the Browse AI cloud.","auth":{"kind":"api-key","hint":"Browse AI personal API key (Bearer token from the Integrations page)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"get.task.details","description":"Fetch the result and status for a previously queued Browse AI robot task.","parameters":{"type":"object","properties":{"robotId":{"type":"string","description":"Identifier of the robot that owns the task."},"taskId":{"type":"string","description":"Identifier of the task to retrieve."}},"required":["robotId","taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"list.robots","description":"List robots available to the authenticated Browse AI account.","parameters":{"type":"object","properties":{"page":{"type":"integer","description":"Page number for pagination (1-based)."},"pageSize":{"type":"integer","description":"Number of robots per page."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"run.robot","description":"Queue a Browse AI robot task with the supplied input parameters.","parameters":{"type":"object","properties":{"robotId":{"type":"string","description":"Identifier of the robot to run."},"inputParameters":{"type":"object","description":"Input parameter map passed to the robot (origin URL plus robot-specific fields)."},"recordVideo":{"type":"boolean","description":"Record a video of the task while it runs."}},"required":["robotId","inputParameters"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"capturedLists.get","description":"Fetch the captured list (scraped data rows) produced by a Browse AI robot task run.","parameters":{"type":"object","properties":{"robotId":{"type":"string","description":"Identifier of the robot that produced the captured list."},"taskId":{"type":"string","description":"Identifier of the task that produced the captured list."},"capturedListId":{"type":"string","description":"Identifier of the captured list on the task."},"pageSize":{"type":"integer","description":"Number of rows per page."},"pageNumber":{"type":"integer","description":"Page number for pagination (1-based)."}},"required":["robotId","taskId","capturedListId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.list","description":"List robot tasks belonging to the authenticated Browse AI account, optionally filtered by status or date range.","parameters":{"type":"object","properties":{"robotId":{"type":"string","description":"Identifier of the robot whose tasks to list."},"sort":{"type":"string","description":"Sort order for the returned tasks (e.g. \"createdAt\", \"-createdAt\")."},"fromDate":{"type":"string","description":"Lower bound for task creation time (ISO 8601 or epoch ms, per Browse AI contract)."},"toDate":{"type":"string","description":"Upper bound for task creation time (ISO 8601 or epoch ms, per Browse AI contract)."},"status":{"type":"string","description":"Filter tasks by status (e.g. \"successful\", \"failed\", \"in-progress\")."}},"required":["robotId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"builtwith","displayName":"BuiltWith","description":"Look up the technology stack, analytics, hosting, and metadata detected on any website.","auth":{"kind":"api-key","hint":"API key (a UUID) from your BuiltWith account dashboard under My Account -> API Access. Sent as the KEY query parameter."},"category":"market-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"domain.lookup","description":"Return the full set of detected technologies and metadata for one or more root domains.","parameters":{"type":"object","properties":{"lookup":{"type":"string","description":"Root domain to analyze, e.g. stripe.com. Up to 16 domains may be passed as a comma-separated list."}},"required":["lookup"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"domain.free","description":"Free-tier lookup returning the most popular detected technology groups for a single domain.","parameters":{"type":"object","properties":{"lookup":{"type":"string","description":"Root domain to analyze."}},"required":["lookup"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"domain.relationships","description":"Return domains that share relationships (e.g. analytics IDs, ad networks) with the given domain.","parameters":{"type":"object","properties":{"lookup":{"type":"string","description":"Root domain to find related domains for."}},"required":["lookup"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.to_url","description":"Resolve a company name to its most likely website domain.","parameters":{"type":"object","properties":{"company":{"type":"string","description":"Company name to resolve to a domain."}},"required":["company"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"buttondown","displayName":"Buttondown","description":"Automate your Buttondown newsletter workflows.","auth":{"kind":"api-key","hint":"Buttondown API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"subscribers.create","description":"Create a subscriber in Buttondown.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"The email address of the subscriber."},"type":{"type":"string","description":"The subscriber status (e.g., \"regular\", \"unverified\")."},"notes":{"type":"string","description":"Internal notes about the subscriber."},"tags":{"type":"array","items":{"type":"string"},"description":"Tags to assign to the subscriber."},"metadata":{"type":"object","description":"Custom metadata to store on the subscriber."},"referrerUrl":{"type":"string","description":"Referrer URL for the subscriber."},"utmSource":{"type":"string","description":"UTM source parameter."},"utmMedium":{"type":"string","description":"UTM medium parameter."},"utmCampaign":{"type":"string","description":"UTM campaign parameter."},"referringSubscriberId":{"type":"string","description":"ID of the subscriber who referred this contact."},"ipAddress":{"type":"string","description":"The original IP address of the subscriber."},"collisionBehavior":{"type":"string","description":"How to handle duplicate email addresses."},"bypassFirewall":{"type":"boolean","description":"Set to true when the request originates from a trusted internal system."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.list","description":"List subscribers in Buttondown.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of subscribers to return (1-1000)."},"cursor":{"type":"string","description":"Cursor value from a previous response for pagination."},"source":{"type":"string","description":"Filter by subscriber source."},"emailAddress":{"type":"string","description":"Filter subscribers whose email address contains this value."},"ordering":{"type":"string","description":"Field to order results by."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.send_email","description":"Send an email to a subscriber or to all subscribers.","parameters":{"type":"object","properties":{"subject":{"type":"string","description":"Subject line of the email."},"body":{"type":"string","description":"HTML body of the email."},"subscriberId":{"type":"string","description":"Send to a specific subscriber ID (leave empty to send to all)."}},"required":["subject","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.update","description":"Update metadata on an existing Buttondown subscriber.","parameters":{"type":"object","properties":{"subscriberId":{"type":"string","description":"Buttondown subscriber id."},"email":{"type":"string","description":"Updated email address."},"type":{"type":"string","description":"Updated subscriber status."},"notes":{"type":"string","description":"Internal notes about the subscriber."},"tags":{"type":"array","items":{"type":"string"},"description":"Tags to assign to the subscriber."},"metadata":{"type":"object","description":"Custom metadata to store on the subscriber."}},"required":["subscriberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.delete","description":"Unsubscribe and delete a Buttondown subscriber.","parameters":{"type":"object","properties":{"subscriberId":{"type":"string","description":"Buttondown subscriber id to delete."}},"required":["subscriberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"emails.create","description":"Draft a new Buttondown email without sending it.","parameters":{"type":"object","properties":{"subject":{"type":"string","description":"Subject line of the email draft."},"body":{"type":"string","description":"HTML body of the email draft."},"status":{"type":"string","description":"Email status (defaults to \"draft\"). Set to \"about_to_send\" or \"scheduled\" to schedule sending."},"publishDate":{"type":"string","description":"Optional ISO 8601 publish date for scheduled emails."}},"required":["subject","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"emails.send","description":"Send a previously drafted Buttondown email immediately.","parameters":{"type":"object","properties":{"emailId":{"type":"string","description":"Buttondown email/draft id to send."}},"required":["emailId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"cal-com","displayName":"Cal.com","description":"Schedule, query, and cancel Cal.com bookings and read event types through the Platform v2 API.","auth":{"kind":"oauth2","authorizationUrl":"https://app.cal.com/auth/oauth2/authorize","tokenUrl":"https://api.cal.com/v2/auth/oauth2/token","scopes":["PROFILE_READ","BOOKING_READ","BOOKING_WRITE","EVENT_TYPE_READ","EVENT_TYPE_WRITE","SCHEDULE_READ","SCHEDULE_WRITE"],"pkce":"required","tokenClientAuthMethod":"none","clientIdEnv":"CALCOM_OAUTH_CLIENT_ID"},"category":"calendar","defaultConsistencyModel":"authoritative","capabilities":[{"name":"me.get","description":"Read the authenticated Cal.com user (managed user under the Platform client).","parameters":{"type":"object","properties":{}},"requiredScopes":["PROFILE_READ"],"class":"read"},{"name":"event-types.list","description":"List event types owned by the authenticated user or a given username.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Optional Cal.com username to filter event types."},"eventSlug":{"type":"string","description":"Optional event-type slug to filter."}}},"requiredScopes":["EVENT_TYPE_READ"],"class":"read"},{"name":"event-types.get","description":"Read a single event type by numeric id.","parameters":{"type":"object","properties":{"eventTypeId":{"type":"string"}},"required":["eventTypeId"]},"requiredScopes":["EVENT_TYPE_READ"],"class":"read"},{"name":"bookings.list","description":"List Cal.com bookings, optionally filtered by status, attendee email, or event-type id.","parameters":{"type":"object","properties":{"status":{"type":"string","description":"Filter by status (upcoming, recurring, past, cancelled, unconfirmed)."},"attendeeEmail":{"type":"string"},"eventTypeId":{"type":"string"},"limit":{"type":"integer","minimum":1,"description":"Page size."},"cursor":{"type":"string","description":"The previous page response pagination.nextCursor."}}},"requiredScopes":["BOOKING_READ"],"class":"read"},{"name":"bookings.get","description":"Read a single booking by its public uid.","parameters":{"type":"object","properties":{"bookingUid":{"type":"string"}},"required":["bookingUid"]},"requiredScopes":["BOOKING_READ"],"class":"read"},{"name":"bookings.create","description":"Create a Cal.com booking. The body shape follows the v2 bookings contract (eventTypeId, start, attendee, etc.).","parameters":{"type":"object","properties":{"eventTypeId":{"type":"integer","description":"Numeric event-type id to book against."},"start":{"type":"string","description":"ISO-8601 start time in the attendee timezone."},"attendee":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"timeZone":{"type":"string"},"language":{"type":"string"},"phoneNumber":{"type":"string"}},"required":["name","email","timeZone"]},"guests":{"type":"array","items":{"type":"string"}},"meetingUrl":{"type":"string"},"location":{"type":"string"},"bookingFieldsResponses":{"type":"object"},"metadata":{"type":"object"},"lengthInMinutes":{"type":"integer"}},"required":["eventTypeId","start","attendee"]},"requiredScopes":["BOOKING_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"event-types.create","description":"Create a Cal.com event type owned by the authenticated user.","parameters":{"type":"object","properties":{"title":{"type":"string"},"slug":{"type":"string"},"lengthInMinutes":{"type":"integer"},"description":{"type":"string"},"locations":{"type":"array","items":{"type":"object"}},"bookingFields":{"type":"array","items":{"type":"object"}},"disableGuests":{"type":"boolean"}},"required":["title","slug","lengthInMinutes"]},"requiredScopes":["EVENT_TYPE_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"event-types.delete","description":"Delete a Cal.com event type by numeric id.","parameters":{"type":"object","properties":{"eventTypeId":{"type":"string"}},"required":["eventTypeId"]},"requiredScopes":["EVENT_TYPE_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"schedules.create","description":"Create an availability schedule for the authenticated user.","parameters":{"type":"object","properties":{"name":{"type":"string"},"timeZone":{"type":"string"},"isDefault":{"type":"boolean"},"availability":{"type":"array","items":{"type":"object"}},"overrides":{"type":"array","items":{"type":"object"}}},"required":["name","timeZone"]},"requiredScopes":["SCHEDULE_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bookings.cancel","description":"Cancel a Cal.com booking by uid with an optional cancellation reason.","parameters":{"type":"object","properties":{"bookingUid":{"type":"string"},"cancellationReason":{"type":"string"}},"required":["bookingUid"]},"requiredScopes":["BOOKING_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bookings.reschedule","description":"Reschedule a Cal.com booking to a new start time, returning the new booking uid.","parameters":{"type":"object","properties":{"bookingUid":{"type":"string"},"start":{"type":"string","description":"ISO-8601 start time for the new slot."},"reschedulingReason":{"type":"string"},"rescheduledBy":{"type":"string","description":"Email of the actor rescheduling."}},"required":["bookingUid","start"]},"requiredScopes":["BOOKING_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"schedules.list","description":"List availability schedules for the authenticated user.","parameters":{"type":"object","properties":{}},"requiredScopes":["SCHEDULE_READ"],"class":"read"},{"name":"slots.list","description":"List bookable time slots for an event type in a date range.","parameters":{"type":"object","properties":{"eventTypeId":{"type":"string"},"eventTypeSlug":{"type":"string"},"username":{"type":"string"},"start":{"type":"string","description":"ISO-8601 range start."},"end":{"type":"string","description":"ISO-8601 range end."},"timeZone":{"type":"string"},"duration":{"type":"integer"}},"required":["start","end"]},"requiredScopes":["EVENT_TYPE_READ"],"class":"read"}]},{"kind":"calendly","displayName":"Calendly","description":"Read Calendly event types and scheduled events, cancel events, and create single-use scheduling links.","auth":{"kind":"oauth2","authorizationUrl":"https://auth.calendly.com/oauth/authorize","tokenUrl":"https://auth.calendly.com/oauth/token","scopes":[],"clientIdEnv":"CALENDLY_OAUTH_CLIENT_ID","clientSecretEnv":"CALENDLY_OAUTH_CLIENT_SECRET"},"category":"calendar","defaultConsistencyModel":"authoritative","capabilities":[{"name":"user.get-current","description":"Get the authenticated Calendly user.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"event-types.list","description":"List event types owned by a user or organization.","parameters":{"type":"object","properties":{"user":{"type":"string","description":"Full user URI (https://api.calendly.com/users/UUID)."},"organization":{"type":"string","description":"Full organization URI."},"active":{"type":"boolean"},"count":{"type":"integer","minimum":1,"maximum":100},"page_token":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"event-types.get","description":"Read a single event type by UUID.","parameters":{"type":"object","properties":{"uuid":{"type":"string"}},"required":["uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scheduled-events.list","description":"List scheduled events for a user or organization, optionally filtered by status and time window.","parameters":{"type":"object","properties":{"user":{"type":"string","description":"Full user URI."},"organization":{"type":"string","description":"Full organization URI."},"status":{"type":"string","enum":["active","canceled"]},"min_start_time":{"type":"string","description":"ISO-8601 lower bound."},"max_start_time":{"type":"string","description":"ISO-8601 upper bound."},"count":{"type":"integer","minimum":1,"maximum":100},"page_token":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scheduled-events.get","description":"Read a single scheduled event by UUID.","parameters":{"type":"object","properties":{"uuid":{"type":"string"}},"required":["uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scheduled-events.list-invitees","description":"List invitees on a scheduled event.","parameters":{"type":"object","properties":{"uuid":{"type":"string"},"status":{"type":"string","enum":["active","canceled"]},"email":{"type":"string"},"count":{"type":"integer","minimum":1,"maximum":100},"page_token":{"type":"string"}},"required":["uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scheduled-events.cancel","description":"Cancel a scheduled event with an optional reason shown to the invitee.","parameters":{"type":"object","properties":{"uuid":{"type":"string"},"reason":{"type":"string"}},"required":["uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"scheduling-links.create","description":"Create a single-use scheduling link for an event type.","parameters":{"type":"object","properties":{"owner":{"type":"string","description":"Full event-type URI to attach the link to."},"max_event_count":{"type":"integer","minimum":1,"default":1}},"required":["owner"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.create","description":"Subscribe a Calendly webhook to organization or user scoped events.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"HTTPS endpoint that will receive event deliveries."},"events":{"type":"array","items":{"type":"string"},"description":"Event names to subscribe to (e.g. invitee.created, invitee.canceled)."},"organization":{"type":"string","description":"Full organization URI."},"user":{"type":"string","description":"Full user URI (required when scope=user)."},"scope":{"type":"string","enum":["user","organization"]},"signing_key":{"type":"string","description":"Optional shared secret for HMAC signatures."}},"required":["url","events","organization","scope"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Unsubscribe a Calendly webhook by uuid.","parameters":{"type":"object","properties":{"uuid":{"type":"string"}},"required":["uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invitee.no-show.create","description":"Mark a Calendly invitee as a no-show.","parameters":{"type":"object","properties":{"invitee":{"type":"string","description":"Full invitee URI (https://api.calendly.com/scheduled_events/EVENT_UUID/invitees/INVITEE_UUID)."}},"required":["invitee"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"camb-ai","displayName":"Camb.AI","description":"Create text-to-sound, text-to-speech, translations, and transcriptions.","auth":{"kind":"api-key","hint":"Camb.AI API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"audio.textToSound","description":"Create text to sound audio.","parameters":{"type":"object","properties":{"prompt":{"type":"string","description":"A clear, descriptive explanation of the desired audio effect."},"duration":{"type":"number","description":"The desired length of the audio in seconds (max 10)."},"projectName":{"type":"string","description":"A memorable name for your project."},"projectDescription":{"type":"string","description":"Details about your project."}},"required":["prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"audio.textToSpeech","description":"Create text to speech audio.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"The text to be converted to speech."},"gender":{"type":"string","description":"The gender of the speaker."},"age":{"type":"number","description":"The age of the speaker to be generated."},"projectName":{"type":"string","description":"A memorable name for your project."},"projectDescription":{"type":"string","description":"Details about your project."}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"audio.transcribe","description":"Transcribe audio media to text.","parameters":{"type":"object","properties":{"sourceType":{"type":"string","description":"Choose whether to upload a file or provide a URL."},"media":{"type":"string","description":"The media file (e.g., MP3, WAV, MP4) to transcribe. Max size: 20MB."},"projectName":{"type":"string","description":"A memorable name for your project."},"projectDescription":{"type":"string","description":"Details about your project."}},"required":["sourceType","media"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"text.translate","description":"Translate text to another language.","parameters":{"type":"object","properties":{"texts":{"type":"string","description":"The text to be translated. You can enter multiple lines; each line will be treated as a separate text segment."},"formality":{"type":"string","description":"Adjust the formality level to match your context."},"projectName":{"type":"string","description":"A memorable name for your project."},"projectDescription":{"type":"string","description":"Details about your project."}},"required":["texts"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"campaign-monitor","displayName":"Campaign Monitor","description":"Manage Campaign Monitor subscribers across lists: add, update details, unsubscribe, and lookup.","auth":{"kind":"api-key","hint":"Campaign Monitor API key from Account Settings > API keys."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"subscriber.add","description":"Add a subscriber to a list (matches Campaign Monitor \"Add subscriber to list\").","parameters":{"type":"object","properties":{"listId":{"type":"string"},"emailAddress":{"type":"string"},"name":{"type":"string"},"mobileNumber":{"type":"string"},"customFields":{"type":"array"},"consentToTrack":{"type":"string","enum":["Yes","No","Unchanged"]},"consentToSendSms":{"type":"string","enum":["Yes","No","Unchanged"]},"resubscribe":{"type":"boolean"},"restartSubscriptionBasedAutoresponders":{"type":"boolean"}},"required":["listId","emailAddress","consentToTrack"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriber.update","description":"Update an existing subscriber on a list.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"email":{"type":"string"},"newEmailAddress":{"type":"string"},"name":{"type":"string"},"mobileNumber":{"type":"string"},"customFields":{"type":"array"},"consentToTrack":{"type":"string","enum":["Yes","No","Unchanged"]},"consentToSendSms":{"type":"string","enum":["Yes","No","Unchanged"]},"resubscribe":{"type":"boolean"},"restartSubscriptionBasedAutoresponders":{"type":"boolean"}},"required":["listId","email","consentToTrack"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"subscriber.unsubscribe","description":"Unsubscribe a subscriber from a list.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"emailAddress":{"type":"string"}},"required":["listId","emailAddress"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaign.create","description":"Draft a new campaign for a Campaign Monitor client.","parameters":{"type":"object","properties":{"clientId":{"type":"string","description":"Campaign Monitor client id that owns the campaign."},"name":{"type":"string"},"subject":{"type":"string"},"fromName":{"type":"string"},"fromEmail":{"type":"string"},"replyTo":{"type":"string"},"htmlUrl":{"type":"string"},"textUrl":{"type":"string"},"listIDs":{"type":"array","items":{"type":"string"}},"segmentIDs":{"type":"array","items":{"type":"string"}}},"required":["clientId","name","subject","fromName","fromEmail","replyTo","htmlUrl","listIDs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaign.send","description":"Send a previously-drafted Campaign Monitor campaign.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"},"confirmationEmail":{"type":"string","description":"Email address to receive the send confirmation."},"sendDate":{"type":"string","description":"ISO-8601 date to schedule the send (or \"immediately\")."}},"required":["campaignId","confirmationEmail"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"list.create","description":"Create a subscriber list under a Campaign Monitor client.","parameters":{"type":"object","properties":{"clientId":{"type":"string"},"title":{"type":"string"},"unsubscribePage":{"type":"string"},"unsubscribeSetting":{"type":"string","enum":["AllClientLists","OnlyThisList"]},"confirmedOptIn":{"type":"boolean"},"confirmationSuccessPage":{"type":"string"}},"required":["clientId","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"list.delete","description":"Delete a Campaign Monitor subscriber list.","parameters":{"type":"object","properties":{"listId":{"type":"string"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriber.find","description":"Look up a subscriber by email address on a list.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"email":{"type":"string"},"includeTrackingPreference":{"type":"boolean"}},"required":["listId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"canny","displayName":"Canny","description":"Manage Canny product feedback: create, retrieve, and list posts; create and delete votes.","auth":{"kind":"api-key","hint":"Canny API key (Settings → API)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"posts.create","description":"Create a post on behalf of a Canny user. Mirrors activepieces createPostAction.","parameters":{"type":"object","properties":{"boardID":{"type":"string","description":"Board the post belongs to."},"authorID":{"type":"string","description":"Canny user ID of the post author."},"title":{"type":"string","description":"Brief title for the post."},"details":{"type":"string","description":"Longer body for the post."},"byID":{"type":"string","description":"Admin creating the post on behalf of the author (optional)."},"categoryID":{"type":"string","description":"Category to assign (optional)."},"ownerID":{"type":"string","description":"User responsible for completing the work (optional)."},"eta":{"type":"string","description":"Estimated delivery date in MM/YYYY (optional)."},"etaPublic":{"type":"boolean","description":"Whether the ETA is visible to all users (optional)."},"customFields":{"type":"object","description":"Custom field map (keys ≤ 30 chars, values ≤ 200 chars)."},"createdAt":{"type":"string","description":"ISO-8601 creation date for migrated posts (optional)."},"imageURLs":{"type":"array","items":{"type":"string"},"description":"Image attachment URLs (optional)."}},"required":["boardID","authorID","title","details"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.retrieve","description":"Retrieve a single Canny post by ID, board+URL name, or board+title. Mirrors retrievePostAction.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Canny post ID (preferred lookup)."},"boardID":{"type":"string","description":"Required when looking up by urlName or title."},"urlName":{"type":"string","description":"Slug used in the public post URL."},"title":{"type":"string","description":"Exact post title."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"posts.list","description":"List posts on a board with optional filters and pagination. Mirrors listPostsAction.","parameters":{"type":"object","properties":{"boardID":{"type":"string","description":"Board to list posts from."},"authorID":{"type":"string","description":"Filter to posts by this author."},"companyID":{"type":"string","description":"Filter to posts from voters at a company."},"tagIDs":{"type":"array","items":{"type":"string"},"description":"Filter to posts with all of these tag IDs."},"status":{"type":"string","description":"Filter by status (e.g. open, planned, in progress, complete, closed)."},"sort":{"type":"string","description":"Sort order: newest, oldest, relevance, score, statusChanged, trending."},"search":{"type":"string","description":"Full-text query."},"limit":{"type":"integer","description":"Page size (Canny max 100)."},"skip":{"type":"integer","description":"Pagination offset."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"votes.create","description":"Cast a vote on a post on behalf of a Canny user. Mirrors createVoteAction.","parameters":{"type":"object","properties":{"postID":{"type":"string","description":"Post being voted on."},"voterID":{"type":"string","description":"Canny user ID casting the vote."},"byID":{"type":"string","description":"Admin voting on behalf of the voter (optional)."},"votedAt":{"type":"string","description":"ISO-8601 vote timestamp for migrated votes (optional)."}},"required":["postID","voterID"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.update","description":"Update fields on an existing Canny post.","parameters":{"type":"object","properties":{"postID":{"type":"string","description":"Canny post id to update."},"title":{"type":"string"},"details":{"type":"string"},"eta":{"type":"string","description":"Estimated delivery date in MM/YYYY."},"etaPublic":{"type":"boolean"},"customFields":{"type":"object"},"imageURLs":{"type":"array","items":{"type":"string"}}},"required":["postID"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.delete","description":"Delete a Canny post by id.","parameters":{"type":"object","properties":{"postID":{"type":"string","description":"Canny post id to delete."}},"required":["postID"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Add a comment to a Canny post on behalf of a user.","parameters":{"type":"object","properties":{"postID":{"type":"string","description":"Post being commented on."},"authorID":{"type":"string","description":"Canny user ID writing the comment."},"value":{"type":"string","description":"Comment body (plain text)."},"parentID":{"type":"string","description":"Optional parent comment id to thread under."},"imageURLs":{"type":"array","items":{"type":"string"},"description":"Image attachment URLs."},"internal":{"type":"boolean","description":"Whether the comment is internal-only."},"createdAt":{"type":"string","description":"ISO-8601 created-at for migrated comments."}},"required":["postID","authorID","value"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"votes.delete","description":"Remove a user's vote from a Canny post. Mirrors deleteVoteAction.","parameters":{"type":"object","properties":{"postID":{"type":"string","description":"Post to remove the vote from."},"voterID":{"type":"string","description":"Canny user ID whose vote should be removed."}},"required":["postID","voterID"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"canva","displayName":"Canva","description":"Read Canva designs, folders, assets, brand templates, and comments; create designs, upload assets, post comments, and trigger export / autofill jobs through the Connect API.","auth":{"kind":"oauth2","authorizationUrl":"https://www.canva.com/api/oauth/authorize","tokenUrl":"https://api.canva.com/rest/oauth/token","scopes":["design:content:read","design:content:write","design:meta:read","design:permission:read","design:permission:write","asset:read","asset:write","brandtemplate:content:read","brandtemplate:meta:read","comment:read","comment:write","folder:read","folder:write","profile:read"],"clientIdEnv":"CANVA_OAUTH_CLIENT_ID","clientSecretEnv":"CANVA_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.me","description":"Return the Canva user id for the connected account.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":["profile:read"],"class":"read"},{"name":"users.me.profile","description":"Return the connected user profile (display name, etc.).","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":["profile:read"],"class":"read"},{"name":"designs.list","description":"List designs visible to the connected user.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Free-text design search."},"continuation":{"type":"string","description":"Opaque cursor from a prior page."},"ownership":{"type":"string","enum":["any","owned","shared"]},"sort_by":{"type":"string","enum":["relevance","modified_descending","modified_ascending","title_descending","title_ascending"]}},"required":[]},"requiredScopes":["design:meta:read"],"class":"read"},{"name":"designs.get","description":"Fetch a single design by id.","parameters":{"type":"object","properties":{"design_id":{"type":"string"}},"required":["design_id"]},"requiredScopes":["design:meta:read"],"class":"read"},{"name":"designs.pages.list","description":"List pages inside a design (paginated by offset/limit).","parameters":{"type":"object","properties":{"design_id":{"type":"string"},"offset":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1,"maximum":200}},"required":["design_id"]},"requiredScopes":["design:content:read"],"class":"read"},{"name":"folders.get","description":"Fetch a folder by id. Use the literal \"root\" to read the user root folder.","parameters":{"type":"object","properties":{"folder_id":{"type":"string"}},"required":["folder_id"]},"requiredScopes":["folder:read"],"class":"read"},{"name":"folders.items.list","description":"List items (designs, folders, images) inside a folder.","parameters":{"type":"object","properties":{"folder_id":{"type":"string"},"continuation":{"type":"string"},"item_types":{"type":"string","description":"Comma-separated list: design, folder, image."}},"required":["folder_id"]},"requiredScopes":["folder:read"],"class":"read"},{"name":"assets.get","description":"Fetch an asset by id.","parameters":{"type":"object","properties":{"asset_id":{"type":"string"}},"required":["asset_id"]},"requiredScopes":["asset:read"],"class":"read"},{"name":"asset_uploads.get","description":"Poll an async asset-upload job by id; returns status + asset reference when done.","parameters":{"type":"object","properties":{"job_id":{"type":"string"}},"required":["job_id"]},"requiredScopes":["asset:read"],"class":"read"},{"name":"brand_templates.list","description":"List brand templates the connected user can autofill (Canva Enterprise feature).","parameters":{"type":"object","properties":{"query":{"type":"string"},"continuation":{"type":"string"},"ownership":{"type":"string","enum":["any","owned","shared"]},"sort_by":{"type":"string","enum":["relevance","modified_descending","modified_ascending","title_descending","title_ascending"]}},"required":[]},"requiredScopes":["brandtemplate:meta:read"],"class":"read"},{"name":"brand_templates.get","description":"Fetch a brand template by id.","parameters":{"type":"object","properties":{"brand_template_id":{"type":"string"}},"required":["brand_template_id"]},"requiredScopes":["brandtemplate:meta:read"],"class":"read"},{"name":"brand_templates.dataset","description":"Fetch the autofill dataset definition for a brand template (field names + types).","parameters":{"type":"object","properties":{"brand_template_id":{"type":"string"}},"required":["brand_template_id"]},"requiredScopes":["brandtemplate:content:read"],"class":"read"},{"name":"comments.list","description":"List threaded comments on a design.","parameters":{"type":"object","properties":{"design_id":{"type":"string"},"continuation":{"type":"string"}},"required":["design_id"]},"requiredScopes":["comment:read"],"class":"read"},{"name":"comments.replies.list","description":"List replies underneath a top-level comment on a design.","parameters":{"type":"object","properties":{"design_id":{"type":"string"},"comment_id":{"type":"string"},"continuation":{"type":"string"}},"required":["design_id","comment_id"]},"requiredScopes":["comment:read"],"class":"read"},{"name":"exports.get","description":"Poll an export job by id; returns download URLs when status=success.","parameters":{"type":"object","properties":{"job_id":{"type":"string"}},"required":["job_id"]},"requiredScopes":["design:content:read"],"class":"read"},{"name":"autofills.get","description":"Poll an autofill job by id; returns the resulting design reference when done.","parameters":{"type":"object","properties":{"job_id":{"type":"string"}},"required":["job_id"]},"requiredScopes":["brandtemplate:content:read"],"class":"read"},{"name":"design_imports.get","description":"Poll a design-import job by id; returns the imported design reference when done.","parameters":{"type":"object","properties":{"job_id":{"type":"string"}},"required":["job_id"]},"requiredScopes":["design:content:write"],"class":"read"},{"name":"designs.create","description":"Create a new design. design_type is either { type: \"preset\", name: \"doc\" | \"whiteboard\" | \"presentation\" } or { type: \"custom\", width, height }.","parameters":{"type":"object","properties":{"design_type":{"type":"object","description":"Preset or custom design dimensions per the Canva API schema."},"asset_id":{"type":"string","description":"Optional asset to drop onto the first page."},"title":{"type":"string"}},"required":["design_type"]},"requiredScopes":["design:content:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"folders.create","description":"Create a folder under a parent folder.","parameters":{"type":"object","properties":{"name":{"type":"string"},"parent_folder_id":{"type":"string","description":"Parent folder id (\"root\" for the user root)."}},"required":["name","parent_folder_id"]},"requiredScopes":["folder:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"folders.update","description":"Rename a folder.","parameters":{"type":"object","properties":{"folder_id":{"type":"string"},"name":{"type":"string"}},"required":["folder_id","name"]},"requiredScopes":["folder:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"folders.delete","description":"Delete a folder. The folder must be empty.","parameters":{"type":"object","properties":{"folder_id":{"type":"string"}},"required":["folder_id"]},"requiredScopes":["folder:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"folders.items.move","description":"Move an item (design / folder / image) into a folder.","parameters":{"type":"object","properties":{"to_folder_id":{"type":"string"},"item_id":{"type":"string"}},"required":["to_folder_id","item_id"]},"requiredScopes":["folder:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assets.update","description":"Update asset metadata (name and/or tags).","parameters":{"type":"object","properties":{"asset_id":{"type":"string"},"name":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}},"required":["asset_id"]},"requiredScopes":["asset:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assets.delete","description":"Delete an asset by id.","parameters":{"type":"object","properties":{"asset_id":{"type":"string"}},"required":["asset_id"]},"requiredScopes":["asset:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Post a top-level comment on a design.","parameters":{"type":"object","properties":{"design_id":{"type":"string"},"message":{"type":"string"},"assignee_id":{"type":"string","description":"Optional Canva user id to assign the comment to."}},"required":["design_id","message"]},"requiredScopes":["comment:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.reply","description":"Reply to a comment thread on a design.","parameters":{"type":"object","properties":{"design_id":{"type":"string"},"comment_id":{"type":"string"},"message":{"type":"string"}},"required":["design_id","comment_id","message"]},"requiredScopes":["comment:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"exports.create","description":"Kick off an export job. format is { type: \"pdf\" | \"jpg\" | \"png\" | \"pptx\" | \"mp4\" | \"gif\", ...extra }. Returns { job: { id, status } } — poll exports.get to get download URLs.","parameters":{"type":"object","properties":{"design_id":{"type":"string"},"format":{"type":"object","description":"Canva export format object."}},"required":["design_id","format"]},"requiredScopes":["design:content:read"],"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"autofills.create","description":"Kick off an autofill job: render a brand template with structured field data. Returns { job: { id, status } } — poll autofills.get for the resulting design.","parameters":{"type":"object","properties":{"brand_template_id":{"type":"string"},"data":{"type":"object","description":"Keyed by dataset field name → field value."},"title":{"type":"string"}},"required":["brand_template_id","data"]},"requiredScopes":["brandtemplate:content:read","design:content:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"asset_uploads.create","description":"Create an asset-upload job from a remote URL. Returns { job: { id, status } } — poll asset_uploads.get for the asset reference. Direct binary uploads use a separate multipart endpoint not exposed here.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Filename for the uploaded asset."},"url":{"type":"string","format":"uri","description":"Public URL Canva should fetch from."},"tags":{"type":"array","items":{"type":"string"}}},"required":["name","url"]},"requiredScopes":["asset:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"capsule-crm","displayName":"Capsule CRM","description":"Manage Capsule CRM v2: search and write parties (people/organisations), opportunities, kases (cases), tasks, and entries (notes/activities).","auth":{"kind":"oauth2","authorizationUrl":"https://api.capsulecrm.com/oauth/authorise","tokenUrl":"https://api.capsulecrm.com/oauth/token","scopes":["read","write"],"clientIdEnv":"CAPSULE_CRM_OAUTH_CLIENT_ID","clientSecretEnv":"CAPSULE_CRM_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"parties.search","description":"Search parties (people and organisations) by free-text query, email, or tag. Returns up to 100 per page.","parameters":{"type":"object","properties":{"q":{"type":"string","description":"Free-text search term."},"email":{"type":"string"},"tag":{"type":"string"},"embed":{"type":"string","description":"Comma-separated list of nested resources to embed in the response (e.g. fields,tags,missingImportantFields)."},"page":{"type":"integer","minimum":1,"description":"One-based page number."},"perPage":{"type":"integer","minimum":1,"maximum":100,"description":"Page size. Capsule caps at 100 per page."}}},"requiredScopes":["read"],"class":"read"},{"name":"parties.get","description":"Fetch a single party (person or organisation) by id.","parameters":{"type":"object","properties":{"partyId":{"type":"string"},"embed":{"type":"string","description":"Comma-separated list of nested resources to embed in the response (e.g. fields,tags,missingImportantFields)."}},"required":["partyId"]},"requiredScopes":["read"],"class":"read"},{"name":"parties.create","description":"Create a party. The `party` body envelope must specify `type: \"person\"` or `type: \"organisation\"`.","parameters":{"type":"object","properties":{"party":{"type":"object","description":"Capsule party envelope (firstName/lastName for person, name for organisation, plus emailAddresses, phoneNumbers, addresses, etc.)."}},"required":["party"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"parties.update","description":"Update a party by id. Only the fields present in `party` are modified.","parameters":{"type":"object","properties":{"partyId":{"type":"string"},"party":{"type":"object"}},"required":["partyId","party"]},"requiredScopes":["write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"opportunities.search","description":"Search opportunities (deals) by free-text query, milestone, or party.","parameters":{"type":"object","properties":{"q":{"type":"string"},"milestone":{"type":"string","description":"Milestone id."},"party":{"type":"string","description":"Party id of the linked party."},"embed":{"type":"string","description":"Comma-separated list of nested resources to embed in the response (e.g. fields,tags,missingImportantFields)."},"page":{"type":"integer","minimum":1,"description":"One-based page number."},"perPage":{"type":"integer","minimum":1,"maximum":100,"description":"Page size. Capsule caps at 100 per page."}}},"requiredScopes":["read"],"class":"read"},{"name":"opportunities.create","description":"Create an opportunity. The envelope must include `party.id` (linked party) and `milestone.id`.","parameters":{"type":"object","properties":{"opportunity":{"type":"object","description":"Capsule opportunity envelope (name, description, party {id}, milestone {id}, value {amount, currency}, expectedCloseOn, probability)."}},"required":["opportunity"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.update","description":"Update an opportunity by id (move milestone, change value, edit description, etc.).","parameters":{"type":"object","properties":{"opportunityId":{"type":"string"},"opportunity":{"type":"object"}},"required":["opportunityId","opportunity"]},"requiredScopes":["write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"kases.search","description":"Search kases (cases) by free-text query, status, or party.","parameters":{"type":"object","properties":{"q":{"type":"string"},"status":{"type":"string","enum":["OPEN","CLOSED"]},"party":{"type":"string"},"embed":{"type":"string","description":"Comma-separated list of nested resources to embed in the response (e.g. fields,tags,missingImportantFields)."},"page":{"type":"integer","minimum":1,"description":"One-based page number."},"perPage":{"type":"integer","minimum":1,"maximum":100,"description":"Page size. Capsule caps at 100 per page."}}},"requiredScopes":["read"],"class":"read"},{"name":"kases.create","description":"Create a kase (case). The envelope must include `party.id`.","parameters":{"type":"object","properties":{"kase":{"type":"object","description":"Capsule kase envelope (name, description, party {id}, status, owner {id}, expectedCloseOn)."}},"required":["kase"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"kases.update","description":"Update a kase by id.","parameters":{"type":"object","properties":{"kaseId":{"type":"string"},"kase":{"type":"object"}},"required":["kaseId","kase"]},"requiredScopes":["write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.list","description":"List tasks, optionally filtered by status or owner.","parameters":{"type":"object","properties":{"status":{"type":"string","enum":["OPEN","COMPLETED","PENDING"]},"owner":{"type":"string","description":"User id of the task owner."},"embed":{"type":"string","description":"Comma-separated list of nested resources to embed in the response (e.g. fields,tags,missingImportantFields)."},"page":{"type":"integer","minimum":1,"description":"One-based page number."},"perPage":{"type":"integer","minimum":1,"maximum":100,"description":"Page size. Capsule caps at 100 per page."}}},"requiredScopes":["read"],"class":"read"},{"name":"tasks.create","description":"Create a task. May be linked to a party, opportunity, or kase via the envelope.","parameters":{"type":"object","properties":{"task":{"type":"object","description":"Capsule task envelope (description, detail, dueOn, dueTime, category {id}, owner {id}, party {id}?, opportunity {id}?, kase {id}?)."}},"required":["task"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update a task by id (reassign, change due date, mark completed, etc.).","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"task":{"type":"object"}},"required":["taskId","task"]},"requiredScopes":["write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"entries.create","description":"Create an entry (note or activity) against a party, opportunity, or kase. The envelope `type` must be `note` for free-text notes.","parameters":{"type":"object","properties":{"entry":{"type":"object","description":"Capsule entry envelope (type: \"note\", content, party {id}? / opportunity {id}? / kase {id}?, activityType {id}?)."}},"required":["entry"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.list","description":"List Capsule users in the account (for owner assignment lookups).","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1,"description":"One-based page number."},"perPage":{"type":"integer","minimum":1,"maximum":100,"description":"Page size. Capsule caps at 100 per page."}}},"requiredScopes":["read"],"class":"read"}]},{"kind":"captain-data","displayName":"Captain Data","description":"Launch Captain Data workflows and fetch job results via the public API.","auth":{"kind":"api-key","hint":"Captain Data API key (x-api-key header) tied to a project."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"launchWorkflow","description":"Launch a Captain Data workflow with the provided inputs and steps.","parameters":{"type":"object","properties":{"job":{"type":"string","description":"Workflow (job) UUID to launch."},"jobName":{"type":"string","description":"Optional run label surfaced in the Captain Data UI."},"inputs":{"type":"object","description":"Workflow inputs keyed by input name.","additionalProperties":true},"steps":{"type":"object","description":"Per-step configuration keyed by step id.","additionalProperties":true},"delay":{"type":"number","description":"Delay in seconds before execution begins."}},"required":["job","inputs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"getJobResults","description":"Fetch the results of a previously launched Captain Data workflow run.","parameters":{"type":"object","properties":{"job":{"type":"string","description":"Workflow (job) UUID the run belongs to."},"runId":{"type":"string","description":"Run UUID returned by launchWorkflow."}},"required":["job","runId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"cartloom","displayName":"Cartloom","description":"Manage discounts, products, and orders on your Cartloom store.","auth":{"kind":"api-key","hint":"Cartloom API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"discounts.create","description":"Create a new discount code.","parameters":{"type":"object","properties":{"title":{"type":"string"},"enabled":{"type":"boolean"},"auto":{"type":"boolean"},"unlimited":{"type":"boolean"},"selfDestruct":{"type":"boolean"},"applyOnce":{"type":"boolean"},"type":{"type":"string"},"amount":{"type":"number"},"target":{"type":"string"},"startDate":{"type":"string"},"stopDate":{"type":"string"},"code":{"type":"string"},"targetPids":{"type":"array","items":{"type":"string"}},"targetAmount":{"type":"number"},"targetQuantity":{"type":"number"},"allowance":{"type":"number"}},"required":["title","enabled","auto","unlimited","selfDestruct","applyOnce","type","amount","target","startDate","stopDate"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"discounts.update","description":"Update an existing discount code by id.","parameters":{"type":"object","properties":{"discountId":{"type":"string"},"title":{"type":"string"},"enabled":{"type":"boolean"},"auto":{"type":"boolean"},"unlimited":{"type":"boolean"},"selfDestruct":{"type":"boolean"},"applyOnce":{"type":"boolean"},"type":{"type":"string"},"amount":{"type":"number"},"target":{"type":"string"},"startDate":{"type":"string"},"stopDate":{"type":"string"},"code":{"type":"string"},"targetPids":{"type":"array","items":{"type":"string"}},"targetAmount":{"type":"number"},"targetQuantity":{"type":"number"},"allowance":{"type":"number"}},"required":["discountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"discounts.delete","description":"Delete a discount code by id.","parameters":{"type":"object","properties":{"discountId":{"type":"string"}},"required":["discountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.refund","description":"Issue a refund against a Cartloom order by invoice id.","parameters":{"type":"object","properties":{"invoice":{"type":"string","description":"Cartloom order invoice id."},"amount":{"type":"number","description":"Refund amount; omit for a full refund."},"reason":{"type":"string"}},"required":["invoice"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"discounts.get","description":"Retrieve a specific discount by ID.","parameters":{"type":"object","properties":{"discountId":{"type":"string"}},"required":["discountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"discounts.list","description":"List all discounts.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.get","description":"Retrieve a specific order by invoice ID.","parameters":{"type":"object","properties":{"invoice":{"type":"string"}},"required":["invoice"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.listByDate","description":"List orders within a date range.","parameters":{"type":"object","properties":{"start":{"type":"string"},"end":{"type":"string"}},"required":["start"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.searchByEmail","description":"Search for orders by email address.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.list","description":"List all products in your Cartloom store.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"cashfree-payments","displayName":"Cashfree Payments","description":"Cashfree Payments integration for processing payments, refunds, and managing payment links and cashgrams.","auth":{"kind":"api-key","hint":"Cashfree credential JSON with clientId and clientSecret."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"orders.create","description":"Create an order in Cashfree PG.","parameters":{"type":"object","properties":{"orderAmount":{"type":"number"},"orderCurrency":{"type":"string"},"customerId":{"type":"string"},"customerPhone":{"type":"string"},"customerEmail":{"type":"string"},"customerName":{"type":"string"},"orderId":{"type":"string"},"orderNote":{"type":"string"},"orderExpiryTime":{"type":"string"},"returnUrl":{"type":"string"},"notifyUrl":{"type":"string"},"paymentMethods":{"type":"string"},"orderTags":{"type":"object"},"orderSplits":{"type":"array"}},"required":["orderAmount","orderCurrency","customerId","customerPhone"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payment_links.create","description":"Create a Cashfree payment link.","parameters":{"type":"object","properties":{"linkId":{"type":"string"},"linkAmount":{"type":"number"},"linkCurrency":{"type":"string"},"linkPurpose":{"type":"string"},"customerName":{"type":"string"},"customerEmail":{"type":"string"},"customerPhone":{"type":"string"},"linkPartialPayments":{"type":"boolean"},"linkMinimumPartialAmount":{"type":"number"},"linkExpiryTime":{"type":"string"},"sendSms":{"type":"boolean"},"sendEmail":{"type":"boolean"},"linkAutoReminders":{"type":"boolean"},"upiIntent":{"type":"boolean"},"linkNotes":{"type":"object"},"notifyUrl":{"type":"string"},"returnUrl":{"type":"string"}},"required":["linkId","linkAmount","linkCurrency","linkPurpose","customerPhone"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"refunds.create","description":"Create a refund against a Cashfree order.","parameters":{"type":"object","properties":{"orderId":{"type":"string"},"refundId":{"type":"string"},"refundAmount":{"type":"number"},"refundNote":{"type":"string"},"refundSpeed":{"type":"string"},"refundSplits":{"type":"array"}},"required":["orderId","refundId","refundAmount"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payment_links.cancel","description":"Cancel an ACTIVE Cashfree payment link.","parameters":{"type":"object","properties":{"linkId":{"type":"string"}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payment_links.get","description":"Fetch details for a Cashfree payment link.","parameters":{"type":"object","properties":{"linkId":{"type":"string"}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cashgrams.create","description":"Create a Cashfree Cashgram (payout link).","parameters":{"type":"object","properties":{"cashgramId":{"type":"string"},"amount":{"type":"number"},"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"linkExpiry":{"type":"string"},"remarks":{"type":"string"},"notifyCustomer":{"type":"boolean"}},"required":["cashgramId","amount","name","phone","linkExpiry"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payment_links.orders.list","description":"List orders associated with a payment link.","parameters":{"type":"object","properties":{"linkId":{"type":"string"}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.refunds.list","description":"List all refunds attached to a Cashfree order.","parameters":{"type":"object","properties":{"orderId":{"type":"string"}},"required":["orderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cashgrams.deactivate","description":"Deactivate an existing Cashfree Cashgram.","parameters":{"type":"object","properties":{"cashgramId":{"type":"string"}},"required":["cashgramId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"certopus","displayName":"Certopus","description":"Issue and manage Certopus digital certificates for events and categories.","auth":{"kind":"api-key","hint":"Certopus API key from the workspace integrations panel."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"organisations.list","description":"List organisations the authenticated key has access to.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"events.list","description":"List events under an organisation.","parameters":{"type":"object","properties":{"organisation":{"type":"string"}},"required":["organisation"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"categories.list","description":"List categories under an event.","parameters":{"type":"object","properties":{"organisation":{"type":"string"},"event":{"type":"string"}},"required":["organisation","event"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"credentials.create","description":"Create a credential (certificate) for a recipient inside an event/category, with optional auto-generate and auto-publish.","parameters":{"type":"object","properties":{"organisation":{"type":"string"},"event":{"type":"string"},"category":{"type":"string"},"email":{"type":"string"},"fields":{"type":"object"},"generate":{"type":"boolean"},"publish":{"type":"boolean"}},"required":["organisation","event","category","email","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"credentials.revoke","description":"Revoke a previously issued Certopus credential by id.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Credential identifier."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"credentials.update","description":"Update metadata (fields, generate, publish) on an existing credential.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Credential identifier."},"fields":{"type":"object"},"generate":{"type":"boolean"},"publish":{"type":"boolean"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.create","description":"Create a credential event under an organisation.","parameters":{"type":"object","properties":{"organisation":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"startDate":{"type":"string","description":"ISO start date."},"endDate":{"type":"string","description":"ISO end date."}},"required":["organisation","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"chain-aware","displayName":"ChainAware.AI","description":"Detect risky wallet behavior across blockchain networks.","auth":{"kind":"api-key","hint":"ChainAware.AI API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"wallet.audit","description":"Audit a wallet address for risky behavior.","parameters":{"type":"object","properties":{"network":{"type":"string","description":"Blockchain network (e.g., ethereum, polygon, bsc)"},"walletAddress":{"type":"string","description":"Wallet address to audit"},"contractAddress":{"type":"string","description":"Smart contract address to check"},"onlyFraud":{"type":"boolean","description":"Return only fraud-flagged results"}},"required":["network","walletAddress","contractAddress"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"wallet.creditScore","description":"Calculate credit score for a wallet address.","parameters":{"type":"object","properties":{"network":{"type":"string","description":"Blockchain network"},"walletAddress":{"type":"string","description":"Wallet address"}},"required":["network","walletAddress"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"wallet.fraudCheck","description":"Check if a wallet has fraud indicators.","parameters":{"type":"object","properties":{"network":{"type":"string","description":"Blockchain network"},"walletAddress":{"type":"string","description":"Wallet address"},"contractAddress":{"type":"string","description":"Smart contract address"}},"required":["network","walletAddress","contractAddress"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"wallet.rugPullCheck","description":"Detect rug pull patterns in a smart contract.","parameters":{"type":"object","properties":{"network":{"type":"string","description":"Blockchain network"},"contractAddress":{"type":"string","description":"Smart contract address"}},"required":["network","contractAddress"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"wallet.segment","description":"Classify wallet into risk segment.","parameters":{"type":"object","properties":{"network":{"type":"string","description":"Blockchain network"},"walletAddress":{"type":"string","description":"Wallet address"}},"required":["network","walletAddress"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"chainalysis-api","displayName":"Chainalysis Screening API","description":"Screen blockchain addresses against the Chainalysis sanctions list.","auth":{"kind":"api-key","hint":"Chainalysis Public API token (sent via the `Token` header)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"check.address.sanction","description":"Check whether a blockchain address appears on the Chainalysis sanctions screening list.","parameters":{"type":"object","properties":{"address":{"type":"string","description":"Blockchain address to screen against the sanctions list."}},"required":["address"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false}]},{"kind":"chaindesk","displayName":"Chaindesk","description":"Query Chaindesk agents and datasources, and upload files.","auth":{"kind":"api-key","hint":"Chaindesk API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"agents.query","description":"Query a Chaindesk agent.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The query to send to the agent."},"conversationId":{"type":"string","description":"ID of the conversation. If not provided, a new conversation is created."}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"datasources.query","description":"Query a Chaindesk datasource.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The query to send to the datasource."},"datasourceId":{"type":"string","description":"The ID of the datasource to query."}},"required":["query","datasourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.upload","description":"Upload a file to a Chaindesk datasource.","parameters":{"type":"object","properties":{"datasourceId":{"type":"string","description":"The ID of the datasource to upload to."},"file":{"type":"string","description":"The file content (base64 encoded)."},"filename":{"type":"string","description":"The filename for the uploaded file."}},"required":["datasourceId","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"datasources.create","description":"Upload a new datasource to an agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string","description":"Chaindesk agent id to attach the datasource to."},"name":{"type":"string","description":"Human-readable datasource name."},"type":{"type":"string","description":"Datasource type (e.g. text, file, web_page, web_site)."},"source":{"type":"string","description":"Source content (raw text or URL depending on the type)."},"config":{"type":"object","description":"Optional provider-specific config for crawling / chunking."}},"required":["agentId","name","type","source"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"datasources.delete","description":"Delete a datasource by id.","parameters":{"type":"object","properties":{"datasourceId":{"type":"string","description":"The ID of the datasource to delete."}},"required":["datasourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"agents.create","description":"Create a Chaindesk agent.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Agent display name."},"description":{"type":"string","description":"Agent description."},"modelName":{"type":"string","description":"Model identifier the agent uses."},"prompt":{"type":"string","description":"System prompt for the agent."},"visibility":{"type":"string","enum":["public","private"],"description":"Agent visibility."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"chargebee","displayName":"Chargebee","description":"Manage Chargebee customers and subscriptions on the subscription billing and revenue operations platform.","auth":{"kind":"api-key","hint":"Chargebee full-access API key (Settings → Configure Chargebee → API Keys → Full-Access Key). Stored as base64(\"apiKey:\") so it can be attached as HTTP Basic. The connection must also store the per-site `site` metadata (e.g. \"acme\" for acme.chargebee.com)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"subscription.cancel","description":"Cancel a Chargebee subscription. Supports immediate cancel, end-of-term, and contract-term flows with optional credit / unbilled-charge / receivables handling.","parameters":{"type":"object","properties":{"subscription_id":{"type":"string"},"cancel_option":{"type":"string","enum":["immediately","end_of_term","specific_date"]},"cancel_at":{"type":"integer"},"cancel_reason_code":{"type":"string"},"credit_option_for_current_term_charges":{"type":"string","enum":["none","prorate","full"]},"unbilled_charges_option":{"type":"string","enum":["invoice","delete"]},"contract_term_cancel_option":{"type":"string","enum":["terminate_now","end_of_contract_term"]},"account_receivables_handling":{"type":"string","enum":["no_action","schedule_payment_collection","write_off"]},"refundable_credits_handling":{"type":"string","enum":["no_action","schedule_refund"]},"invoice_date":{"type":"integer"},"subscription_items_to_remove":{"type":"array","items":{"type":"string"}},"termination_fee_item_price_id":{"type":"string"},"termination_fee_quantity":{"type":"integer"},"termination_fee_unit_price":{"type":"integer"},"termination_fee_service_period_days":{"type":"integer"}},"required":["subscription_id","cancel_option"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customer.create","description":"Create a Chargebee customer, optionally with billing address and tax fields.","parameters":{"type":"object","properties":{"id":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"},"company":{"type":"string"},"phone":{"type":"string"},"locale":{"type":"string"},"preferred_currency_code":{"type":"string"},"auto_collection":{"type":"string","enum":["on","off"]},"net_term_days":{"type":"integer"},"allow_direct_debit":{"type":"boolean"},"vat_number":{"type":"string"},"taxability":{"type":"string","enum":["taxable","exempt"]},"invoice_notes":{"type":"string"},"meta_data":{"type":"object"},"billing_address_first_name":{"type":"string"},"billing_address_last_name":{"type":"string"},"billing_address_line1":{"type":"string"},"billing_address_line2":{"type":"string"},"billing_address_city":{"type":"string"},"billing_address_state":{"type":"string"},"billing_address_zip":{"type":"string"},"billing_address_country":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscription.create","description":"Subscribe an existing customer to a Chargebee item price. Supports trials, coupons, PO numbers, and immediate-invoice mode.","parameters":{"type":"object","properties":{"customer_id":{"type":"string"},"item_price_id":{"type":"string"},"quantity":{"type":"integer"},"billing_cycles":{"type":"integer"},"trial_end":{"type":"integer"},"start_date":{"type":"integer"},"coupon_ids":{"type":"array","items":{"type":"string"}},"po_number":{"type":"string"},"payment_source_id":{"type":"string"},"invoice_immediately":{"type":"boolean"},"invoice_notes":{"type":"string"},"meta_data":{"type":"object"}},"required":["customer_id","item_price_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customer.get","description":"Read a Chargebee customer by id.","parameters":{"type":"object","properties":{"customer_id":{"type":"string"}},"required":["customer_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscription.update","description":"Change the plan, addons, or schedule on a Chargebee subscription via subscription_items.","parameters":{"type":"object","properties":{"subscription_id":{"type":"string"},"item_price_id":{"type":"string"},"quantity":{"type":"integer"},"billing_cycles":{"type":"integer"},"replace_items_list":{"type":"boolean"},"trial_end":{"type":"integer"},"end_of_term":{"type":"boolean"},"prorate":{"type":"boolean"},"coupon_ids":{"type":"array","items":{"type":"string"}},"po_number":{"type":"string"},"invoice_immediately":{"type":"boolean"},"invoice_notes":{"type":"string"},"meta_data":{"type":"object"}},"required":["subscription_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscription.pause","description":"Pause an active Chargebee subscription with optional resume date and unbilled-charge handling.","parameters":{"type":"object","properties":{"subscription_id":{"type":"string"},"pause_option":{"type":"string","enum":["immediately","end_of_term","specific_date"]},"pause_date":{"type":"integer"},"resume_date":{"type":"integer"},"unbilled_charges_handling":{"type":"string","enum":["no_action","invoice","add_to_unbilled_charges"]},"invoice_dunning_handling":{"type":"string","enum":["no_action","stop_dunning"]}},"required":["subscription_id","pause_option"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscription.resume","description":"Resume a paused Chargebee subscription.","parameters":{"type":"object","properties":{"subscription_id":{"type":"string"},"resume_option":{"type":"string","enum":["immediately","specific_date"]},"resume_date":{"type":"integer"},"charges_handling":{"type":"string","enum":["no_action","invoice_immediately","add_to_unbilled_charges"]},"unpaid_invoices_handling":{"type":"string","enum":["no_action","schedule_payment_collection"]}},"required":["subscription_id","resume_option"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoice.refund","description":"Refund an invoice. Supports partial amount and customer-notes annotation.","parameters":{"type":"object","properties":{"invoice_id":{"type":"string"},"refund_amount":{"type":"integer","description":"Amount in the smallest currency unit (cents)."},"comment":{"type":"string"},"customer_notes":{"type":"string"},"credit_note_reason_code":{"type":"string","enum":["write_off","subscription_change","subscription_cancellation","subscription_pause","chargeback","product_unsatisfactory","service_unsatisfactory","order_change","order_cancellation","waiver","other","fraudulent"]}},"required":["invoice_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"chargekeep","displayName":"ChargeKeep","description":"Manage ChargeKeep (Sperse) contacts, subscriptions, invoices, and products for recurring and one-time payments via Stripe / PayPal.","auth":{"kind":"api-key","hint":"ChargeKeep account API key. Sent as the X-API-Key request header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.upsert","description":"Add or update a ChargeKeep contact. The contactXref string acts as an external idempotency reference: passing the same xref updates the existing record.","parameters":{"type":"object","properties":{"contactId":{"type":"integer"},"contactXref":{"type":"string"},"matchExisting":{"type":"boolean"},"ignoreInvalidValues":{"type":"boolean"},"importType":{"type":"string","description":"Contact type. e.g. Client, Lead, Vendor."},"createUser":{"type":"boolean"},"sendWelcomeEmail":{"type":"boolean"},"userPassword":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"companyName":{"type":"string"}},"required":["importType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.upsert.extended","description":"Extended contact upsert that accepts the full ChargeKeep contact profile (name parts, address, demographic fields, lists, custom fields).","parameters":{"type":"object","properties":{"contactId":{"type":"integer"},"contactXref":{"type":"string"},"matchExisting":{"type":"boolean"},"overrideLists":{"type":"boolean"},"ignoreInvalidValues":{"type":"boolean"},"importType":{"type":"string"},"createUser":{"type":"boolean"},"sendWelcomeEmail":{"type":"boolean"},"userPassword":{"type":"string"},"namePrefix":{"type":"string"},"firstName":{"type":"string"},"middleName":{"type":"string"},"lastName":{"type":"string"},"nickName":{"type":"string"},"nameSuffix":{"type":"string"},"gender":{"type":"string"},"dob":{"type":"string","description":"YYYY-MM-DD or MM-DD-YYYY."},"ssn":{"type":"string"},"drivingLicense":{"type":"string"},"drivingLicenseState":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"companyName":{"type":"string"},"address":{"type":"object","properties":{"line1":{"type":"string"},"line2":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"},"country":{"type":"string"}}},"customFields":{"type":"object"}},"required":["importType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.upsert","description":"Create or update a subscription for a ChargeKeep contact. Subscriptions are billed through the connected Stripe or PayPal account.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"integer"},"subscriptionXref":{"type":"string"},"contactId":{"type":"integer"},"contactXref":{"type":"string"},"productCode":{"type":"string"},"planCode":{"type":"string"},"amount":{"type":"number"},"currency":{"type":"string"},"billingInterval":{"type":"string","enum":["day","week","month","year"]},"intervalCount":{"type":"integer","minimum":1},"startDate":{"type":"string"},"trialDays":{"type":"integer","minimum":0},"status":{"type":"string"}},"required":["productCode"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.create","description":"Create an invoice in ChargeKeep for an existing contact.","parameters":{"type":"object","properties":{"contactId":{"type":"integer"},"contactXref":{"type":"string"},"invoiceXref":{"type":"string"},"currency":{"type":"string"},"dueDate":{"type":"string","description":"YYYY-MM-DD"},"memo":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"productCode":{"type":"string"},"description":{"type":"string"},"quantity":{"type":"number"},"unitPrice":{"type":"number"},"taxRate":{"type":"number"}},"required":["description","quantity","unitPrice"]}}},"required":["items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.create","description":"Create a product (offer) in the ChargeKeep catalog.","parameters":{"type":"object","properties":{"productCode":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"currency":{"type":"string"},"recurring":{"type":"boolean"},"billingInterval":{"type":"string","enum":["day","week","month","year"]},"intervalCount":{"type":"integer","minimum":1},"trialDays":{"type":"integer","minimum":0},"taxable":{"type":"boolean"}},"required":["name","price"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.get","description":"Read full ChargeKeep contact details. Look up by internal contactId or external contactXref.","parameters":{"type":"object","properties":{"contactId":{"type":"integer"},"contactXref":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"chartly","displayName":"Chartly","description":"Generate cached chart images (PNG or SVG) from Chart.js configurations via the Chartly REST API.","auth":{"kind":"api-key","hint":"Chartly API key, sent as a bearer token."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.chart","description":"Create a chart image from a Chart.js configuration. Returns the cached image URL and metadata.","parameters":{"type":"object","properties":{"chart_type":{"type":"string","description":"Chart.js chart type (bar, line, pie, doughnut, radar, polarArea, scatter, bubble)."},"chart_title":{"type":"string","description":"Optional title rendered on the chart."},"labels":{"type":"array","items":{"type":"string"},"description":"Labels for the data points (e.g., [\"Jan\", \"Feb\", \"Mar\"])."},"dataset_label":{"type":"string","description":"Label for the data series."},"data_values":{"type":"array","items":{"type":"number"},"description":"Numeric values for the chart (e.g., [10, 20, 30])."},"background_color":{"type":"string","description":"Background color for data points (e.g., \"#4285F4\" or \"rgba(66,133,244,0.6)\")."},"width":{"type":"integer","minimum":1,"maximum":2000,"description":"Image width in pixels."},"height":{"type":"integer","minimum":1,"maximum":2000,"description":"Image height in pixels."},"format":{"type":"string","enum":["png","svg"],"description":"Output image format."},"background_color_image":{"type":"string","description":"Background color for the whole image (e.g., \"#ffffff\")."},"advanced_config":{"type":"object","description":"Complete Chart.js configuration; overrides the high-level fields above when set."},"chart_id":{"type":"string","description":"Optional client-supplied identifier used for caching and later retrieval."}},"required":["chart_type","labels","dataset_label","data_values","width","height","format"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.chart","description":"Fetch a previously generated chart image by its identifier.","parameters":{"type":"object","properties":{"chart_id":{"type":"string","description":"Identifier returned (or supplied) when the chart was created."},"format":{"type":"string","enum":["png","svg"],"description":"Optional output format override; defaults to the format used at creation."}},"required":["chart_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"update.chart","description":"Update an existing chart with new data, labels, or styling.","parameters":{"type":"object","properties":{"chart_id":{"type":"string","description":"Identifier of the chart to update."},"chart_type":{"type":"string"},"chart_title":{"type":"string"},"labels":{"type":"array","items":{"type":"string"}},"dataset_label":{"type":"string"},"data_values":{"type":"array","items":{"type":"number"}},"background_color":{"type":"string"},"width":{"type":"integer","minimum":1,"maximum":2000},"height":{"type":"integer","minimum":1,"maximum":2000},"format":{"type":"string","enum":["png","svg"]},"background_color_image":{"type":"string"},"advanced_config":{"type":"object"}},"required":["chart_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"delete.chart","description":"Delete a chart by identifier.","parameters":{"type":"object","properties":{"chart_id":{"type":"string","description":"Identifier of the chart to delete."}},"required":["chart_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"share.chart","description":"Share a chart with a recipient via email or generate a shareable link.","parameters":{"type":"object","properties":{"chart_id":{"type":"string","description":"Identifier of the chart to share."},"recipient":{"type":"string","description":"Email address to share with. Omit to generate a public link instead."},"permission":{"type":"string","enum":["view","edit"],"description":"Recipient permission level. Defaults to view."},"message":{"type":"string","description":"Optional message attached to the share invite."}},"required":["chart_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"chat-aid","displayName":"Chat Aid","description":"AI-powered assistant for your knowledge base. Upload documents, ask questions, and manage custom sources.","auth":{"kind":"api-key","hint":"Chat Aid API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"sources.get","description":"Retrieve a custom source by ID.","parameters":{"type":"object","properties":{"sourceId":{"type":"string"}},"required":["sourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sources.add","description":"Add custom sources (upload documents like PDF, Word, Markdown, HTML, Excel, CSV, PowerPoint, images).","parameters":{"type":"object","properties":{"files":{"type":"object"},"teamId":{"type":"string"}},"required":["files"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"questions.ask","description":"Ask questions to the knowledge base. Optionally thread conversations using parentTs and messageTs.","parameters":{"type":"object","properties":{"sourceId":{"type":"string"},"prompt":{"type":"string"},"teamId":{"type":"string"},"parentTs":{"type":"string"},"messageTs":{"type":"string"}},"required":["sourceId","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"chat-data","displayName":"Chat Data","description":"Build and operate AI chatbots: create chatbots with custom training data, send messages, update prompts, retrain, and upload knowledge files.","auth":{"kind":"api-key","hint":"Chat Data workspace API key. Generate one from the Chat Data dashboard → Settings → API."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"chatbot.create","description":"Create a new chatbot. `model` selects the underlying base model; for `custom-data-upload` you may pass `sourceText` and `urlsToScrape`, which are ignored for medical and other custom models. Returns the new chatbot id.","parameters":{"type":"object","properties":{"chatbotName":{"type":"string","description":"The display name of the chatbot to create."},"model":{"type":"string","description":"Base model id. Examples: custom-data-upload, medical-chat-human, medical-chat-vet, custom-model. Vendor-specific values pass through unchanged."},"sourceText":{"type":"string","description":"Training text. Only used when model = custom-data-upload. Character limits depend on the workspace plan."},"urlsToScrape":{"type":"array","description":"URLs to crawl and ingest as training data. Each must start with http:// or https://.","items":{"type":"string"}},"customBackend":{"type":"string","description":"Optional custom backend URL the chatbot delegates to instead of the platform model."},"bearer":{"type":"string","description":"Optional bearer token forwarded to the custom backend."},"initialMessages":{"type":"array","description":"Greeting messages the chatbot opens new conversations with.","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"suggestedMessages":{"type":"array","description":"Quick-reply chips shown in the chatbot UI.","items":{"type":"string"}},"visibility":{"type":"string","description":"Access scope: private, public, or unlisted (vendor-specific values pass through)."},"temperature":{"type":"number","description":"Model temperature 0-1; higher = more random."}},"required":["chatbotName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"chatbot.delete","description":"Delete a chatbot by id. Destroys the chatbot, its training data, and its conversation history. Not reversible.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Target chatbot id."}},"required":["chatbotId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chatbot.send_message","description":"Send a user message to a chatbot and receive a generated reply. Pass conversationId to continue an existing conversation; omit it to start a new one. Optional attachedFiles supports up to three inline file references.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Target chatbot id."},"messageContent":{"type":"string","description":"The user message body."},"messageRole":{"type":"string","description":"Sender role. Typical values: user, assistant, system."},"conversationId":{"type":"string","description":"Existing conversation id to continue. Omit to start a new conversation."},"includeReasoning":{"type":"boolean","description":"Include reasoning trace in the response, overriding the chatbot default."},"baseModel":{"type":"string","description":"Per-call model override."},"basePrompt":{"type":"string","description":"Per-call system-prompt override."},"openAIFormat":{"type":"boolean","description":"Return the response in OpenAI chat-completion shape."},"appendMessages":{"type":"boolean","description":"Append to prior messages with the same conversationId instead of starting fresh."},"attachedFiles":{"type":"array","description":"Up to 3 attached files (name + optional pre-parsed content).","items":{"type":"object","properties":{"name":{"type":"string"},"content":{"type":"string"}},"required":["name"]}}},"required":["chatbotId","messageContent"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"chatbot.update_base_prompt","description":"Overwrite the chatbot base (system) prompt. The change applies to all subsequent conversations; in-flight conversations keep the prior prompt.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Target chatbot id."},"basePrompt":{"type":"string","description":"New base prompt body."}},"required":["chatbotId","basePrompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chatbot.retrain","description":"Kick off a retrain job that re-ingests the chatbot training data (source text, scraped URLs, uploaded files, Q&As, product catalog). Returns a job id the caller can poll for completion.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Target chatbot id."},"sourceText":{"type":"string","description":"Optional replacement training text."},"urlsToScrape":{"type":"array","description":"Optional replacement URL list to crawl.","items":{"type":"string"}},"products":{"type":"array","description":"Optional product catalog entries.","items":{"type":"object","properties":{"id":{"type":"string"},"information":{"type":"object"}},"required":["id","information"]}},"qAndAs":{"type":"array","description":"Optional Q&A training pairs.","items":{"type":"object","properties":{"question":{"type":"string"},"answer":{"type":"string"}},"required":["question","answer"]}},"deletes":{"type":"array","description":"Knowledge chunks to remove from the chatbot during retrain.","items":{"type":"object","properties":{"type":{"type":"string"},"id":{"type":"string"}},"required":["type"]}},"extractMainContent":{"type":"boolean","description":"For URL ingestion: strip headers/footers/nav/sidebar/ads automatically."},"includeOnlyTags":{"type":"string","description":"CSS selectors to exclusively extract during crawling (comma-separated)."},"excludeTags":{"type":"string","description":"CSS selectors to exclude during crawling (comma-separated)."},"cookies":{"type":"string","description":"Cookies for authenticated crawling (semicolon-separated name=value pairs)."}},"required":["chatbotId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chatbot.upload_file","description":"Upload a file to a chatbot knowledge base. The vendor expects multipart/form-data; the file payload is passed through as the `file` argument (path, base64, or pre-resolved file reference depending on the runtime). Returns the created file id.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Target chatbot id."},"name":{"type":"string","description":"File name (must include the extension for content-type sniffing)."},"file":{"description":"File payload reference (runtime-defined: local path, base64 string, or pre-resolved blob handle)."}},"required":["chatbotId","name","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"chatbase","displayName":"Chatbase","description":"Build and manage AI chatbots with custom sources via the Chatbase API.","auth":{"kind":"api-key","hint":"Chatbase secret API key (Bearer token)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"chatbot.create","description":"Create a new Chatbase chatbot with optional source text.","parameters":{"type":"object","properties":{"chatbotName":{"type":"string","description":"Human-readable chatbot name."},"sourceText":{"type":"string","description":"Optional text data used to seed the chatbot training corpus."}},"required":["chatbotName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chatbot.list","description":"List all chatbots owned by the authenticated Chatbase account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversations.search","description":"Search conversations across a chatbot, optionally filtering by source and date.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Chatbase chatbot id."},"filteredSources":{"type":"string","description":"Comma-separated list of conversation sources to include."},"startDate":{"type":"string","description":"ISO start date (inclusive)."},"endDate":{"type":"string","description":"ISO end date (inclusive)."},"page":{"type":"integer","description":"Pagination page (default 1)."},"size":{"type":"integer","description":"Page size (default 10, max 100)."}},"required":["chatbotId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"chatbot.prompt","description":"Send a prompt to a chatbot and receive a generated response.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Chatbase chatbot id."},"message":{"type":"string","description":"User prompt to send to the chatbot."},"temperature":{"type":"number","description":"Sampling temperature between 0 and 1; higher values produce more random output."},"conversationId":{"type":"string","description":"Optional id for grouping turns into a persisted conversation."},"model":{"type":"string","description":"Optional model identifier to override the chatbot default."}},"required":["chatbotId","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chatbot.update","description":"Update a chatbot configuration (name, model, prompt, temperature, visibility).","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Chatbase chatbot id."},"chatbotName":{"type":"string","description":"New chatbot name."},"model":{"type":"string","description":"Model identifier to use."},"basePrompt":{"type":"string","description":"System prompt."},"temperature":{"type":"number"},"visibility":{"type":"string","enum":["public","private"]}},"required":["chatbotId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chatbot.delete","description":"Delete a chatbot.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Chatbase chatbot id."}},"required":["chatbotId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sources.upload","description":"Upload a knowledge source (text, URL, or file content) to a chatbot.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Chatbase chatbot id."},"type":{"type":"string","enum":["text","url","file"],"description":"Source type."},"content":{"type":"string","description":"Raw text, URL, or base64-encoded file content depending on type."},"filename":{"type":"string","description":"Optional filename for file uploads."}},"required":["chatbotId","type","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sources.delete","description":"Delete a knowledge source from a chatbot.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Chatbase chatbot id."},"sourceId":{"type":"string","description":"Knowledge source id to delete."}},"required":["chatbotId","sourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"chatling","displayName":"Chatling","description":"Send messages to Chatling chatbots, provision new chatbots, and poll conversation and contact streams from a Chatling workspace.","auth":{"kind":"api-key","hint":"Chatling API key (Workspace Settings → API Keys). Sent as a bearer token on every request."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"send.message","description":"Send a user message to a configured Chatling chatbot and receive the assistant response synthesized over the chatbot’s trained corpus. Each call is a metered query against the tenant plan.","parameters":{"type":"object","properties":{"chatbot_id":{"type":"string","description":"ID of the chatbot to send the message to (workspace → chatbot → settings)."},"message":{"type":"string","description":"The user message to send to the chatbot."},"session_id":{"type":"string","description":"Conversation session ID. Pass the same value across turns to maintain context; omit or rotate for a fresh conversation."},"temperature":{"type":"number","description":"Controls response randomness (0 = focused, 1 = creative). Defaults to the chatbot configuration when omitted."},"instructions":{"type":"string","description":"Optional per-call instructions that augment the chatbot’s base system prompt for this turn only."}},"required":["chatbot_id","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"create.chatbot","description":"Provision a new Chatling chatbot in the authenticated workspace. Returns the new chatbot ID, which the caller should persist before sending messages.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Human-readable name for the new chatbot."},"message":{"type":"string","description":"Initial welcome message the chatbot greets users with."},"temperature":{"type":"number","description":"Default response temperature (0 = focused, 1 = creative). Optional; defaults to 0."},"instructions":{"type":"object","description":"Additional instructions object tailoring the chatbot’s behaviour (system prompt, persona, refusal policy)."}},"required":["name","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"conversations.list","description":"List recent conversations for a Chatling chatbot. Backs the activepieces \"new conversation\" trigger — callers poll this endpoint and diff against the last observed conversation ID.","parameters":{"type":"object","properties":{"chatbot_id":{"type":"string","description":"ID of the chatbot whose conversations to list."},"limit":{"type":"integer","description":"Maximum number of conversations to return (server-capped)."},"cursor":{"type":"string","description":"Opaque pagination cursor returned by a prior response."}},"required":["chatbot_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.list","description":"List recent contacts captured by a Chatling chatbot (users who left an email or identifier in chat). Backs the activepieces \"new contact\" trigger.","parameters":{"type":"object","properties":{"chatbot_id":{"type":"string","description":"ID of the chatbot whose contacts to list."},"limit":{"type":"integer","description":"Maximum number of contacts to return (server-capped)."},"cursor":{"type":"string","description":"Opaque pagination cursor returned by a prior response."}},"required":["chatbot_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"chatnode","displayName":"ChatNode","description":"Ask a trained ChatNode AI chatbot a question and receive a generated reply grounded in its workspace knowledge base.","auth":{"kind":"api-key","hint":"ChatNode workspace API key. Generate one from the ChatNode dashboard → Settings → API."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"chatbot.ask","description":"Send a user message to a trained ChatNode bot and receive a generated reply. Pass `chatSessionId` to continue an existing conversation; omit it to start a new session (ChatNode mints a fresh id server-side).","parameters":{"type":"object","properties":{"botId":{"type":"string","description":"Target bot id. Find it in the ChatNode dashboard under the bot URL (…/bots/{botId})."},"message":{"type":"string","description":"The user message to send to the bot."},"chatSessionId":{"type":"string","description":"Optional chat session id to keep a single conversation across calls. Find it in the chat URL after `/chats/`. If omitted, ChatNode generates a new session id and returns it on the response."}},"required":["botId","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"chatsistant","displayName":"Chatsistant","description":"Send messages to a Chatsistant chatbot.","auth":{"kind":"api-key","hint":"Chatsistant API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"message.send","description":"Send a message to a Chatsistant chatbot.","parameters":{"type":"object","properties":{"chatbot_uuid":{"type":"string"},"query":{"type":"string"},"session_uuid":{"type":"string"},"markdown":{"type":"boolean"}},"required":["chatbot_uuid","query","markdown"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversation.create","description":"Start a new Chatsistant conversation session for a chatbot.","parameters":{"type":"object","properties":{"chatbot_uuid":{"type":"string"},"metadata":{"type":"object"}},"required":["chatbot_uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"message.delete","description":"Delete a message from a Chatsistant conversation.","parameters":{"type":"object","properties":{"message_uuid":{"type":"string"}},"required":["message_uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"chatwoot","displayName":"Chatwoot","description":"Receive and reply to customer messages with Chatwoot.","auth":{"kind":"api-key","hint":"Chatwoot user API access token (Profile Settings → API Access Token). Sent as the `api_access_token` header."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"send.message","description":"Send a message (or private note) into an existing Chatwoot conversation.","parameters":{"type":"object","properties":{"accountId":{"type":"number","description":"Numeric Chatwoot account ID (visible in the dashboard URL)."},"conversationId":{"type":"number","description":"Numeric conversation display ID."},"content":{"type":"string","description":"Text message body to send."},"private":{"type":"boolean","description":"If true, posts as a private note visible only to agents, not to the contact."},"message_type":{"type":"string","enum":["outgoing","incoming"],"description":"Direction of the message. Defaults to `outgoing` (agent → contact)."}},"required":["accountId","conversationId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"toggle_status","description":"Toggle the status of an existing Chatwoot conversation (open, resolved, or pending).","parameters":{"type":"object","properties":{"account_id":{"type":"number","description":"Numeric Chatwoot account ID (visible in the dashboard URL)."},"conversation_id":{"type":"number","description":"Numeric conversation display ID."},"status":{"type":"string","enum":["open","resolved","pending"],"description":"New conversation status to apply."}},"required":["account_id","conversation_id","status"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assign_conversation","description":"Assign (or reassign) an existing Chatwoot conversation to a teammate by user id.","parameters":{"type":"object","properties":{"account_id":{"type":"number","description":"Numeric Chatwoot account ID (visible in the dashboard URL)."},"conversation_id":{"type":"number","description":"Numeric conversation display ID."},"assignee_id":{"type":"number","description":"Numeric user id of the Chatwoot teammate to assign the conversation to."}},"required":["account_id","conversation_id","assignee_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"checkout","displayName":"Checkout.com","description":"Manage Checkout.com customers, payment links, payouts, refunds, and payment lookups via the Unified Payments API.","auth":{"kind":"api-key","hint":"Checkout.com secret key (e.g., sk_...)."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.customer","description":"Create a customer record on Checkout.com.","parameters":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"},"phone":{"type":"object","properties":{"country_code":{"type":"string"},"number":{"type":"string"}}},"metadata":{"type":"object"},"default":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.customer","description":"Update an existing Checkout.com customer.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"phone":{"type":"object","properties":{"country_code":{"type":"string"},"number":{"type":"string"}}},"metadata":{"type":"object"},"default":{"type":"string"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.payment.link","description":"Create a hosted payment link customers can use to pay.","parameters":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"reference":{"type":"string"},"description":{"type":"string"},"billing":{"type":"object","properties":{"address":{"type":"object","properties":{"country":{"type":"string"},"address_line1":{"type":"string"},"address_line2":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"}}},"phone":{"type":"object","properties":{"country_code":{"type":"string"},"number":{"type":"string"}}}}},"customer":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"}}},"expires_in":{"type":"number"},"display_name":{"type":"string"},"return_url":{"type":"string"},"metadata":{"type":"object"}},"required":["amount","currency"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.payout","description":"Create a payout disbursing funds to a destination.","parameters":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"reference":{"type":"string"},"description":{"type":"string"},"source":{"type":"object"},"destination":{"type":"object"},"billing_descriptor":{"type":"object"},"metadata":{"type":"object"}},"required":["amount","currency","destination"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"refund.payment","description":"Refund a previously captured payment in full or in part.","parameters":{"type":"object","properties":{"paymentId":{"type":"string"},"amount":{"type":"number"},"reference":{"type":"string"},"metadata":{"type":"object"}},"required":["paymentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.payment.details","description":"Fetch the full payment object for a given payment id.","parameters":{"type":"object","properties":{"paymentId":{"type":"string"}},"required":["paymentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.payment.actions","description":"List the actions (authorize, capture, void, refund) recorded against a payment.","parameters":{"type":"object","properties":{"paymentId":{"type":"string"}},"required":["paymentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"chess-com","displayName":"Chess.com","description":"Read public Chess.com profiles, ratings, games, puzzles, leaderboards, clubs, countries, tournaments, and streaming data without credentials.","auth":{"kind":"none"},"category":"other","defaultConsistencyModel":"cache","rateLimit":{"requests":60,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"get.player.profile","class":"read","description":"Get the public profile for a Chess.com player.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Chess.com username, without a profile URL.","pattern":"^[A-Za-z0-9_-]{3,25}$"}},"required":["username"],"additionalProperties":false}},{"name":"get.player.stats","class":"read","description":"Get ratings and game statistics for a Chess.com player.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Chess.com username, without a profile URL.","pattern":"^[A-Za-z0-9_-]{3,25}$"}},"required":["username"],"additionalProperties":false}},{"name":"player.current-games","class":"read","description":"List a player’s currently ongoing daily games.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Chess.com username, without a profile URL.","pattern":"^[A-Za-z0-9_-]{3,25}$"}},"required":["username"],"additionalProperties":false}},{"name":"player.game-archives","class":"read","description":"List the monthly game archive URLs available for a player.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Chess.com username, without a profile URL.","pattern":"^[A-Za-z0-9_-]{3,25}$"}},"required":["username"],"additionalProperties":false}},{"name":"player.monthly-games","class":"read","description":"Get a player’s games for one calendar month as structured JSON.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Chess.com username, without a profile URL.","pattern":"^[A-Za-z0-9_-]{3,25}$"},"year":{"type":"integer","minimum":2007,"maximum":2100},"month":{"type":"integer","minimum":1,"maximum":12}},"required":["username","year","month"],"additionalProperties":false}},{"name":"player.monthly-pgn","class":"read","description":"Get a player’s games for one calendar month as a PGN document.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Chess.com username, without a profile URL.","pattern":"^[A-Za-z0-9_-]{3,25}$"},"year":{"type":"integer","minimum":2007,"maximum":2100},"month":{"type":"integer","minimum":1,"maximum":12}},"required":["username","year","month"],"additionalProperties":false}},{"name":"player.clubs","class":"read","description":"List the public clubs a player belongs to.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Chess.com username, without a profile URL.","pattern":"^[A-Za-z0-9_-]{3,25}$"}},"required":["username"],"additionalProperties":false}},{"name":"player.matches","class":"read","description":"List a player’s current and finished team matches.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Chess.com username, without a profile URL.","pattern":"^[A-Za-z0-9_-]{3,25}$"}},"required":["username"],"additionalProperties":false}},{"name":"player.tournaments","class":"read","description":"List a player’s current, registered, and finished tournaments.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Chess.com username, without a profile URL.","pattern":"^[A-Za-z0-9_-]{3,25}$"}},"required":["username"],"additionalProperties":false}},{"name":"get.daily.puzzle","class":"read","description":"Get the current Chess.com daily puzzle.","parameters":{"type":"object","properties":{},"additionalProperties":false}},{"name":"puzzle.random","class":"read","description":"Get a random Chess.com puzzle.","parameters":{"type":"object","properties":{},"additionalProperties":false}},{"name":"players.titled","class":"read","description":"List usernames holding a FIDE or national chess title.","parameters":{"type":"object","properties":{"title":{"type":"string","enum":["GM","WGM","IM","WIM","FM","WFM","NM","WNM","CM","WCM"]}},"required":["title"],"additionalProperties":false}},{"name":"leaderboards.get","class":"read","description":"Get current Chess.com leaderboards.","parameters":{"type":"object","properties":{},"additionalProperties":false}},{"name":"streamers.list","class":"read","description":"List Chess.com streamers and their public channels.","parameters":{"type":"object","properties":{},"additionalProperties":false}},{"name":"country.get","class":"read","description":"Get public information for a country.","parameters":{"type":"object","properties":{"country":{"type":"string","description":"Two-letter ISO 3166 country code.","pattern":"^[A-Za-z]{2}$"}},"required":["country"],"additionalProperties":false}},{"name":"country.players","class":"read","description":"List Chess.com players registered to a country.","parameters":{"type":"object","properties":{"country":{"type":"string","description":"Two-letter ISO 3166 country code.","pattern":"^[A-Za-z]{2}$"}},"required":["country"],"additionalProperties":false}},{"name":"country.clubs","class":"read","description":"List Chess.com clubs registered to a country.","parameters":{"type":"object","properties":{"country":{"type":"string","description":"Two-letter ISO 3166 country code.","pattern":"^[A-Za-z]{2}$"}},"required":["country"],"additionalProperties":false}},{"name":"club.get","class":"read","description":"Get public information for a Chess.com club.","parameters":{"type":"object","properties":{"club":{"type":"string","description":"Chess.com URL id (the final path segment of the public page URL).","pattern":"^[A-Za-z0-9_-]{1,100}$"}},"required":["club"],"additionalProperties":false}},{"name":"club.members","class":"read","description":"List members of a Chess.com club, grouped by activity.","parameters":{"type":"object","properties":{"club":{"type":"string","description":"Chess.com URL id (the final path segment of the public page URL).","pattern":"^[A-Za-z0-9_-]{1,100}$"}},"required":["club"],"additionalProperties":false}},{"name":"club.matches","class":"read","description":"List a Chess.com club’s current and finished team matches.","parameters":{"type":"object","properties":{"club":{"type":"string","description":"Chess.com URL id (the final path segment of the public page URL).","pattern":"^[A-Za-z0-9_-]{1,100}$"}},"required":["club"],"additionalProperties":false}},{"name":"club.admins","class":"read","description":"List public administrators for a Chess.com club.","parameters":{"type":"object","properties":{"club":{"type":"string","description":"Chess.com URL id (the final path segment of the public page URL).","pattern":"^[A-Za-z0-9_-]{1,100}$"}},"required":["club"],"additionalProperties":false}},{"name":"tournament.get","class":"read","description":"Get public details for a Chess.com tournament.","parameters":{"type":"object","properties":{"tournament":{"type":"string","description":"Chess.com URL id (the final path segment of the public page URL).","pattern":"^[A-Za-z0-9_-]{1,100}$"}},"required":["tournament"],"additionalProperties":false}},{"name":"tournament.round","class":"read","description":"Get one round of a Chess.com tournament.","parameters":{"type":"object","properties":{"tournament":{"type":"string","description":"Chess.com URL id (the final path segment of the public page URL).","pattern":"^[A-Za-z0-9_-]{1,100}$"},"round":{"type":"integer","minimum":1}},"required":["tournament","round"],"additionalProperties":false}},{"name":"tournament.group","class":"read","description":"Get one group within a Chess.com tournament round.","parameters":{"type":"object","properties":{"tournament":{"type":"string","description":"Chess.com URL id (the final path segment of the public page URL).","pattern":"^[A-Za-z0-9_-]{1,100}$"},"round":{"type":"integer","minimum":1},"group":{"type":"integer","minimum":1}},"required":["tournament","round","group"],"additionalProperties":false}}]},{"kind":"circle","displayName":"Circle","description":"Create posts and comments, manage members, and look up community details on Circle.so.","auth":{"kind":"api-key","hint":"Circle.so admin V1 API token (sent as Authorization: Token )."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"posts.create","description":"Create a new post in a Circle space.","parameters":{"type":"object","properties":{"space_id":{"type":"integer"},"name":{"type":"string"},"text_body":{"type":"string"},"tiptap_body_json":{"type":"object"},"status":{"type":"string"},"published_at":{"type":"string"},"is_comments_enabled":{"type":"boolean"},"user_email":{"type":"string"}},"required":["space_id","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Create a comment on a Circle post, optionally as a reply to another comment.","parameters":{"type":"object","properties":{"post_id":{"type":"integer"},"body":{"type":"string"},"parent_comment_id":{"type":"integer"},"skip_notifications":{"type":"boolean"},"user_email":{"type":"string"}},"required":["post_id","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"spaces.add_member","description":"Add an existing community member to a Circle space by email.","parameters":{"type":"object","properties":{"space_id":{"type":"integer"},"email":{"type":"string"}},"required":["space_id","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"members.find_by_email","description":"Look up a community member by their email address.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"posts.get","description":"Get details for a Circle post by id.","parameters":{"type":"object","properties":{"post_id":{"type":"integer"}},"required":["post_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"members.get","description":"Get details for a community member by id.","parameters":{"type":"object","properties":{"community_member_id":{"type":"integer"}},"required":["community_member_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"posts.delete","description":"Delete a Circle post by id.","parameters":{"type":"object","properties":{"post_id":{"type":"integer"}},"required":["post_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.delete","description":"Delete a Circle comment by id.","parameters":{"type":"object","properties":{"comment_id":{"type":"integer"}},"required":["comment_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"spaces.create","description":"Create a new space in a Circle community.","parameters":{"type":"object","properties":{"name":{"type":"string"},"space_group_id":{"type":"integer"},"visibility":{"type":"string"},"is_private":{"type":"boolean"},"slug":{"type":"string"}},"required":["name","space_group_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"members.remove","description":"Remove a member from a Circle space.","parameters":{"type":"object","properties":{"space_id":{"type":"integer"},"email":{"type":"string"}},"required":["space_id","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"claude","displayName":"Anthropic Claude","description":"Send messages to Claude AI and extract structured data.","auth":{"kind":"api-key","hint":"Anthropic API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"ask.claude","description":"Send a message to Claude and get a response.","parameters":{"type":"object","properties":{"model":{"type":"string","default":"claude-3-5-sonnet-20241022"},"messages":{"type":"array"},"max_tokens":{"type":"integer","default":1024},"system":{"type":"string"},"temperature":{"type":"number","default":1}},"required":["messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"extract.structured.data","description":"Extract structured data from text using Claude.","parameters":{"type":"object","properties":{"text":{"type":"string"},"schema":{"type":"object"},"model":{"type":"string","default":"claude-3-5-sonnet-20241022"},"max_tokens":{"type":"integer","default":1024}},"required":["text","schema"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"clay","displayName":"Clay","description":"Push rows into a Clay table to trigger GTM enrichment workflows. Clay has no general REST API — this sends a JSON row to your table’s inbound webhook URL; enriched results flow back out via Clay’s HTTP API action (received through the clay webhook provider).","auth":{"kind":"api-key","hint":"Optional Clay table webhook token (x-clay-webhook-auth), shown once when you add a webhook source to a table. Leave blank if the table’s webhook has no token. The per-table webhook URL goes in the connection metadata as `webhookUrl`."},"category":"crm","defaultConsistencyModel":"advisory","capabilities":[{"name":"push_row","class":"mutation","description":"Send a flat JSON object to the configured Clay table webhook URL, creating a new row. Keys map to table columns (no fixed schema). Processing is asynchronous — the response acknowledges receipt but does not return enriched data.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","additionalProperties":true,"description":"Flat JSON whose keys become Clay table columns, e.g. { \"firstName\": \"Jane\", \"email\": \"jane@acme.com\", \"company\": \"Acme\" }."}}]},{"kind":"clearout","displayName":"Clearout","description":"Bulk and instant email validation/verification via the Clearout REST API.","auth":{"kind":"api-key","hint":"Clearout API token (Dashboard → Settings → API Tokens). Sent as Bearer."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"instant.verify","description":"Verify a single email address in real time. Returns deliverability status, role/disposable/free flags, MX records, and a confidence score.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"The email address to verify."},"timeout":{"type":"integer","description":"Optional per-request timeout in seconds (Clearout default applies if omitted). Useful when batching from a queue."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bulk.verify.start","description":"Start a bulk email verification job for a previously-uploaded list. Returns a list_id to poll for status.","parameters":{"type":"object","properties":{"list_id":{"type":"string","description":"Clearout list_id returned by the file upload endpoint."}},"required":["list_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bulk.verify.cancel","description":"Cancel a running bulk email verification job by its list_id.","parameters":{"type":"object","properties":{"list_id":{"type":"string","description":"Clearout list_id of the running bulk job to cancel."}},"required":["list_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"clearoutphone","displayName":"ClearoutPhone","description":"Phone number validation, verification, and carrier detection via ClearoutPhone REST API.","auth":{"kind":"api-key","hint":"ClearoutPhone API token. Sent as Bearer."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"find.phone.number.carrier","description":"Identify the carrier of a phone number.","parameters":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"The phone number to validate (e.g., +447766733573)."}},"required":["phoneNumber"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"find.phone.number.is.mobile","description":"Determine if a phone number is mobile.","parameters":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"The phone number to validate (e.g., +447766733573)."}},"required":["phoneNumber"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"validate.phone.number","description":"Validate a phone number. Returns validation status, carrier info, and mobile flag.","parameters":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"The phone number to validate (e.g., +447766733573)."}},"required":["phoneNumber"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bulk.verify.start","description":"Start a bulk phone verification job for a previously-uploaded list. Returns a list_id to poll for status.","parameters":{"type":"object","properties":{"list_id":{"type":"string","description":"ClearoutPhone list_id returned by the file upload endpoint."}},"required":["list_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bulk.verify.cancel","description":"Cancel a running bulk phone verification job by its list_id.","parameters":{"type":"object","properties":{"list_id":{"type":"string","description":"ClearoutPhone list_id of the running bulk job to cancel."}},"required":["list_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"clicdata","displayName":"ClicData","description":"Connect, transform, automate, visualize and share data from 300+ sources via the ClicData analytics platform.","auth":{"kind":"oauth2","authorizationUrl":"https://app.clicdata.com/oauth/authorize","tokenUrl":"https://api.clicdata.com/oauth/token","scopes":["read","write"],"clientIdEnv":"CLICDATA_OAUTH_CLIENT_ID","clientSecretEnv":"CLICDATA_OAUTH_CLIENT_SECRET"},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.get","description":"Get the authenticated ClicData account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"datasets.list","description":"List ClicData datasets visible to the authenticated account.","parameters":{"type":"object","properties":{"page":{"type":"integer"},"page_size":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"datasets.get","description":"Retrieve a single ClicData dataset by id.","parameters":{"type":"object","properties":{"datasetId":{"type":"string"}},"required":["datasetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"datasets.rows","description":"Read rows from a ClicData dataset.","parameters":{"type":"object","properties":{"datasetId":{"type":"string"},"page":{"type":"integer"},"page_size":{"type":"integer"}},"required":["datasetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"dashboards.list","description":"List ClicData dashboards in the workspace.","parameters":{"type":"object","properties":{"page":{"type":"integer"},"page_size":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"dashboards.get","description":"Retrieve a single ClicData dashboard.","parameters":{"type":"object","properties":{"dashboardId":{"type":"string"}},"required":["dashboardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"datasets.rows.append","description":"Append rows to a ClicData dataset.","parameters":{"type":"object","properties":{"datasetId":{"type":"string"},"rows":{"type":"array"}},"required":["datasetId","rows"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"datasets.rows.replace","description":"Replace all rows in a ClicData dataset.","parameters":{"type":"object","properties":{"datasetId":{"type":"string"},"rows":{"type":"array"}},"required":["datasetId","rows"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"datasets.refresh","description":"Trigger a refresh of a ClicData dataset against its source.","parameters":{"type":"object","properties":{"datasetId":{"type":"string"}},"required":["datasetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"datasets.clear","description":"Clear all rows from a ClicData dataset.","parameters":{"type":"object","properties":{"datasetId":{"type":"string"}},"required":["datasetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"datasets.create","description":"Create a new ClicData dataset.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"category_id":{"type":"integer"},"columns":{"type":"array"}},"required":["name","columns"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"datasets.delete","description":"Delete a ClicData dataset by id.","parameters":{"type":"object","properties":{"datasetId":{"type":"string"}},"required":["datasetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"dashboards.refresh","description":"Trigger a refresh of all data backing a ClicData dashboard.","parameters":{"type":"object","properties":{"dashboardId":{"type":"string"}},"required":["dashboardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"clickfunnels","displayName":"ClickFunnels","description":"Create and manage contacts, opportunities, and tags in ClickFunnels.","auth":{"kind":"api-key","hint":"ClickFunnels API key from account settings."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.search","description":"Search contacts by email or ID.","parameters":{"type":"object","properties":{"searchTerm":{"type":"string"}},"required":["searchTerm"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create or update a contact.","parameters":{"type":"object","properties":{"emailAddress":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"phoneNumber":{"type":"string"},"customAttributes":{"type":"object"}},"required":["emailAddress"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.create","description":"Create an opportunity.","parameters":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"number"},"closedAt":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.apply","description":"Apply a tag to a contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"tagId":{"type":"string"}},"required":["contactId","tagId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.remove","description":"Remove a tag from a contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"tagId":{"type":"string"}},"required":["contactId","tagId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"courses.enroll","description":"Enroll a contact into a course.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"courseId":{"type":"string"}},"required":["contactId","courseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"clicksend","displayName":"ClickSend","description":"Send and track SMS or voice messages, and manage ClickSend contact lists.","auth":{"kind":"api-key","hint":"JSON containing username and apiKey from the ClickSend dashboard."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.get","description":"Read account details and balance.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.list","description":"List contact lists.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.get","description":"Read one contact list.","parameters":{"type":"object","properties":{"listId":{"type":"integer"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.create","description":"Create a contact list.","parameters":{"type":"object","properties":{"listName":{"type":"string"}},"required":["listName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"lists.update","description":"Rename a contact list.","parameters":{"type":"object","properties":{"listId":{"type":"integer"},"listName":{"type":"string"}},"required":["listId","listName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"lists.delete","description":"Delete a contact list.","parameters":{"type":"object","properties":{"listId":{"type":"integer"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.list","description":"List contacts in a list.","parameters":{"type":"object","properties":{"listId":{"type":"integer"},"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1},"updatedAfter":{"type":"integer"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.get","description":"Read one contact.","parameters":{"type":"object","properties":{"listId":{"type":"integer"},"contactId":{"type":"integer"}},"required":["listId","contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Add a contact to a list.","parameters":{"type":"object","properties":{"listId":{"type":"integer"},"contact":{"type":"object","description":"ClickSend Contact model including phone_number."}},"required":["listId","contact"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"contacts.update","description":"Update a contact.","parameters":{"type":"object","properties":{"listId":{"type":"integer"},"contactId":{"type":"integer"},"contact":{"type":"object","description":"ClickSend Contact model."}},"required":["listId","contactId","contact"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.delete","description":"Delete a contact from a list.","parameters":{"type":"object","properties":{"listId":{"type":"integer"},"contactId":{"type":"integer"}},"required":["listId","contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"sms.history","description":"List sent SMS history.","parameters":{"type":"object","properties":{"query":{"type":"string"},"dateFrom":{"type":"integer"},"dateTo":{"type":"integer"},"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sms.inbound.list","description":"List inbound SMS messages.","parameters":{"type":"object","properties":{"query":{"type":"string"},"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sms.receipts.list","description":"List SMS delivery receipts.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sms.send","description":"Send up to 1,000 SMS messages in one request.","parameters":{"type":"object","properties":{"messages":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object"}}},"required":["messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"sms.cancel","description":"Cancel a scheduled SMS message.","parameters":{"type":"object","properties":{"messageId":{"type":"string"}},"required":["messageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"voice.history","description":"List voice message history.","parameters":{"type":"object","properties":{"dateFrom":{"type":"integer"},"dateTo":{"type":"integer"},"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"voice.send","description":"Send voice messages.","parameters":{"type":"object","properties":{"messages":{"type":"array","minItems":1,"items":{"type":"object"}}},"required":["messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"voice.cancel","description":"Cancel a scheduled voice message.","parameters":{"type":"object","properties":{"messageId":{"type":"string"}},"required":["messageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"clickup","displayName":"ClickUp","description":"Read and mutate ClickUp workspaces, spaces, folders, lists, tasks, comments, and time entries via the ClickUp REST v2 API.","auth":{"kind":"one_of","preferred":"oauth2","options":[{"kind":"api-key","hint":"ClickUp personal API token (starts with pk_)."},{"kind":"oauth2","authorizationUrl":"https://app.clickup.com/api","tokenUrl":"https://api.clickup.com/api/v2/oauth/token","scopes":[],"clientIdEnv":"CLICKUP_OAUTH_CLIENT_ID","clientSecretEnv":"CLICKUP_OAUTH_CLIENT_SECRET"}]},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"user.get","description":"Return the ClickUp user that authorized the connection.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"teams.list","description":"List the Workspaces (ClickUp calls these \"teams\" on the wire) the authorized user belongs to.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"spaces.list","description":"List Spaces inside a Workspace.","parameters":{"type":"object","properties":{"teamId":{"type":"string","description":"Workspace id."},"archived":{"type":"boolean"}},"required":["teamId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"spaces.get","description":"Read a single Space by id.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"}},"required":["spaceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"folders.list","description":"List Folders inside a Space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"archived":{"type":"boolean"}},"required":["spaceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.list","description":"List Lists inside a Folder.","parameters":{"type":"object","properties":{"folderId":{"type":"string"},"archived":{"type":"boolean"}},"required":["folderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.folderless","description":"List Lists that live directly under a Space (no Folder).","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"archived":{"type":"boolean"}},"required":["spaceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.get","description":"Read a single List by id.","parameters":{"type":"object","properties":{"listId":{"type":"string"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.list","description":"List tasks in a List with optional filters (status, assignee, date range, custom fields).","parameters":{"type":"object","properties":{"listId":{"type":"string"},"archived":{"type":"boolean"},"page":{"type":"integer","minimum":0},"order_by":{"type":"string","enum":["id","created","updated","due_date"]},"reverse":{"type":"boolean"},"subtasks":{"type":"boolean"},"include_closed":{"type":"boolean"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.get","description":"Read a single task by id, with optional subtasks expansion.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"custom_task_ids":{"type":"boolean"},"team_id":{"type":"string"},"include_subtasks":{"type":"boolean"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.search","description":"Search tasks across a Workspace with filtered views (assignees, statuses, tags, due window, etc.).","parameters":{"type":"object","properties":{"teamId":{"type":"string"},"page":{"type":"integer","minimum":0},"order_by":{"type":"string","enum":["id","created","updated","due_date"]},"reverse":{"type":"boolean"},"include_closed":{"type":"boolean"}},"required":["teamId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.create","description":"Create a task inside a List.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"task":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"assignees":{"type":"array","items":{"type":"integer"}},"tags":{"type":"array","items":{"type":"string"}},"status":{"type":"string"},"priority":{"type":"integer","minimum":1,"maximum":4},"due_date":{"type":"integer","description":"Unix epoch ms."},"due_date_time":{"type":"boolean"},"time_estimate":{"type":"integer","description":"Milliseconds."},"start_date":{"type":"integer"},"start_date_time":{"type":"boolean"},"notify_all":{"type":"boolean"},"parent":{"type":"string","description":"Task id of the parent for a subtask."},"links_to":{"type":"string"},"custom_fields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"value":{}},"required":["id","value"]}}},"required":["name"]}},"required":["listId","task"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update fields on an existing task.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"patch":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string"},"priority":{"type":"integer","minimum":1,"maximum":4},"due_date":{"type":"integer"},"due_date_time":{"type":"boolean"},"time_estimate":{"type":"integer"},"start_date":{"type":"integer"},"start_date_time":{"type":"boolean"},"assignees":{"type":"object","properties":{"add":{"type":"array","items":{"type":"integer"}},"rem":{"type":"array","items":{"type":"integer"}}}},"archived":{"type":"boolean"}}}},"required":["taskId","patch"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.delete","description":"Delete a task by id.","parameters":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"tasks.setCustomField","description":"Set or replace a custom field value on a task. Body shape depends on field type — pass the documented `value` payload verbatim.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"fieldId":{"type":"string"},"payload":{"type":"object","properties":{"value":{},"value_options":{"type":"object"}},"required":["value"]}},"required":["taskId","fieldId","payload"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"comments.list","description":"List comments on a task.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"start":{"type":"integer","description":"Pagination cursor — comment date in ms."},"start_id":{"type":"string"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"comments.create","description":"Post a comment on a task.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"comment":{"type":"object","properties":{"comment_text":{"type":"string"},"assignee":{"type":"integer"},"notify_all":{"type":"boolean"}},"required":["comment_text"]}},"required":["taskId","comment"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"timeEntries.list","description":"List time entries in a Workspace within an optional date window.","parameters":{"type":"object","properties":{"teamId":{"type":"string"},"start_date":{"type":"integer","description":"Unix epoch ms."},"end_date":{"type":"integer","description":"Unix epoch ms."},"assignee":{"type":"string","description":"Comma-separated user ids."},"include_task_tags":{"type":"boolean"},"include_location_names":{"type":"boolean"},"space_id":{"type":"string"},"folder_id":{"type":"string"},"list_id":{"type":"string"},"task_id":{"type":"string"}},"required":["teamId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"timeEntries.create","description":"Create a tracked time entry in a Workspace.","parameters":{"type":"object","properties":{"teamId":{"type":"string"},"entry":{"type":"object","properties":{"description":{"type":"string"},"tags":{"type":"array"},"start":{"type":"integer","description":"Unix epoch ms."},"billable":{"type":"boolean"},"duration":{"type":"integer","description":"Milliseconds."},"assignee":{"type":"integer"},"tid":{"type":"string","description":"Task id."}},"required":["start","duration"]}},"required":["teamId","entry"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"clio","displayName":"Clio","description":"Read and mutate Clio Manage contacts, matters, tasks, time-entry activities, and notes via the Clio v4 REST API.","auth":{"kind":"oauth2","authorizationUrl":"https://app.clio.com/oauth/authorize","tokenUrl":"https://app.clio.com/oauth/token","scopes":[],"clientIdEnv":"CLIO_OAUTH_CLIENT_ID","clientSecretEnv":"CLIO_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.whoami","description":"Return the Clio user whose token is currently authorizing the connection.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.list","description":"List Clio contacts (people and companies). Supports the Clio query parameter for free-text search and the standard limit/page pagination.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search term."},"type":{"type":"string","enum":["Person","Company"],"description":"Filter to people or companies only."},"limit":{"type":"integer","minimum":1,"maximum":200},"page_token":{"type":"string","description":"Cursor returned by a prior page."},"fields":{"type":"string","description":"Comma-separated v4 field selector (e.g. \"id,name,primary_email_address\")."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.get","description":"Read a single Clio contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"fields":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create a Clio contact (person or company). Body must be wrapped in Clio's {data: {...}} envelope.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Clio contact attributes (name, type, email_addresses, phone_numbers, etc.)."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update a Clio contact by id. Uses etag If-Match for optimistic concurrency.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"data":{"type":"object"}},"required":["contactId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"matters.list","description":"List Clio matters (cases). Filter by status, responsible attorney, client, or free-text query.","parameters":{"type":"object","properties":{"query":{"type":"string"},"status":{"type":"string","enum":["Open","Pending","Closed"]},"client_id":{"type":"string"},"responsible_attorney_id":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":200},"page_token":{"type":"string"},"fields":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"matters.get","description":"Read a single Clio matter by id.","parameters":{"type":"object","properties":{"matterId":{"type":"string"},"fields":{"type":"string"}},"required":["matterId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"matters.create","description":"Create a Clio matter (legal case).","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Clio matter attributes: description, client (object with id), practice_area (object with id), responsible_attorney, status, etc."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"matters.update","description":"Update a Clio matter by id.","parameters":{"type":"object","properties":{"matterId":{"type":"string"},"data":{"type":"object"}},"required":["matterId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"tasks.list","description":"List Clio tasks. Filter by matter, assignee, status, or due date.","parameters":{"type":"object","properties":{"matter_id":{"type":"string"},"assignee_id":{"type":"string"},"status":{"type":"string","enum":["pending","in_progress","complete"]},"due_at_from":{"type":"string","description":"ISO 8601 lower bound."},"due_at_to":{"type":"string","description":"ISO 8601 upper bound."},"limit":{"type":"integer","minimum":1,"maximum":200},"page_token":{"type":"string"},"fields":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.get","description":"Read a single Clio task by id.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"fields":{"type":"string"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.create","description":"Create a Clio task.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Clio task attributes: name, description, due_at, priority, assignee (object with id), matter (object with id), status."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update a Clio task by id.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"data":{"type":"object"}},"required":["taskId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"activities.list","description":"List Clio activities (time and expense entries). Filter by matter, user, type, or date range.","parameters":{"type":"object","properties":{"matter_id":{"type":"string"},"user_id":{"type":"string"},"type":{"type":"string","enum":["TimeEntry","ExpenseEntry"]},"date_from":{"type":"string","description":"ISO 8601 date lower bound."},"date_to":{"type":"string","description":"ISO 8601 date upper bound."},"limit":{"type":"integer","minimum":1,"maximum":200},"page_token":{"type":"string"},"fields":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"activities.create","description":"Log a Clio activity (billable time or expense entry) against a matter.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Clio activity attributes: type (\"TimeEntry\"|\"ExpenseEntry\"), date, quantity (seconds for time / units for expense), price, matter (object with id), activity_description (object with id), note, non_billable."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.list","description":"List Clio notes scoped to a matter or contact.","parameters":{"type":"object","properties":{"matter_id":{"type":"string"},"contact_id":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":200},"page_token":{"type":"string"},"fields":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"notes.create","description":"Create a Clio note attached to a matter or contact.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Clio note attributes: subject, detail, type (\"Matter\"|\"Contact\"), and the parent reference (matter or contact object with id)."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"clockify","displayName":"Clockify","description":"Create tasks and time entries, start/stop timers, and look up running timers in Clockify.","auth":{"kind":"api-key","hint":"Clockify API key (Profile Settings → API)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"task.create","description":"Create a task on a project within a workspace.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"projectId":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"}},"required":["workspaceId","projectId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"time.entry.create","description":"Create a time entry in a workspace.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"},"description":{"type":"string"},"projectId":{"type":"string"},"taskId":{"type":"string"},"billable":{"type":"boolean"}},"required":["workspaceId","start","end"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"timer.running.find","description":"Find the currently running timer for a user in a workspace.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"userId":{"type":"string"}},"required":["workspaceId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"task.find","description":"Search tasks on a project by name.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"projectId":{"type":"string"},"name":{"type":"string"},"exactMatch":{"type":"boolean"}},"required":["workspaceId","projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"time.entry.find","description":"List a user’s time entries in a workspace, optionally filtered by description.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"userId":{"type":"string"},"description":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"}},"required":["workspaceId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"timer.start","description":"Start a timer (open-ended time entry) for the authenticated user.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"start":{"type":"string"},"description":{"type":"string"},"projectId":{"type":"string"},"taskId":{"type":"string"},"billable":{"type":"boolean"}},"required":["workspaceId","start"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"timer.stop","description":"Stop the currently running timer for a user by setting its end time.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"userId":{"type":"string"},"end":{"type":"string"}},"required":["workspaceId","userId","end"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"time.entry.update","description":"Edit an existing time entry in a workspace by id.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"id":{"type":"string","description":"Time entry id."},"start":{"type":"string"},"end":{"type":"string"},"description":{"type":"string"},"projectId":{"type":"string"},"taskId":{"type":"string"},"billable":{"type":"boolean"}},"required":["workspaceId","id","start"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"time.entry.delete","description":"Delete a time entry from a workspace by id.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"id":{"type":"string","description":"Time entry id to delete."}},"required":["workspaceId","id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"project.create","description":"Create a project in a workspace.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"name":{"type":"string"},"clientId":{"type":"string"},"isPublic":{"type":"boolean"},"billable":{"type":"boolean"},"color":{"type":"string"},"note":{"type":"string"}},"required":["workspaceId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"clockodo","displayName":"Clockodo","description":"Read and manage Clockodo time entries, customers, projects, services, users, and absences for time-tracking automation.","auth":{"kind":"api-key","hint":"Clockodo API user email and API key, sent as X-ClockodoApiUser and X-ClockodoApiKey headers."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"entries.find","description":"List time entries within a date range, optionally filtered by user, customer, project, service, billable, or billed flags.","parameters":{"type":"object","properties":{"time_since":{"type":"string"},"time_until":{"type":"string"},"users_id":{"type":"integer"},"customers_id":{"type":"integer"},"projects_id":{"type":"integer"},"services_id":{"type":"integer"},"billable":{"type":"integer"},"billed":{"type":"boolean"},"page":{"type":"integer"}},"required":["time_since","time_until"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"entries.get","description":"Fetch a single Clockodo time entry by id.","parameters":{"type":"object","properties":{"entryId":{"type":"integer"}},"required":["entryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"entries.create","description":"Create a Clockodo time entry for a customer/project/service.","parameters":{"type":"object","properties":{"customers_id":{"type":"integer"},"projects_id":{"type":"integer"},"services_id":{"type":"integer"},"users_id":{"type":"integer"},"billable":{"type":"integer"},"time_since":{"type":"string"},"time_until":{"type":"string"},"text":{"type":"string"},"hourly_rate":{"type":"number"}},"required":["customers_id","services_id","billable","time_since","time_until"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"entries.update","description":"Update a Clockodo time entry.","parameters":{"type":"object","properties":{"entryId":{"type":"integer"},"customers_id":{"type":"integer"},"projects_id":{"type":"integer"},"services_id":{"type":"integer"},"billable":{"type":"integer"},"time_since":{"type":"string"},"time_until":{"type":"string"},"text":{"type":"string"},"hourly_rate":{"type":"number"}},"required":["entryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"entries.delete","description":"Delete a Clockodo time entry by id.","parameters":{"type":"object","properties":{"entryId":{"type":"integer"}},"required":["entryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.find","description":"List Clockodo customers, optionally filtered by active status.","parameters":{"type":"object","properties":{"active":{"type":"boolean"},"page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.get","description":"Fetch a single Clockodo customer by id.","parameters":{"type":"object","properties":{"customerId":{"type":"integer"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.create","description":"Create a Clockodo customer.","parameters":{"type":"object","properties":{"name":{"type":"string"},"number":{"type":"string"},"active":{"type":"boolean"},"billable_default":{"type":"boolean"},"note":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.find","description":"List Clockodo projects, optionally scoped to a customer.","parameters":{"type":"object","properties":{"customers_id":{"type":"integer"},"active":{"type":"boolean"},"page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.create","description":"Create a Clockodo project under a customer.","parameters":{"type":"object","properties":{"name":{"type":"string"},"customers_id":{"type":"integer"},"active":{"type":"boolean"},"billable_default":{"type":"boolean"},"note":{"type":"string"}},"required":["name","customers_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"services.find","description":"List Clockodo services.","parameters":{"type":"object","properties":{"active":{"type":"boolean"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.find","description":"List Clockodo users (co-workers) in the account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"absences.find","description":"List Clockodo absences in a given year, optionally filtered by user.","parameters":{"type":"object","properties":{"year":{"type":"integer"},"users_id":{"type":"integer"}},"required":["year"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"absences.create","description":"Create a Clockodo absence (vacation, sick day, etc.) for a user.","parameters":{"type":"object","properties":{"date_since":{"type":"string"},"date_until":{"type":"string"},"type":{"type":"integer"},"users_id":{"type":"integer"},"status":{"type":"integer"},"note":{"type":"string"},"half_days":{"type":"boolean"},"sick_note":{"type":"boolean"}},"required":["date_since","date_until","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"absences.delete","description":"Delete a Clockodo absence by id.","parameters":{"type":"object","properties":{"absenceId":{"type":"integer"}},"required":["absenceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"close","displayName":"Close","description":"Search and mutate Close CRM leads, contacts, and opportunities.","auth":{"kind":"oauth2","authorizationUrl":"https://app.close.com/oauth2/authorize/","tokenUrl":"https://api.close.com/oauth2/token/","scopes":["offline_access"],"clientIdEnv":"CLOSE_OAUTH_CLIENT_ID","clientSecretEnv":"CLOSE_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"leads.search","description":"List or search Close leads using the leads endpoint query string.","parameters":{"type":"object","properties":{"query":{"type":"string"},"_limit":{"type":"integer","minimum":1,"maximum":200},"_skip":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.get","description":"Read a single Close lead by id.","parameters":{"type":"object","properties":{"leadId":{"type":"string"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.create","description":"Create a Close lead.","parameters":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"},"description":{"type":"string"},"status_id":{"type":"string"},"contacts":{"type":"array","items":{"type":"object"}},"custom":{"type":"object"}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update","description":"Update a Close lead by id.","parameters":{"type":"object","properties":{"leadId":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"description":{"type":"string"},"status_id":{"type":"string"},"custom":{"type":"object"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.create","description":"Create a Close contact attached to a lead.","parameters":{"type":"object","properties":{"lead_id":{"type":"string"},"name":{"type":"string"},"title":{"type":"string"},"emails":{"type":"array","items":{"type":"object"}},"phones":{"type":"array","items":{"type":"object"}}},"required":["lead_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.create","description":"Create a Close opportunity on a lead.","parameters":{"type":"object","properties":{"lead_id":{"type":"string"},"note":{"type":"string"},"confidence":{"type":"integer","minimum":0,"maximum":100},"value":{"type":"integer","minimum":0},"value_period":{"type":"string","enum":["one_time","monthly","annual"]},"status_id":{"type":"string"}},"required":["lead_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.update","description":"Update a Close opportunity by id.","parameters":{"type":"object","properties":{"opportunityId":{"type":"string"},"note":{"type":"string"},"confidence":{"type":"integer","minimum":0,"maximum":100},"value":{"type":"integer","minimum":0},"value_period":{"type":"string","enum":["one_time","monthly","annual"]},"status_id":{"type":"string"}},"required":["opportunityId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"cloudconvert","displayName":"CloudConvert","description":"File conversion and processing platform supporting 200+ formats — convert, capture, merge, optimize, and archive files.","auth":{"kind":"oauth2","authorizationUrl":"https://cloudconvert.com/oauth/authorize","tokenUrl":"https://cloudconvert.com/oauth/token","scopes":["user.read","user.write","task.read","task.write"],"clientIdEnv":"CLOUDCONVERT_OAUTH_CLIENT_ID","clientSecretEnv":"CLOUDCONVERT_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"convert.file","description":"Convert a file from one format to another. Creates a job containing an import/url, convert, and export/url task chain.","parameters":{"type":"object","properties":{"input":{"type":"string","description":"Source URL or task id whose output to consume."},"input_format":{"type":"string","description":"Source format (e.g. \"docx\", \"png\"). Auto-detected when omitted."},"output_format":{"type":"string","description":"Target format (e.g. \"pdf\", \"jpg\")."},"filename":{"type":"string","description":"Output filename (without path)."},"engine":{"type":"string","description":"Specific conversion engine, e.g. \"office\", \"imagemagick\"."},"engine_version":{"type":"string"},"options":{"type":"object","description":"Engine-specific options (quality, dpi, page_range, etc.)."}},"required":["input","output_format"]},"requiredScopes":["task.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"capture.website","description":"Capture a website as PDF, PNG, or JPG by rendering the URL in CloudConvert's headless browser.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Fully-qualified URL to capture."},"output_format":{"type":"string","enum":["pdf","png","jpg"]},"filename":{"type":"string"},"pages":{"type":"string","description":"Page range for PDF output (e.g. \"1-3\")."},"zoom":{"type":"number"},"page_width":{"type":"number"},"page_height":{"type":"number"},"margin_top":{"type":"number"},"margin_bottom":{"type":"number"},"margin_left":{"type":"number"},"margin_right":{"type":"number"},"print_background":{"type":"boolean"},"display_header_footer":{"type":"boolean"},"wait_until":{"type":"string","enum":["load","domcontentloaded","networkidle0","networkidle2"]},"wait_for_element":{"type":"string","description":"CSS selector to wait for before capturing."},"wait_time":{"type":"integer","description":"Additional delay in ms after page load."}},"required":["url","output_format"]},"requiredScopes":["task.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"merge.pdf","description":"Merge multiple input PDFs into a single output PDF, preserving page order.","parameters":{"type":"object","properties":{"input":{"type":"array","items":{"type":"string"},"description":"Array of source URLs or task ids to merge."},"output_format":{"type":"string","enum":["pdf"],"default":"pdf"},"filename":{"type":"string"},"engine":{"type":"string"}},"required":["input"]},"requiredScopes":["task.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"download.file","description":"Read a task by id to obtain its status and, for export tasks, the signed download URL(s) under result.files.","parameters":{"type":"object","properties":{"taskId":{"type":"string","description":"Task id (typically the export/url task on a finished job)."},"include":{"type":"string","description":"Comma-separated relations to expand (e.g. \"job,depends_on_tasks\")."}},"required":["taskId"]},"requiredScopes":["task.read"],"class":"read"},{"name":"archive.file","description":"Archive (delete) a task. CloudConvert retains task results for 24h by default; this removes them and any associated stored file early.","parameters":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"]},"requiredScopes":["task.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"optimize.file","description":"Optimize a PDF or image to reduce file size while preserving acceptable quality. Engine and profile choose the trade-off.","parameters":{"type":"object","properties":{"input":{"type":"string","description":"Source URL or task id whose output to optimize."},"input_format":{"type":"string"},"output_format":{"type":"string","description":"Target format. Defaults to input_format."},"filename":{"type":"string"},"engine":{"type":"string"},"engine_version":{"type":"string"},"profile":{"type":"string","description":"Optimization profile (e.g. \"web\", \"print\", \"archive\", \"max\")."},"options":{"type":"object"}},"required":["input"]},"requiredScopes":["task.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"jobs.list","description":"List jobs filtered by status — backs the new.job / job.finished / job.failed triggers via polling.","parameters":{"type":"object","properties":{"status":{"type":"string","enum":["waiting","processing","finished","error"]},"tag":{"type":"string","description":"Filter by user-supplied job tag."},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}}},"requiredScopes":["task.read"],"class":"read"},{"name":"jobs.get","description":"Read a single job by id with its task graph, status, and any error payload.","parameters":{"type":"object","properties":{"jobId":{"type":"string"},"include":{"type":"string","description":"Comma-separated relations to expand (e.g. \"tasks,tasks.depends_on_tasks\")."}},"required":["jobId"]},"requiredScopes":["task.read"],"class":"read"}]},{"kind":"cloudflare","displayName":"Cloudflare","description":"Inspect Cloudflare accounts and zones, then manage DNS records with a dedicated scoped API token.","auth":{"kind":"api-key","hint":"Create a dedicated Cloudflare API token for Tangle Integration Hub. Grant Account Settings Read, Zone Read, Zone Settings Read, and DNS Read or DNS Edit only on selected resources. Never reuse a Tangle deployment, Workers, Terraform, or infrastructure token."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"auth.verify","description":"Verify that the current API token is valid and active.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.get","description":"Read one Cloudflare account and its settings.","parameters":{"type":"object","properties":{"accountId":{"type":"string","minLength":1}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"zones.list","description":"List or filter zones by account, domain, status, and type.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"perPage":{"type":"integer","minimum":5,"maximum":50},"accountId":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["initializing","pending","active","moved"]},"type":{"type":"string","description":"Comma-separated zone types."},"match":{"type":"string","enum":["any","all"]},"order":{"type":"string","enum":["name","status","account.id","account.name","plan.id"]},"direction":{"type":"string","enum":["asc","desc"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"zones.get","description":"Read one zone with status, nameservers, plan, and ownership metadata.","parameters":{"type":"object","properties":{"zoneId":{"type":"string","minLength":1,"description":"Cloudflare zone identifier."}},"required":["zoneId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"zones.settings.list","description":"List all settings for one zone.","parameters":{"type":"object","properties":{"zoneId":{"type":"string","minLength":1,"description":"Cloudflare zone identifier."}},"required":["zoneId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"zones.settings.get","description":"Read one setting for a zone.","parameters":{"type":"object","properties":{"zoneId":{"type":"string","minLength":1,"description":"Cloudflare zone identifier."},"settingId":{"type":"string","minLength":1}},"required":["zoneId","settingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"dns.records.list","description":"List and filter DNS records in one zone.","parameters":{"type":"object","properties":{"zoneId":{"type":"string","minLength":1,"description":"Cloudflare zone identifier."},"page":{"type":"integer","minimum":1},"perPage":{"type":"integer","minimum":5,"maximum":50},"type":{"type":"string"},"name":{"type":"string","description":"Exact record name."},"content":{"type":"string","description":"Exact record content."},"proxied":{"type":"boolean"},"match":{"type":"string","enum":["any","all"]},"order":{"type":"string","enum":["type","name","content","ttl","proxied"]},"direction":{"type":"string","enum":["asc","desc"]}},"required":["zoneId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"dns.records.get","description":"Read one DNS record by zone and record ID.","parameters":{"type":"object","properties":{"zoneId":{"type":"string","minLength":1,"description":"Cloudflare zone identifier."},"recordId":{"type":"string","minLength":1,"description":"Cloudflare DNS record identifier."}},"required":["zoneId","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"dns.records.export","description":"Export the current zone records as a BIND zone file before a change.","parameters":{"type":"object","properties":{"zoneId":{"type":"string","minLength":1,"description":"Cloudflare zone identifier."}},"required":["zoneId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"dns.records.create","description":"Create one DNS record in a selected zone.","parameters":{"type":"object","properties":{"zoneId":{"type":"string","minLength":1,"description":"Cloudflare zone identifier."},"record":{"type":"object","properties":{"type":{"type":"string","enum":["A","AAAA","CAA","CERT","CNAME","DNSKEY","DS","HTTPS","LOC","MX","NAPTR","NS","OPENPGPKEY","PTR","SMIMEA","SRV","SSHFP","SVCB","TLSA","TXT","URI"]},"name":{"type":"string","minLength":1,"description":"Complete DNS record name."},"content":{"type":"string","description":"Provider-native record content."},"ttl":{"type":"integer","minimum":1,"maximum":86400,"description":"TTL in seconds. Use 1 for automatic."},"proxied":{"type":"boolean"},"priority":{"type":"integer"},"comment":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"data":{"type":"object","description":"Provider-native structured data for records such as SRV or CAA."},"settings":{"type":"object","description":"Provider-native DNS record settings."}},"required":["type","name"],"additionalProperties":false}},"required":["zoneId","record"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"dns.records.update","description":"Partially update one DNS record.","parameters":{"type":"object","properties":{"zoneId":{"type":"string","minLength":1,"description":"Cloudflare zone identifier."},"recordId":{"type":"string","minLength":1,"description":"Cloudflare DNS record identifier."},"changes":{"type":"object","properties":{"type":{"type":"string","enum":["A","AAAA","CAA","CERT","CNAME","DNSKEY","DS","HTTPS","LOC","MX","NAPTR","NS","OPENPGPKEY","PTR","SMIMEA","SRV","SSHFP","SVCB","TLSA","TXT","URI"]},"name":{"type":"string","minLength":1,"description":"Complete DNS record name."},"content":{"type":"string","description":"Provider-native record content."},"ttl":{"type":"integer","minimum":1,"maximum":86400,"description":"TTL in seconds. Use 1 for automatic."},"proxied":{"type":"boolean"},"priority":{"type":"integer"},"comment":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"data":{"type":"object","description":"Provider-native structured data for records such as SRV or CAA."},"settings":{"type":"object","description":"Provider-native DNS record settings."}},"additionalProperties":false}},"required":["zoneId","recordId","changes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"dns.records.delete","description":"Permanently delete one DNS record.","parameters":{"type":"object","properties":{"zoneId":{"type":"string","minLength":1,"description":"Cloudflare zone identifier."},"recordId":{"type":"string","minLength":1,"description":"Cloudflare DNS record identifier."}},"required":["zoneId","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"cloudinary","displayName":"Cloudinary","description":"Upload, transform, query, and delete media assets in the Cloudinary cloud-based image and video management platform.","auth":{"kind":"api-key","hint":"Cloudinary API key/secret pair scoped to a cloud_name (Basic auth against api.cloudinary.com)."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"upload.resource","description":"Upload a file (image, video, or raw asset) to Cloudinary. Maps to the Cloudinary upload endpoint.","parameters":{"type":"object","properties":{"file":{"type":"string","description":"Local path, remote URL, or base64 data URI of the asset to upload."},"public_id":{"type":"string","description":"Optional public ID to assign to the uploaded asset."},"folder":{"type":"string","description":"Cloudinary folder to upload into."},"tags":{"type":"string","description":"Comma-separated tags to attach to the uploaded asset."},"resource_type":{"type":"string","enum":["image","video","raw","auto"],"description":"Asset class. Defaults to image."},"overwrite":{"type":"boolean","description":"Overwrite an existing asset at the same public_id."}},"required":["file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"delete.resource","description":"Delete Cloudinary assets by explicit public IDs, by tag, or by prefix. Destructive — affected derived assets are also dropped unless keep_original is set.","parameters":{"type":"object","properties":{"deletion_mode":{"type":"string","enum":["public_ids","tag","prefix","all"],"description":"Strategy used to select assets for deletion."},"public_ids_manual":{"type":"string","description":"Comma-separated public IDs (up to 100) when deletion_mode=public_ids."},"tag_manual":{"type":"string","description":"Tag name when deletion_mode=tag (deletes up to 1000 assets)."},"prefix":{"type":"string","description":"Public-ID prefix when deletion_mode=prefix (deletes up to 1000 assets)."},"resource_type":{"type":"string","enum":["image","video","raw"],"description":"Asset class to target. Defaults to image."},"type":{"type":"string","enum":["upload","private","authenticated"],"description":"Delivery type of the assets to delete."},"keep_original":{"type":"boolean","description":"Delete only derived assets, keep the original."},"invalidate":{"type":"boolean","description":"Invalidate CDN cached copies after deletion (takes a few minutes to propagate)."}},"required":["deletion_mode"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.usage.report","description":"Generate a Cloudinary account usage report for a given date. Returns aggregate counters plus an optional per-transformation breakdown.","parameters":{"type":"object","properties":{"date":{"type":"string","description":"Report date in DD-MM-YYYY format. Must be within the last 3 months. Omit for the current date."},"include_breakdown":{"type":"boolean","description":"Include the detailed breakdown of transformation types and add-on usage."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"find.resource.by.public.id","description":"Look up a Cloudinary asset by its public ID and return its full metadata (size, format, URLs, tags).","parameters":{"type":"object","properties":{"public_id_manual":{"type":"string","description":"The asset public ID to look up."},"resource_type":{"type":"string","enum":["image","video","raw"],"description":"Asset class. Defaults to image."},"delivery_type":{"type":"string","enum":["upload","private","authenticated","fetch"],"description":"Delivery type of the asset."}},"required":["public_id_manual"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transform.resource","description":"Apply a transformation (resize, crop, format conversion, quality, border, rotation, opacity, raw chain) to an existing Cloudinary asset. Set generate_url_only=true to skip eager generation and only return the derived URL.","parameters":{"type":"object","properties":{"public_id_manual":{"type":"string","description":"Source asset public ID."},"resource_type":{"type":"string","enum":["image","video"],"description":"Source asset class. Defaults to image."},"delivery_type":{"type":"string","enum":["upload","private","authenticated","fetch"],"description":"Delivery type of the source asset."},"width":{"type":"number","description":"Target width in pixels."},"height":{"type":"number","description":"Target height in pixels."},"crop_mode":{"type":"string","enum":["scale","fit","fill","limit","thumb","crop","pad"],"description":"How to handle resizing when aspect ratios differ."},"gravity":{"type":"string","description":"Which part of the asset to focus on when cropping."},"format":{"type":"string","enum":["jpg","png","webp","avif","gif","auto"],"description":"Output format."},"quality":{"type":"string","description":"Image quality / compression level."},"border":{"type":"string","description":"Border specification (e.g. \"5px_solid_red\")."},"radius":{"type":"string","description":"Corner radius — number, list, or \"max\" for a circle."},"opacity":{"type":"number","description":"Transparency level (0–100, where 100 is fully opaque)."},"rotation":{"type":"number","description":"Rotation in degrees (0–360)."},"raw_transformation":{"type":"string","description":"Advanced: raw Cloudinary transformation string applied verbatim."},"generate_url_only":{"type":"boolean","description":"If true, only return the derived URL without forcing eager generation."}},"required":["public_id_manual"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"cloutly","displayName":"Cloutly","description":"Send review-invite requests to Cloutly customers via the public review-management API.","auth":{"kind":"api-key","hint":"Cloutly API key, forwarded as the x-api-key header alongside a fixed x-app identifier."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"reviews.sendInvite","description":"Send a review invite for a customer through a Cloutly campaign. Either email or phoneNumber must be provided as the delivery channel.","parameters":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string","description":"Customer email; required if phoneNumber is empty."},"phoneNumber":{"type":"string","description":"Customer phone number; required if email is empty."},"sourceCustomerId":{"type":"string"},"businessId":{"type":"string"},"campaignId":{"type":"string"},"inviteDelayDays":{"type":"integer","description":"Days to delay the invite before send."},"salesRepEmail":{"type":"string","description":"Email of the sales rep to associate with the review and customer."}},"required":["firstName","businessId","campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"coda","displayName":"Coda","description":"Read Coda docs and manipulate table rows: list docs, walk tables and columns, upsert and update rows, and create pages.","auth":{"kind":"api-key","hint":"Coda API token from https://coda.io/account."},"category":"spreadsheet","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.whoami","description":"Return information about the user associated with the API token.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"docs.list","description":"List Coda docs accessible to the token holder.","parameters":{"type":"object","properties":{"isOwner":{"type":"boolean"},"isPublished":{"type":"boolean"},"query":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"pageToken":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"docs.get","description":"Read metadata for a single Coda doc.","parameters":{"type":"object","properties":{"docId":{"type":"string"}},"required":["docId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pages.list","description":"List pages inside a doc.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"pageToken":{"type":"string"}},"required":["docId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tables.list","description":"List tables and views inside a doc.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"tableTypes":{"type":"string","description":"Comma-separated set of table|view."},"limit":{"type":"integer","minimum":1,"maximum":100},"pageToken":{"type":"string"}},"required":["docId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tables.get","description":"Read metadata for a specific table or view inside a doc.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"tableIdOrName":{"type":"string"}},"required":["docId","tableIdOrName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"columns.list","description":"List the columns of a table.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"tableIdOrName":{"type":"string"},"visibleOnly":{"type":"boolean"},"limit":{"type":"integer","minimum":1,"maximum":100},"pageToken":{"type":"string"}},"required":["docId","tableIdOrName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rows.list","description":"List rows from a table or view with optional filtering.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"tableIdOrName":{"type":"string"},"query":{"type":"string","description":"Filter expression of form :."},"sortBy":{"type":"string","enum":["createdAt","natural","updatedAt"]},"useColumnNames":{"type":"boolean"},"valueFormat":{"type":"string","enum":["simple","simpleWithArrays","rich"]},"visibleOnly":{"type":"boolean"},"limit":{"type":"integer","minimum":1,"maximum":500},"pageToken":{"type":"string"},"syncToken":{"type":"string"}},"required":["docId","tableIdOrName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rows.get","description":"Read a single row from a table.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"tableIdOrName":{"type":"string"},"rowIdOrName":{"type":"string"},"useColumnNames":{"type":"boolean"},"valueFormat":{"type":"string","enum":["simple","simpleWithArrays","rich"]}},"required":["docId","tableIdOrName","rowIdOrName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"formulas.get","description":"Return the computed value of a named formula inside a doc.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"formulaIdOrName":{"type":"string"},"valueFormat":{"type":"string","enum":["simple","simpleWithArrays","rich"]}},"required":["docId","formulaIdOrName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rows.upsert","description":"Insert or update rows in a table. Pass keyColumns to merge on a natural key; without it every row is appended.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"tableIdOrName":{"type":"string"},"rows":{"type":"array","description":"Each row is { cells: [{ column, value }] }.","items":{"type":"object"}},"keyColumns":{"type":"array","description":"Column IDs or names that uniquely identify a row for upsert merging.","items":{"type":"string"}},"disableParsing":{"type":"boolean"}},"required":["docId","tableIdOrName","rows"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rows.update","description":"Update an existing row in a table.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"tableIdOrName":{"type":"string"},"rowIdOrName":{"type":"string"},"row":{"type":"object","description":"Row payload of shape { cells: [{ column, value }] }."},"disableParsing":{"type":"boolean"}},"required":["docId","tableIdOrName","rowIdOrName","row"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"rows.delete","description":"Delete a row from a table.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"tableIdOrName":{"type":"string"},"rowIdOrName":{"type":"string"}},"required":["docId","tableIdOrName","rowIdOrName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rows.pushButton","description":"Trigger a button column on a row, executing the configured action.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"tableIdOrName":{"type":"string"},"rowIdOrName":{"type":"string"},"columnIdOrName":{"type":"string"}},"required":["docId","tableIdOrName","rowIdOrName","columnIdOrName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pages.create","description":"Create a new page inside a doc.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"name":{"type":"string"},"subtitle":{"type":"string"},"iconName":{"type":"string"},"imageUrl":{"type":"string"},"parentPageId":{"type":"string"},"pageContent":{"type":"object","description":"Content payload as documented under PageContent in the Coda API reference."}},"required":["docId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"cody","displayName":"Cody","description":"Interact with Cody AI: manage conversations, send messages, upload documents, and search bots.","auth":{"kind":"api-key","hint":"Cody API key from your account settings."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"conversations.create","description":"Create a new conversation with optional focus documents.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Conversation name"},"document_ids":{"type":"array","items":{"type":"string"},"description":"Optional document IDs to focus the conversation"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.find","description":"Find conversations by name or list all conversations.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Search query for conversation name"},"limit":{"type":"integer","description":"Maximum results to return"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.send","description":"Send a message in a conversation.","parameters":{"type":"object","properties":{"conversation_id":{"type":"string","description":"Conversation ID"},"content":{"type":"string","description":"Message content"}},"required":["conversation_id","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.create","description":"Create a document from text content.","parameters":{"type":"object","properties":{"content":{"type":"string","description":"Text or HTML content (max 768 KB)"},"title":{"type":"string","description":"Document title"}},"required":["content","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.upload","description":"Upload a file document (txt, md, rtf, pdf, ppt, docx).","parameters":{"type":"object","properties":{"file":{"type":"string","description":"File path or base64-encoded content"},"title":{"type":"string","description":"Document title"}},"required":["file","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bots.find","description":"Find and list available bots.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Search query for bot name"},"limit":{"type":"integer","description":"Maximum results to return"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"cognism","displayName":"Cognism","description":"B2B sales intelligence: search and enrich contacts and companies against the Cognism database, then redeem records for full contact data (emails, phones, firmographics).","auth":{"kind":"api-key","hint":"Cognism API token from Profile Settings → API. Sent as the `Authorization: Bearer ` header."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contact.search","description":"Search the Cognism contact database by persona/firmographic filters. Returns a preview list with data-presence flags and a redeemId per record (no PII). Free. Follow with contact.redeem to fetch full data.","parameters":{"type":"object","properties":{"filters":{"type":"object","description":"Search filter body, e.g. { jobTitles: [\"CTO\"], excludeJobTitles: [\"CEO\"], regions: [\"EMEA\"], countries: [\"US\"], emailQuality: { highPlus: true }, account: { names: [\"Acme\"] } }. All fields optional; pass {} to match broadly."},"lastReturnedKey":{"type":"string","description":"Pagination cursor from a previous page (linear only)."},"indexSize":{"type":"integer","description":"Page size, 20–100 (default 20)."}},"required":["filters"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contact.enrich","description":"Match a single contact by known identifiers (email, linkedinUrl, domain, name + company). Returns one best-match preview with matchScore, data-presence flags, and a redeemId (no PII). Free. Follow with contact.redeem.","parameters":{"type":"object","properties":{"match":{"type":"object","description":"Identifier body, e.g. { email: \"jane@acme.com\", linkedinUrl: \"...\", domain: \"acme.com\", minMatchScore: 30, firstName, lastName, jobTitle, companyName }. At least one identifier recommended."}},"required":["match"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contact.redeem","description":"Fetch full contact profiles (email, mobile, direct dial, LinkedIn, seniority, …) for redeemIds obtained from contact.search/contact.enrich. CONSUMES 1 credit per contact redeemed. 1–20 redeemIds per call.","parameters":{"type":"object","properties":{"redeemIds":{"type":"array","items":{"type":"string"},"description":"redeemId values from contact.search/contact.enrich (1–20)."}},"required":["redeemIds"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"account.search","description":"Search the Cognism company/account database by name, industry, location, size, revenue. Returns matching accounts with data-presence flags and redeemIds. Free. Follow with account.redeem.","parameters":{"type":"object","properties":{"filters":{"type":"object","description":"Account filter body, e.g. { names: [\"Acme Corp\"], industries: [\"SaaS\"], countries: [\"US\"], regions: [\"EMEA\"], employeeCount: {...}, revenue: {...} }. All fields optional."},"lastReturnedKey":{"type":"string"},"indexSize":{"type":"integer","description":"Page size, 20–100."}},"required":["filters"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"account.enrich","description":"Match a company/account by domain, website, linkedinUrl, or name. Returns one best-match preview with data-presence flags and a redeemId. Free. Follow with account.redeem.","parameters":{"type":"object","properties":{"match":{"type":"object","description":"Identifier body, e.g. { domain: \"cognism.com\" } or { website, linkedinUrl, name }."}},"required":["match"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"account.redeem","description":"Fetch full company/account profiles (domain, revenue, employeeCount, industry, …) for redeemIds from account.search/account.enrich. Free (account redeem does not consume credits).","parameters":{"type":"object","properties":{"redeemIds":{"type":"array","items":{"type":"string"},"description":"redeemId values from account.search/account.enrich."}},"required":["redeemIds"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"cognito-forms","displayName":"Cognito Forms","description":"Create, read, update, and delete entries in Cognito Forms — an online form builder for collecting structured submissions.","auth":{"kind":"api-key","hint":"Cognito Forms API key from Settings → Integrations → API. Sent as a Bearer token."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"entries.create","description":"Create a new entry on the specified Cognito Forms form.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"entry":{"type":"object"}},"required":["formId","entry"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"entries.update","description":"Update an existing entry on a Cognito Forms form by entry id.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"entryId":{"type":"string"},"entry":{"type":"object"}},"required":["formId","entryId","entry"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"entries.delete","description":"Delete an existing entry on a Cognito Forms form by entry id.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"entryId":{"type":"string"}},"required":["formId","entryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"entries.get","description":"Read a single Cognito Forms entry by id.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"entryId":{"type":"string"}},"required":["formId","entryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"cohere","displayName":"Cohere","description":"Generate text using Cohere AI language models.","auth":{"kind":"api-key","hint":"Cohere API key (Bearer token)."},"category":"other","defaultConsistencyModel":"cache","capabilities":[{"name":"generate.text","description":"Generate text from a prompt using a Cohere chat model. Mirrors the activepieces \"Generate Text\" action.","parameters":{"type":"object","properties":{"prompt":{"type":"string","description":"The user message to send to the model."},"model":{"type":"string","description":"The Cohere model to use for generation (e.g., command-r-plus, command-r)."},"temperature":{"type":"number","description":"Controls randomness (0.0 = deterministic, 1.0 = maximum randomness)."},"maxTokens":{"type":"integer","description":"Maximum number of tokens to generate."}},"required":["prompt","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":false}]},{"kind":"cometapi","displayName":"CometAPI","description":"Access multiple AI models (GPT, Claude, Gemini, Llama, Mistral, …) through CometAPI’s unified OpenAI-compatible inference gateway.","auth":{"kind":"api-key","hint":"CometAPI key (sent as Authorization: Bearer …). Create one at https://www.cometapi.com/."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"models.list","description":"List every model id CometAPI will route to.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"models.get","description":"Fetch metadata for a single routed model id.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model id, e.g. gpt-4o, claude-sonnet-4-5, gemini-2.5-pro."}},"required":["model"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"chat.completions.create","description":"Ask CometAPI — the catalog’s primary action. Generate a chat completion against any routed model by setting `model` on the body. OpenAI-compatible request schema.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Routed model id (gpt-4o, claude-sonnet-4-5, gemini-2.5-pro, llama-3.3-70b, …)."},"messages":{"type":"array","description":"Ordered chat turns; each item is { role, content }.","items":{"type":"object"}},"temperature":{"type":"number","minimum":0,"maximum":2},"top_p":{"type":"number","minimum":0,"maximum":1},"max_tokens":{"type":"integer","minimum":1},"stop":{},"stream":{"type":"boolean"},"n":{"type":"integer","minimum":1},"presence_penalty":{"type":"number","minimum":-2,"maximum":2},"frequency_penalty":{"type":"number","minimum":-2,"maximum":2},"tools":{"type":"array","items":{"type":"object"}},"tool_choice":{},"response_format":{"type":"object"},"user":{"type":"string"}},"required":["model","messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"completions.create","description":"Legacy text-completion endpoint kept for models that still expose it.","parameters":{"type":"object","properties":{"model":{"type":"string"},"prompt":{},"temperature":{"type":"number","minimum":0,"maximum":2},"top_p":{"type":"number","minimum":0,"maximum":1},"max_tokens":{"type":"integer","minimum":1},"stop":{},"stream":{"type":"boolean"},"n":{"type":"integer","minimum":1}},"required":["model","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"embeddings.create","description":"Generate an embedding vector for one or more input strings.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Embedding model id (e.g. text-embedding-3-large)."},"input":{"description":"String or array of strings to embed."},"encoding_format":{"type":"string","enum":["float","base64"]},"dimensions":{"type":"integer","minimum":1},"user":{"type":"string"}},"required":["model","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"images.generate","description":"Generate an image from a text prompt via a routed image model.","parameters":{"type":"object","properties":{"model":{"type":"string"},"prompt":{"type":"string"},"n":{"type":"integer","minimum":1},"size":{"type":"string"},"quality":{"type":"string"},"response_format":{"type":"string","enum":["url","b64_json"]},"user":{"type":"string"}},"required":["prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"comfyicu","displayName":"Comfy.ICU","description":"Submit ComfyUI workflow runs on Comfy.ICU and poll run status / output.","auth":{"kind":"api-key","hint":"Comfy.ICU API key from account settings."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"list.workflows","description":"List the ComfyUI workflows visible to the account.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.run.status","description":"Fetch the status of a specific workflow run.","parameters":{"type":"object","properties":{"workflow_id":{"type":"string"},"run_id":{"type":"string"}},"required":["workflow_id","run_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.run.output","description":"Fetch the rendered output (images / files / JSON) of a completed workflow run.","parameters":{"type":"object","properties":{"workflow_id":{"type":"string"},"run_id":{"type":"string"}},"required":["workflow_id","run_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"submit.workflow.run","description":"Submit a workflow execution. `prompt` is the API workflow JSON copied from the Comfy.ICU History page; `webhook` is an optional callback URL.","parameters":{"type":"object","properties":{"workflow_id":{"type":"string"},"prompt":{"type":"object"},"webhook":{"type":"string"},"files":{"type":"object"},"accelerator":{"type":"string"}},"required":["workflow_id","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"common-room","displayName":"Common Room","description":"Look up community and customer contacts, their activity, segments, and tags from your Common Room workspace.","auth":{"kind":"api-key","hint":"Core API token from Common Room Settings -> API tokens (created by a workspace Admin). Sent as the Authorization: Bearer header."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contact.get_by_email","description":"Return a contact's full Common Room profile given their email address.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the contact to look up."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contact.search","description":"Find contacts by email or linked social handles (Twitter, GitHub, LinkedIn).","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address to search by."},"github":{"type":"string","description":"GitHub username to search by."},"twitter":{"type":"string","description":"Twitter/X handle to search by."},"linkedin":{"type":"string","description":"LinkedIn profile URL or handle to search by."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"activity_types.list","description":"List the activity types available in the workspace.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"segments.list","description":"List the segments defined in the workspace.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contact.upsert","description":"Create or update a contact in a destination source, optionally setting fields and custom fields.","parameters":{"type":"object","properties":{"destinationSourceId":{"type":"string","description":"ID of the destination source to write the contact into."},"fullName":{"type":"string","description":"Full name of the contact."},"email":{"type":"string","description":"Email address of the contact."}},"required":["destinationSourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"confluence","displayName":"Confluence","description":"Search Confluence with CQL, read and update Confluence Cloud pages and spaces, and create new pages in authorized Atlassian sites.","auth":{"kind":"oauth2","authorizationUrl":"https://auth.atlassian.com/authorize","tokenUrl":"https://auth.atlassian.com/oauth/token","scopes":["offline_access","read:confluence-content.all","read:confluence-content.summary","read:confluence-space.summary","write:confluence-content","search:confluence"],"clientIdEnv":"ATLASSIAN_OAUTH_CLIENT_ID","clientSecretEnv":"ATLASSIAN_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"resources.list","description":"List the Atlassian sites authorized for this connection. Returns each site cloudId, URL, name, avatar, and granted product scopes so callers can select the cloudId required by every page, space, and search action.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pages.list","description":"List Confluence pages in a site, optionally scoped to a single space-id. Uses the v2 cursor-paginated endpoint.","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from /oauth/token/accessible-resources."},"spaceId":{"type":"string","description":"Optional space-id filter."},"limit":{"type":"integer","minimum":1,"maximum":250},"cursor":{"type":"string","description":"Opaque pagination cursor from a previous response."}},"required":["cloudId"]},"requiredScopes":["read:confluence-content.all"],"class":"read"},{"name":"pages.get","description":"Read a single Confluence page by id, including its body in storage format.","parameters":{"type":"object","properties":{"cloudId":{"type":"string"},"pageId":{"type":"string","description":"Confluence page id."},"bodyFormat":{"type":"string","enum":["storage","atlas_doc_format","view"],"description":"Page-body representation to return (defaults to storage)."}},"required":["cloudId","pageId"]},"requiredScopes":["read:confluence-content.all"],"class":"read"},{"name":"pages.create","description":"Create a new Confluence page in a site. Caller assembles the full v2 page envelope (`spaceId`, `title`, optional `parentId`/`status`, and `body`) and passes it as `page`; the adapter forwards the envelope unchanged so optional fields like `parentId` can be omitted cleanly.","parameters":{"type":"object","properties":{"cloudId":{"type":"string"},"page":{"type":"object","description":"Full v2 page-create envelope.","properties":{"spaceId":{"type":"string","description":"Target space id."},"title":{"type":"string"},"parentId":{"type":"string","description":"Optional parent page id; omit for a top-level page."},"status":{"type":"string","enum":["current","draft"]},"body":{"type":"object","properties":{"representation":{"type":"string","enum":["storage","atlas_doc_format","wiki"]},"value":{"type":"string"}},"required":["representation","value"]}},"required":["spaceId","title","body"]}},"required":["cloudId","page"]},"requiredScopes":["write:confluence-content"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pages.update","description":"Update an existing Confluence page. Caller assembles the full v2 page-update envelope as `page` and must include the next version number — Confluence rejects mismatched versions which surfaces as a 409 conflict response.","parameters":{"type":"object","properties":{"cloudId":{"type":"string"},"pageId":{"type":"string"},"page":{"type":"object","description":"Full v2 page-update envelope including `id`, `title`, `body`, `version`, optional `status`.","properties":{"id":{"type":"string"},"title":{"type":"string"},"status":{"type":"string","enum":["current","draft","archived"]},"body":{"type":"object","properties":{"representation":{"type":"string","enum":["storage","atlas_doc_format","wiki"]},"value":{"type":"string"}},"required":["representation","value"]},"version":{"type":"object","properties":{"number":{"type":"integer","minimum":1},"message":{"type":"string"}},"required":["number"]}},"required":["id","title","body","version"]}},"required":["cloudId","pageId","page"]},"requiredScopes":["write:confluence-content"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"pages.delete","description":"Delete a Confluence page (moves it to trash for current pages).","parameters":{"type":"object","properties":{"cloudId":{"type":"string"},"pageId":{"type":"string"}},"required":["cloudId","pageId"]},"requiredScopes":["write:confluence-content"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Add a footer comment to a Confluence page. Posts to the v2 /footer-comments endpoint; caller assembles the full v2 footer-comment envelope (pageId, body, optional parentCommentId) and passes it as `comment` so optional fields can be omitted cleanly.","parameters":{"type":"object","properties":{"cloudId":{"type":"string"},"comment":{"type":"object","description":"Full v2 footer-comment envelope.","properties":{"pageId":{"type":"string","description":"Confluence page id the comment is attached to."},"parentCommentId":{"type":"string","description":"Optional id of a parent footer comment to reply to."},"body":{"type":"object","properties":{"representation":{"type":"string","enum":["storage","atlas_doc_format","wiki"]},"value":{"type":"string"}},"required":["representation","value"]}},"required":["pageId","body"]}},"required":["cloudId","comment"]},"requiredScopes":["write:confluence-content"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"spaces.list","description":"List spaces in a Confluence site.","parameters":{"type":"object","properties":{"cloudId":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":250},"cursor":{"type":"string"},"type":{"type":"string","enum":["global","personal","collaboration","knowledge_base"]},"status":{"type":"string","enum":["current","archived"]}},"required":["cloudId"]},"requiredScopes":["read:confluence-space.summary"],"class":"read"},{"name":"spaces.get","description":"Read a single Confluence space by id.","parameters":{"type":"object","properties":{"cloudId":{"type":"string"},"spaceId":{"type":"string"}},"required":["cloudId","spaceId"]},"requiredScopes":["read:confluence-space.summary"],"class":"read"},{"name":"search.cql","description":"Run a Confluence Query Language (CQL) search across pages, attachments, and spaces. Backed by the v1 /wiki/rest/api/search endpoint, which remains the only supported CQL surface on Confluence Cloud.","parameters":{"type":"object","properties":{"cloudId":{"type":"string"},"cql":{"type":"string","description":"CQL expression, e.g. 'type = \"page\" AND space = \"ENG\"'."},"limit":{"type":"integer","minimum":1,"maximum":100},"start":{"type":"integer","minimum":0,"description":"Offset for non-cursor pagination on the v1 endpoint."},"excerpt":{"type":"string","enum":["indexed","highlight","none","highlight_unescaped","indexed_highlighted"],"description":"Excerpt style returned in search hits."}},"required":["cloudId","cql"]},"requiredScopes":["search:confluence"],"class":"read"}]},{"kind":"constant-contact","displayName":"Constant Contact","description":"Upsert Constant Contact contacts and manage subscriber lists via the V3 API.","auth":{"kind":"oauth2","authorizationUrl":"https://authz.constantcontact.com/oauth2/default/v1/authorize","tokenUrl":"https://authz.constantcontact.com/oauth2/default/v1/token","scopes":["contact_data","campaign_data","offline_access"],"clientIdEnv":"CONSTANT_CONTACT_OAUTH_CLIENT_ID","clientSecretEnv":"CONSTANT_CONTACT_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.upsert","description":"Create a contact or update an existing one by email address, subscribing it to the supplied list ids. Mirrors the activepieces `createOrUpdateContact` action.","parameters":{"type":"object","properties":{"email_address":{"type":"string","description":"Email address used as the dedupe key."},"first_name":{"type":"string"},"last_name":{"type":"string"},"job_title":{"type":"string"},"company_name":{"type":"string"},"phone_number":{"type":"string"},"birthday_month":{"type":"integer","minimum":1,"maximum":12},"birthday_day":{"type":"integer","minimum":1,"maximum":31},"anniversary":{"type":"string","description":"ISO-8601 date."},"list_memberships":{"type":"array","items":{"type":"string"},"description":"List ids the contact should be added to."},"custom_fields":{"type":"array","items":{"type":"object"},"description":"Custom field id / value pairs."},"street_addresses":{"type":"array","items":{"type":"object"}}},"required":["email_address","list_memberships"]},"requiredScopes":["contact_data"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.search","description":"Page through contacts, optionally filtered by email, status, or list id.","parameters":{"type":"object","properties":{"email":{"type":"string"},"status":{"type":"string","enum":["all","active","unsubscribed","deleted"]},"lists":{"type":"string","description":"Comma-separated list ids."},"limit":{"type":"integer","minimum":1,"maximum":500}}},"requiredScopes":["contact_data"],"class":"read"},{"name":"contacts.get","description":"Read a single contact by its V3 contact id.","parameters":{"type":"object","properties":{"contact_id":{"type":"string"},"include":{"type":"string","description":"Comma-separated sub-resources (e.g. \"custom_fields,list_memberships\")."}},"required":["contact_id"]},"requiredScopes":["contact_data"],"class":"read"},{"name":"contacts.update","description":"Replace a contact by id (PUT semantics — supply the full resource).","parameters":{"type":"object","properties":{"contact_id":{"type":"string"},"email_address":{"type":"object"},"first_name":{"type":"string"},"last_name":{"type":"string"},"job_title":{"type":"string"},"company_name":{"type":"string"},"phone_numbers":{"type":"array","items":{"type":"object"}},"list_memberships":{"type":"array","items":{"type":"string"}},"custom_fields":{"type":"array","items":{"type":"object"}},"update_source":{"type":"string","enum":["Account","Contact"]}},"required":["contact_id","email_address","update_source"]},"requiredScopes":["contact_data"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.delete","description":"Soft-delete a contact (status becomes \"deleted\").","parameters":{"type":"object","properties":{"contact_id":{"type":"string"}},"required":["contact_id"]},"requiredScopes":["contact_data"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.search","description":"Page through contact lists in the account.","parameters":{"type":"object","properties":{"include_count":{"type":"boolean"},"include_membership_count":{"type":"string","enum":["all","active"]},"limit":{"type":"integer","minimum":1,"maximum":1000}}},"requiredScopes":["contact_data"],"class":"read"},{"name":"lists.get","description":"Read a single contact list by id.","parameters":{"type":"object","properties":{"list_id":{"type":"string"},"include_membership_count":{"type":"string","enum":["all","active"]}},"required":["list_id"]},"requiredScopes":["contact_data"],"class":"read"},{"name":"lists.create","description":"Create a contact list.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"favorite":{"type":"boolean"}},"required":["name"]},"requiredScopes":["contact_data"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contact.create","description":"Create a new V3 contact with no upsert semantics. Use contacts.upsert when you want email-address dedupe + list-subscribe in one call; use this when you already know the contact does not exist.","parameters":{"type":"object","properties":{"email_address":{"type":"object","description":"V3 email envelope, e.g. { address, permission_to_send }."},"first_name":{"type":"string"},"last_name":{"type":"string"},"job_title":{"type":"string"},"company_name":{"type":"string"},"phone_numbers":{"type":"array","items":{"type":"object"}},"list_memberships":{"type":"array","items":{"type":"string"}},"custom_fields":{"type":"array","items":{"type":"object"}},"create_source":{"type":"string","enum":["Account","Contact"]}},"required":["email_address","create_source"]},"requiredScopes":["contact_data"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaign.create","description":"Create a Constant Contact email campaign. Caller assembles the V3 /emails envelope (name, type, scheduled_date, email_campaign_activities, etc.) and passes it as campaign; the adapter forwards it unchanged.","parameters":{"type":"object","properties":{"campaign":{"type":"object","description":"Full V3 /emails campaign-create envelope."}},"required":["campaign"]},"requiredScopes":["campaign_data"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaign.send","description":"Schedule (send) a drafted Constant Contact email campaign activity. POSTs to /emails/activities/{campaign_activity_id}/schedules with a scheduled_date — passing an immediate date (or \"0\") sends now per the V3 API.","parameters":{"type":"object","properties":{"campaign_activity_id":{"type":"string","description":"Campaign activity id from the /emails envelope."},"scheduled_date":{"type":"string","description":"ISO-8601 timestamp to send at, or \"0\" to send immediately per the V3 API."}},"required":["campaign_activity_id","scheduled_date"]},"requiredScopes":["campaign_data"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"contactout","displayName":"ContactOut","description":"Find and enrich professional and personal emails, phone numbers, and LinkedIn data for prospects.","auth":{"kind":"api-key","hint":"API token from your ContactOut account. Sent as the 'token' header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"people.search","description":"Search for people profiles matching criteria such as name, job title, company, and location.","parameters":{"type":"object","properties":{"name":{"type":"string"},"job_title":{"type":"array","items":{"type":"string"}},"company":{"type":"array","items":{"type":"string"}},"location":{"type":"array","items":{"type":"string"}},"page":{"type":"integer","description":"Result page number."},"reveal_info":{"type":"boolean","description":"Include contact data (consumes email/phone credits)."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"linkedin.enrich","description":"Look up a LinkedIn profile URL and return contact data including emails and phones. Consumes credits when contact info is found.","parameters":{"type":"object","properties":{"profile":{"type":"string","description":"URL-encoded LinkedIn profile URL."},"profile_only":{"type":"boolean","description":"If true, return profile data without contact info."}},"required":["profile"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"people.enrich","description":"Enrich a person from a LinkedIn URL, email, or name plus company. Returns work/personal emails and phones; consumes credits when found.","parameters":{"type":"object","properties":{"linkedin_url":{"type":"string"},"email":{"type":"string"},"full_name":{"type":"string"},"company":{"type":"string"},"company_domain":{"type":"string"},"include":{"type":"array","description":"Data types to include, e.g. work_email, personal_email, phone.","items":{"type":"string"}}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"email.verify","description":"Verify the deliverability of an email address. Consumes a verifier credit for definitive results.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false}]},{"kind":"contentful","displayName":"Contentful","description":"Read, create, update, and publish Contentful entries through the Content Management API for a given space and environment.","auth":{"kind":"oauth2","authorizationUrl":"https://be.contentful.com/oauth/authorize","tokenUrl":"https://be.contentful.com/oauth/token","scopes":["content_management_read","content_management_manage"],"clientIdEnv":"CONTENTFUL_OAUTH_CLIENT_ID","clientSecretEnv":"CONTENTFUL_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"entries.list","description":"List entries in a Contentful environment, optionally filtered by content type and a CMA query string.","parameters":{"type":"object","properties":{"spaceId":{"type":"string","description":"Contentful space ID."},"environmentId":{"type":"string","description":"Contentful environment ID, e.g. \"master\"."},"contentType":{"type":"string","description":"Restrict the listing to a single content type ID."},"query":{"type":"string","description":"Full-text query passed as the CMA `query` parameter."},"limit":{"type":"integer","minimum":1,"maximum":1000},"skip":{"type":"integer","minimum":0}},"required":["spaceId","environmentId"]},"requiredScopes":["content_management_read"],"class":"read"},{"name":"entries.get","description":"Fetch a single Contentful entry by ID.","parameters":{"type":"object","properties":{"spaceId":{"type":"string","description":"Contentful space ID."},"environmentId":{"type":"string","description":"Contentful environment ID, e.g. \"master\"."},"entryId":{"type":"string"}},"required":["spaceId","environmentId","entryId"]},"requiredScopes":["content_management_read"],"class":"read"},{"name":"entries.create","description":"Create a draft entry of the given content type. The `fields` map mirrors the CMA `fields` body field (locale-keyed values).","parameters":{"type":"object","properties":{"spaceId":{"type":"string","description":"Contentful space ID."},"environmentId":{"type":"string","description":"Contentful environment ID, e.g. \"master\"."},"contentType":{"type":"string","description":"Content type ID; sent via the X-Contentful-Content-Type header."},"fields":{"type":"object","description":"Locale-keyed field values, e.g. `{ title: { \"en-US\": \"Hello\" } }`.","additionalProperties":true}},"required":["spaceId","environmentId","contentType","fields"]},"requiredScopes":["content_management_manage"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"entries.update","description":"Update an existing entry. `version` must be the current `sys.version` from a prior read; mismatched versions return 409.","parameters":{"type":"object","properties":{"spaceId":{"type":"string","description":"Contentful space ID."},"environmentId":{"type":"string","description":"Contentful environment ID, e.g. \"master\"."},"entryId":{"type":"string"},"version":{"type":"integer","description":"Current sys.version of the entry."},"fields":{"type":"object","description":"Replacement locale-keyed field values.","additionalProperties":true}},"required":["spaceId","environmentId","entryId","version","fields"]},"requiredScopes":["content_management_manage"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"entries.publish","description":"Publish an entry. `version` must be the current `sys.version`; mismatched versions return 409.","parameters":{"type":"object","properties":{"spaceId":{"type":"string","description":"Contentful space ID."},"environmentId":{"type":"string","description":"Contentful environment ID, e.g. \"master\"."},"entryId":{"type":"string"},"version":{"type":"integer","description":"Current sys.version of the entry."}},"required":["spaceId","environmentId","entryId","version"]},"requiredScopes":["content_management_manage"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"entries.unpublish","description":"Unpublish an entry, reverting it to draft. `version` must be the current `sys.version`; mismatched versions return 409.","parameters":{"type":"object","properties":{"spaceId":{"type":"string","description":"Contentful space ID."},"environmentId":{"type":"string","description":"Contentful environment ID, e.g. \"master\"."},"entryId":{"type":"string"},"version":{"type":"integer","description":"Current sys.version of the entry."}},"required":["spaceId","environmentId","entryId","version"]},"requiredScopes":["content_management_manage"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"entries.delete","description":"Permanently delete an entry. The entry must already be unpublished; publishing state is enforced upstream.","parameters":{"type":"object","properties":{"spaceId":{"type":"string","description":"Contentful space ID."},"environmentId":{"type":"string","description":"Contentful environment ID, e.g. \"master\"."},"entryId":{"type":"string"}},"required":["spaceId","environmentId","entryId"]},"requiredScopes":["content_management_manage"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"contextual-ai","displayName":"Contextual AI","description":"Integrate with Contextual AI to automate document processing and AI workflows.","auth":{"kind":"api-key","hint":"Your Contextual AI API key."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"query.agent","description":"Query an agent with a message.","parameters":{"type":"object","properties":{"agentId":{"type":"string","description":"The ID of the agent to query"},"message":{"type":"string","description":"The message to send to the agent"},"conversationId":{"type":"string","description":"Optional conversation ID to continue an existing conversation"},"includeRetrievalContent":{"type":"boolean","description":"Include the text of retrieved contents in the response"}},"required":["agentId","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"generate","description":"Generate a response using Contextual AI models.","parameters":{"type":"object","properties":{"prompt":{"type":"string","description":"The text prompt to generate a response for"},"model":{"type":"string","description":"The version of Contextual AI to use"},"maxTokens":{"type":"integer","description":"Maximum number of tokens to generate (default: 1024)"},"temperature":{"type":"number","description":"Sampling temperature (0.0 to 1.0)"},"topP":{"type":"number","description":"Nucleus sampling parameter (0.0 to 1.0)"},"systemPrompt":{"type":"string","description":"Optional system prompt for the model"},"knowledge":{"type":"object","description":"Optional knowledge sources to ground the generation"},"avoidCommentary":{"type":"boolean","description":"Avoid providing additional conversational commentary not grounded in context"}},"required":["prompt","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"ingest.document","description":"Upload a document to a datastore for ingestion.","parameters":{"type":"object","properties":{"datastoreId":{"type":"string","description":"The ID of the datastore to upload to"},"file":{"type":"string","description":"The document file to upload (PDF, HTML, DOC, DOCX, PPT, PPTX)"},"customMetadata":{"type":"object","description":"Optional custom metadata as key-value pairs"},"configuration":{"type":"string","description":"Optional configuration override in JSON format"}},"required":["datastoreId","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"parse.file","description":"Parse a document file with configurable parsing modes.","parameters":{"type":"object","properties":{"file":{"type":"string","description":"The document file to parse"},"parseMode":{"type":"string","description":"Parsing mode - basic for simple text, standard for complex documents"},"pageRange":{"type":"string","description":"Optional page range to parse (e.g., 1-10)"},"enableDocumentHierarchy":{"type":"boolean","description":"Add table of contents with document structure"},"enableSplitTables":{"type":"boolean","description":"Split large tables into multiple tables with headers"},"maxSplitTableCells":{"type":"integer","description":"Threshold for splitting large tables"},"figureCaptionMode":{"type":"string","description":"How thorough figure captions should be"}},"required":["file","parseMode"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.agent","description":"Create a new agent with optional configuration.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Name for the new agent"},"description":{"type":"string","description":"Optional description of the agent"},"systemPrompt":{"type":"string","description":"Optional system prompt for the agent"},"filterPrompt":{"type":"string","description":"Optional prompt for filtering retrieved chunks"},"datastoreIds":{"type":"array","items":{"type":"string"},"description":"Datastores to associate with the agent"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invite.users","description":"Invite users to a tenant.","parameters":{"type":"object","properties":{"tenantShortName":{"type":"string","description":"The short name of the tenant/workspace"},"users":{"type":"array","items":{"type":"object"},"description":"List of users to invite"},"email":{"type":"string","description":"Email address of the user to invite"}},"required":["tenantShortName","users"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.datastore","description":"Create a new datastore for document storage and retrieval.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Name for the new datastore"},"description":{"type":"string","description":"Optional description of the datastore"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"contiguity","displayName":"Contiguity","description":"Send iMessages with optional SMS/RCS fallback via Contiguity API.","auth":{"kind":"api-key","hint":"Contiguity API key from console.contiguity.com/dashboard/tokens"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"messages.send_text","description":"Send a text message (SMS/RCS).","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Recipient phone number in E.164 format"},"from":{"type":"string","description":"Your leased iMessage number (optional)"},"message":{"type":"string","description":"Text message content"},"fallback":{"type":"boolean","description":"Enable SMS/RCS fallback (optional)"},"when":{"type":"string","description":"Conditions that trigger SMS/RCS fallback (optional)"}},"required":["to","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send_imessage","description":"Send an iMessage with optional SMS/RCS fallback.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Recipient phone number in E.164 format"},"from":{"type":"string","description":"Your leased iMessage number (optional)"},"message":{"type":"string","description":"iMessage content"},"fallback":{"type":"boolean","description":"Enable SMS/RCS fallback (optional)"},"when":{"type":"string","description":"Conditions that trigger SMS/RCS fallback (optional)"},"attachments":{"type":"object","description":"File attachments: max 10 files, 50MB total, HTTPS required (optional)"}},"required":["to","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sms.send","description":"Send a transactional SMS. Canonical alias for messages.send_text exposed under the cross-connector send-SMS verb.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Recipient phone number in E.164 format"},"from":{"type":"string","description":"Sender phone number (optional)"},"message":{"type":"string","description":"SMS message content"}},"required":["to","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"email.send","description":"Send a transactional email through Contiguity.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Recipient email address"},"from":{"type":"string","description":"Sender email address (must be verified on the Contiguity account)"},"subject":{"type":"string","description":"Email subject line"},"body":{"type":"string","description":"Email body. Plain text unless contentType is text/html."},"contentType":{"type":"string","enum":["text/plain","text/html"],"description":"Mime type for the body; defaults to text/plain."},"replyTo":{"type":"string","description":"Optional Reply-To header"}},"required":["to","from","subject","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"convertkit","displayName":"ConvertKit","description":"Manage ConvertKit subscribers, tags, forms, sequences, broadcasts, and purchases via the v3 API.","auth":{"kind":"api-key","hint":"ConvertKit API Secret (from Account → Advanced)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"fields.create","description":"Create a custom field on a subscriber profile.","parameters":{"type":"object","properties":{"label":{"type":"string"}},"required":["label"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"fields.delete","description":"Delete a custom field.","parameters":{"type":"object","properties":{"fieldId":{"type":"string"}},"required":["fieldId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"fields.list","description":"List all custom fields.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"fields.update","description":"Update a custom field label.","parameters":{"type":"object","properties":{"fieldId":{"type":"string"},"label":{"type":"string"}},"required":["fieldId","label"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.getByEmail","description":"Look up a subscriber by email address.","parameters":{"type":"object","properties":{"emailAddress":{"type":"string"}},"required":["emailAddress"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.getById","description":"Fetch a subscriber by id.","parameters":{"type":"object","properties":{"subscriberId":{"type":"string"}},"required":["subscriberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.list","description":"List subscribers with optional status filter and pagination.","parameters":{"type":"object","properties":{"page":{"type":"integer"},"from":{"type":"string"},"to":{"type":"string"},"updatedFrom":{"type":"string"},"updatedTo":{"type":"string"},"sortOrder":{"type":"string"},"sortField":{"type":"string"},"emailAddress":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.tags.listByEmail","description":"List tags applied to a subscriber by email address.","parameters":{"type":"object","properties":{"emailAddress":{"type":"string"}},"required":["emailAddress"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.tags.listById","description":"List tags applied to a subscriber by id.","parameters":{"type":"object","properties":{"subscriberId":{"type":"string"}},"required":["subscriberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.unsubscribe","description":"Unsubscribe a subscriber by email address.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.update","description":"Update subscriber profile fields.","parameters":{"type":"object","properties":{"subscriberId":{"type":"string"},"firstName":{"type":"string"},"emailAddress":{"type":"string"},"fields":{"type":"object"}},"required":["subscriberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.create","description":"Create an automation webhook (outbound notification).","parameters":{"type":"object","properties":{"targetUrl":{"type":"string"},"event":{"type":"object"}},"required":["targetUrl","event"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Delete an automation webhook.","parameters":{"type":"object","properties":{"ruleId":{"type":"string"}},"required":["ruleId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"broadcasts.stats","description":"Get open and click stats for a broadcast.","parameters":{"type":"object","properties":{"broadcastId":{"type":"string"}},"required":["broadcastId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"broadcasts.create","description":"Create a new broadcast.","parameters":{"type":"object","properties":{"subject":{"type":"string"},"content":{"type":"string"},"description":{"type":"string"},"public":{"type":"boolean"},"publishedAt":{"type":"string"},"sendAt":{"type":"string"},"emailAddress":{"type":"string"},"emailLayoutTemplate":{"type":"string"},"thumbnailAlt":{"type":"string"},"thumbnailUrl":{"type":"string"}},"required":["subject","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"broadcasts.delete","description":"Delete a broadcast.","parameters":{"type":"object","properties":{"broadcastId":{"type":"string"}},"required":["broadcastId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"broadcasts.getById","description":"Fetch a single broadcast by id.","parameters":{"type":"object","properties":{"broadcastId":{"type":"string"}},"required":["broadcastId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"broadcasts.list","description":"List broadcasts.","parameters":{"type":"object","properties":{"page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"broadcasts.update","description":"Update an existing broadcast.","parameters":{"type":"object","properties":{"broadcastId":{"type":"string"},"subject":{"type":"string"},"content":{"type":"string"},"description":{"type":"string"},"public":{"type":"boolean"},"publishedAt":{"type":"string"},"sendAt":{"type":"string"},"emailAddress":{"type":"string"},"emailLayoutTemplate":{"type":"string"},"thumbnailAlt":{"type":"string"},"thumbnailUrl":{"type":"string"}},"required":["broadcastId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.subscribers.add","description":"Subscribe an email to a form.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"email":{"type":"string"},"firstName":{"type":"string"},"fields":{"type":"object"},"tags":{"type":"array"}},"required":["formId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.list","description":"List all forms on the account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.subscriptions.list","description":"List subscriptions to a form.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"page":{"type":"integer"},"subscriberState":{"type":"string"},"sortOrder":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sequences.subscribers.add","description":"Subscribe an email to a sequence.","parameters":{"type":"object","properties":{"sequenceId":{"type":"string"},"email":{"type":"string"},"firstName":{"type":"string"},"fields":{"type":"object"},"tags":{"type":"array"}},"required":["sequenceId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sequences.list","description":"List all sequences on the account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sequences.subscriptions.list","description":"List subscriptions to a sequence.","parameters":{"type":"object","properties":{"sequenceId":{"type":"string"},"page":{"type":"integer"},"subscriberState":{"type":"string"},"sortOrder":{"type":"string"}},"required":["sequenceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tags.create","description":"Create a new tag.","parameters":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.subscriptions.list","description":"List subscriptions tagged with the given tag.","parameters":{"type":"object","properties":{"tagId":{"type":"string"},"page":{"type":"integer"},"subscriberState":{"type":"string"},"sortOrder":{"type":"string"}},"required":["tagId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tags.list","description":"List all tags on the account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tags.removeBySubscriberEmail","description":"Remove a tag from a subscriber identified by email address.","parameters":{"type":"object","properties":{"tagId":{"type":"string"},"email":{"type":"string"}},"required":["tagId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.removeBySubscriberId","description":"Remove a tag from a subscriber identified by id.","parameters":{"type":"object","properties":{"tagId":{"type":"string"},"subscriberId":{"type":"string"}},"required":["tagId","subscriberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.apply","description":"Tag a subscriber by email address.","parameters":{"type":"object","properties":{"tagId":{"type":"string"},"email":{"type":"string"},"firstName":{"type":"string"},"fields":{"type":"object"}},"required":["tagId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"purchases.createBatch","description":"Create or upsert a batch of purchases.","parameters":{"type":"object","properties":{"purchases":{"type":"array"}},"required":["purchases"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"purchases.create","description":"Create or upsert a single purchase.","parameters":{"type":"object","properties":{"purchase":{"type":"object"}},"required":["purchase"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"purchases.getById","description":"Fetch a purchase by id.","parameters":{"type":"object","properties":{"purchaseId":{"type":"string"}},"required":["purchaseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"purchases.list","description":"List purchases.","parameters":{"type":"object","properties":{"page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"copper","displayName":"Copper","description":"Copper CRM: create and update people, leads, companies, opportunities, projects, tasks, and activities; search across the full entity set.","auth":{"kind":"api-key","hint":"Copper API key from Settings → Integrations → API Keys. Sent as the X-PW-AccessToken header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.person","description":"Create a person record in Copper.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Full name of the person."},"email":{"type":"string"},"emails":{"type":"array","items":{"type":"object"}},"phone_numbers":{"type":"array","items":{"type":"object"}},"tags":{"type":"array","items":{"type":"string"}},"details":{"type":"string"},"fields":{"type":"object","description":"Additional / custom fields."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.person","description":"Update an existing person record.","parameters":{"type":"object","properties":{"personId":{"type":"string","description":"Copper person ID."},"updateFields":{"type":"object","description":"Fields to update."}},"required":["personId","updateFields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.lead","description":"Create a lead in Copper.","parameters":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"phone_numbers":{"type":"array","items":{"type":"object"}},"details":{"type":"string"},"fields":{"type":"object"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.lead","description":"Update an existing lead.","parameters":{"type":"object","properties":{"leadId":{"type":"string"},"updateFields":{"type":"object"}},"required":["leadId","updateFields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"convert.lead","description":"Convert a lead into a person, company, and/or opportunity.","parameters":{"type":"object","properties":{"leadId":{"type":"string"},"details":{"type":"object","description":"Conversion options payload."}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.company","description":"Create a company record.","parameters":{"type":"object","properties":{"name":{"type":"string"},"email_domain":{"type":"string"},"phone_numbers":{"type":"array","items":{"type":"object"}},"details":{"type":"string"},"fields":{"type":"object"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.company","description":"Update a company record.","parameters":{"type":"object","properties":{"companyId":{"type":"string"},"updateFields":{"type":"object"}},"required":["companyId","updateFields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.opportunity","description":"Create an opportunity.","parameters":{"type":"object","properties":{"name":{"type":"string"},"primary_contact_id":{"type":"string"},"pipelineStageId":{"type":"string"},"priority":{"type":"string"},"details":{"type":"string"},"fields":{"type":"object"}},"required":["name","primary_contact_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.opportunity","description":"Update an opportunity.","parameters":{"type":"object","properties":{"opportunityId":{"type":"string"},"updateFields":{"type":"object"}},"required":["opportunityId","updateFields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.project","description":"Create a project.","parameters":{"type":"object","properties":{"name":{"type":"string"},"details":{"type":"string"},"fields":{"type":"object"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.project","description":"Update a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"updateFields":{"type":"object"}},"required":["projectId","updateFields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.task","description":"Create a task. Optionally attach to a parent entity (person, lead, opportunity, ...).","parameters":{"type":"object","properties":{"name":{"type":"string"},"entity":{"type":"string","description":"Parent entity type (person, lead, company, opportunity, project)."},"entityItemId":{"type":"string","description":"Parent entity resource ID."},"due_date":{"type":"string","description":"Unix epoch seconds."},"reminder_date":{"type":"string","description":"Unix epoch seconds."},"priority":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"details":{"type":"string"},"fields":{"type":"object"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.activity","description":"Log an activity (note, call, meeting, etc.) against a Copper entity (parent resource).","parameters":{"type":"object","properties":{"entity":{"type":"string","description":"Parent entity type (person, lead, company, opportunity, project)."},"entityItemId":{"type":"string","description":"Parent entity resource ID."},"activity_type":{"type":"object","description":"Activity type { category, id } per Copper activity_types."},"details":{"type":"string","description":"Activity body."},"activity_date":{"type":"string","description":"Unix epoch seconds."}},"required":["entity","entityItemId","activity_type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"search.for.an.activity","description":"Search activities, with optional parent + date-range filters.","parameters":{"type":"object","properties":{"parent":{"type":"object","description":"Optional parent entity reference { type, id }."},"minimum_activity_date":{"type":"integer","description":"Unix epoch seconds."},"maximum_activity_date":{"type":"integer","description":"Unix epoch seconds."},"full_result":{"type":"boolean"},"page_size":{"type":"integer","minimum":1,"maximum":200},"page_number":{"type":"integer","minimum":1},"sort_by":{"type":"string"},"sort_direction":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.for.aperson","description":"Search for people by name, email, phone, address, or interaction filters.","parameters":{"type":"object","properties":{"name":{"type":"string"},"emails":{"type":"array","items":{"type":"string"}},"phone_number":{"type":"string"},"email_domains":{"type":"array","items":{"type":"string"}},"city":{"type":"string"},"state":{"type":"string"},"postal_code":{"type":"string"},"country":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"followed":{"type":"string"},"age":{"type":"integer"},"minimum_interaction_count":{"type":"integer"},"maximum_interaction_count":{"type":"integer"},"minimum_interaction_date":{"type":"integer"},"maximum_interaction_date":{"type":"integer"},"minimum_created_date":{"type":"integer"},"maximum_created_date":{"type":"integer"},"page_size":{"type":"integer","minimum":1,"maximum":200},"page_number":{"type":"integer","minimum":1},"sort_by":{"type":"string"},"sort_direction":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.for.alead","description":"Search leads by status, monetary value, modified date, or other filters.","parameters":{"type":"object","properties":{"name":{"type":"string"},"emails":{"type":"array","items":{"type":"string"}},"phone_number":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"postal_code":{"type":"string"},"country":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"include_converted_leads":{"type":"boolean"},"minimum_monetary_value":{"type":"number"},"maximum_monetary_value":{"type":"number"},"minimum_modified_date":{"type":"integer"},"maximum_modified_date":{"type":"integer"},"minimum_interaction_count":{"type":"integer"},"maximum_interaction_count":{"type":"integer"},"page_size":{"type":"integer","minimum":1,"maximum":200},"page_number":{"type":"integer","minimum":1},"sort_by":{"type":"string"},"sort_direction":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.for.acompany","description":"Search companies by name, domain, location, socials, or interaction filters.","parameters":{"type":"object","properties":{"name":{"type":"string"},"phone_number":{"type":"string"},"email_domains":{"type":"array","items":{"type":"string"}},"city":{"type":"string"},"state":{"type":"string"},"postal_code":{"type":"string"},"country":{"type":"string"},"socials":{"type":"array","items":{"type":"object"}},"tags":{"type":"array","items":{"type":"string"}},"followed":{"type":"string"},"age":{"type":"integer"},"minimum_interaction_count":{"type":"integer"},"maximum_interaction_count":{"type":"integer"},"minimum_interaction_date":{"type":"integer"},"maximum_interaction_date":{"type":"integer"},"minimum_created_date":{"type":"integer"},"maximum_created_date":{"type":"integer"},"page_size":{"type":"integer","minimum":1,"maximum":200},"page_number":{"type":"integer","minimum":1},"sort_by":{"type":"string"},"sort_direction":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.for.an.opportunity","description":"Search opportunities by status, priority, stage, close-date, or other filters.","parameters":{"type":"object","properties":{"name":{"type":"string"},"status_ids":{"type":"array","items":{"type":"string"}},"priorities":{"type":"array","items":{"type":"string"}},"pipeline_stage_ids":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"followed":{"type":"string"},"minimum_monetary_value":{"type":"number"},"maximum_monetary_value":{"type":"number"},"minimum_close_date":{"type":"integer"},"maximum_close_date":{"type":"integer"},"minimum_stage_change_date":{"type":"integer"},"maximum_stage_change_date":{"type":"integer"},"minimum_interaction_count":{"type":"integer"},"maximum_interaction_count":{"type":"integer"},"minimum_interaction_date":{"type":"integer"},"maximum_interaction_date":{"type":"integer"},"minimum_created_date":{"type":"integer"},"maximum_created_date":{"type":"integer"},"page_size":{"type":"integer","minimum":1,"maximum":200},"page_number":{"type":"integer","minimum":1},"sort_by":{"type":"string"},"sort_direction":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.for.aproject","description":"Search projects by name, status, or tag filters.","parameters":{"type":"object","properties":{"name":{"type":"string"},"status":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"followed":{"type":"string"},"minimum_interaction_count":{"type":"integer"},"maximum_interaction_count":{"type":"integer"},"minimum_interaction_date":{"type":"integer"},"maximum_interaction_date":{"type":"integer"},"minimum_created_date":{"type":"integer"},"maximum_created_date":{"type":"integer"},"page_size":{"type":"integer","minimum":1,"maximum":200},"page_number":{"type":"integer","minimum":1},"sort_by":{"type":"string"},"sort_direction":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"copy-ai","displayName":"Copy.ai","description":"Run Copy.ai workflows from agents and read back run status and outputs. Workflows are configured in the Copy.ai UI and triggered here by workflowId with a JSON input payload.","auth":{"kind":"api-key","hint":"Copy.ai workspace API key (Workspace Settings → API). Sent in the x-copy-ai-api-key header on every request."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"workflow.run","description":"Trigger a Copy.ai workflow by ID with a JSON inputs object. Returns the workflowRunId that subsequent status and outputs reads use to track the asynchronous run.","parameters":{"type":"object","properties":{"workflowId":{"type":"string","description":"Copy.ai workflow ID copied from the workflow editor URL or the Workflows list."},"startVariables":{"type":"object","description":"Inputs payload for the workflow. Keys must match the input variable names declared in the Copy.ai workflow editor."},"metadata":{"type":"object","description":"Optional caller-supplied metadata attached to the run record; surfaces back in status and outputs reads."}},"required":["workflowId","startVariables"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"workflow.run.status","description":"Read the current status of a Copy.ai workflow run (queued, running, completed, failed) by workflowRunId.","parameters":{"type":"object","properties":{"workflowRunId":{"type":"string","description":"workflowRunId returned by workflow.run; identifies the run whose status is being polled."}},"required":["workflowRunId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workflow.run.outputs","description":"Read the final outputs of a completed Copy.ai workflow run. Returns the workflow output variables keyed by name; callers should first confirm status is completed via workflow.run.status.","parameters":{"type":"object","properties":{"workflowRunId":{"type":"string","description":"workflowRunId returned by workflow.run; identifies the completed run whose outputs are being read."}},"required":["workflowRunId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"couchbase","displayName":"Couchbase","description":"Query documents, read/write/delete records, and manage Couchbase buckets and clusters.","auth":{"kind":"api-key","hint":"Couchbase username and password for cluster access."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"cluster.info","description":"Get cluster information and node status.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"buckets.list","description":"List all buckets in the cluster.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.query","description":"Execute a N1QL query to search and retrieve documents.","parameters":{"type":"object","properties":{"statement":{"type":"string"},"timeout":{"type":"string"},"consistency":{"type":"string"}},"required":["statement"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.get","description":"Retrieve a document by its key.","parameters":{"type":"object","properties":{"bucket":{"type":"string"},"scope":{"type":"string"},"collection":{"type":"string"},"docId":{"type":"string"}},"required":["bucket","docId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.create","description":"Insert a new document into a bucket.","parameters":{"type":"object","properties":{"bucket":{"type":"string"},"scope":{"type":"string"},"collection":{"type":"string"},"docId":{"type":"string"},"content":{"type":"object"}},"required":["bucket","docId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.update","description":"Update an existing document by ID.","parameters":{"type":"object","properties":{"bucket":{"type":"string"},"scope":{"type":"string"},"collection":{"type":"string"},"docId":{"type":"string"},"content":{"type":"object"}},"required":["bucket","docId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"documents.delete","description":"Delete a document by its key.","parameters":{"type":"object","properties":{"bucket":{"type":"string"},"scope":{"type":"string"},"collection":{"type":"string"},"docId":{"type":"string"}},"required":["bucket","docId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"document.upsert","description":"Upsert (insert or replace) a document by key. Idempotent: re-runs with the same key and content produce the same final state.","parameters":{"type":"object","properties":{"bucket":{"type":"string"},"scope":{"type":"string"},"collection":{"type":"string"},"docId":{"type":"string"},"content":{"type":"object"}},"required":["bucket","docId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"index.create","description":"Create a primary or secondary index by executing a CREATE INDEX statement against the N1QL query service.","parameters":{"type":"object","properties":{"statement":{"type":"string","description":"Full CREATE [PRIMARY] INDEX statement, e.g. `CREATE PRIMARY INDEX ON `bucket`` or `CREATE INDEX ix_name ON `bucket`(field)`."},"timeout":{"type":"string"}},"required":["statement"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"query.run","description":"Execute an arbitrary N1QL query against the query service. Canonical query-execution verb; mirrors documents.query but is not scoped to document retrieval semantics.","parameters":{"type":"object","properties":{"statement":{"type":"string"},"timeout":{"type":"string"},"consistency":{"type":"string"}},"required":["statement"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"crisp","displayName":"Crisp","description":"Manage Crisp customer-support conversations and contacts: create conversations, post operator notes, upsert contact people, find user profiles, and transition conversation state.","auth":{"kind":"api-key","hint":"Crisp API token identifier + key (HTTP Basic). Connection metadata must include websiteId — the Crisp website ID against which actions run."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"conversation.create","description":"Create a new conversation thread on the connected Crisp website.","parameters":{"type":"object","properties":{"websiteId":{"type":"string"}},"required":["websiteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversation.note.add","description":"Append an internal operator note to an existing conversation. Notes are visible to operators only.","parameters":{"type":"object","properties":{"websiteId":{"type":"string"},"sessionId":{"type":"string"},"content":{"type":"string"},"from":{"type":"string","enum":["operator","user"],"description":"Who the note is attributed to. Defaults to operator."},"origin":{"type":"string"}},"required":["websiteId","sessionId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contact.upsert","description":"Create or update a Crisp People contact identified by email. Sets profile fields (name, phone, company, address, website, notepad).","parameters":{"type":"object","properties":{"websiteId":{"type":"string"},"email":{"type":"string"},"person":{"type":"object","properties":{"nickname":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"website":{"type":"string"}}},"company":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"}}},"notepad":{"type":"string"}},"required":["websiteId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"user.profile.find","description":"Fetch a Crisp People profile by its peopleId (email-hash or contact identifier).","parameters":{"type":"object","properties":{"websiteId":{"type":"string"},"peopleId":{"type":"string"}},"required":["websiteId","peopleId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversation.state.update","description":"Transition the state of an existing conversation: pending, unresolved, or resolved.","parameters":{"type":"object","properties":{"websiteId":{"type":"string"},"sessionId":{"type":"string"},"state":{"type":"string","enum":["pending","unresolved","resolved"]}},"required":["websiteId","sessionId","state"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"conversation.find","description":"List conversations on the website, optionally filtered by free-text search query and paginated by page number.","parameters":{"type":"object","properties":{"websiteId":{"type":"string"},"searchQuery":{"type":"string"},"pageNumber":{"type":"integer"}},"required":["websiteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.send","description":"Post a user-visible text message into an existing conversation, attributed by default to an operator.","parameters":{"type":"object","properties":{"websiteId":{"type":"string"},"sessionId":{"type":"string"},"content":{"type":"string","description":"Message content (plain text)."},"from":{"type":"string","enum":["operator","user"],"description":"Who the message is attributed to. Defaults to operator."},"origin":{"type":"string","description":"Origin tag for the message (e.g. \"chat\", \"email\")."}},"required":["websiteId","sessionId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversation.assign","description":"Assign a conversation to an operator (and optionally pin it to a routing assignment list).","parameters":{"type":"object","properties":{"websiteId":{"type":"string"},"sessionId":{"type":"string"},"assigned":{"type":"object","description":"Routing target. Provide `user_id` to assign to a specific operator.","properties":{"user_id":{"type":"string"}}}},"required":["websiteId","sessionId","assigned"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"crustdata","displayName":"Crustdata","description":"Real-time B2B company and people data API for enriching, identifying, and searching companies and professional profiles.","auth":{"kind":"api-key","hint":"API key (token) from the Crustdata dashboard. Sent as the Authorization: Bearer header. Requests also send the x-api-version: 2025-11-01 header."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"company.identify","description":"Resolve company domains to Crustdata company records.","parameters":{"type":"object","properties":{"domains":{"type":"array","items":{"type":"string"}}},"required":["domains"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.enrich","description":"Retrieve full company profiles for one or more domains.","parameters":{"type":"object","properties":{"domains":{"type":"array","items":{"type":"string"}},"fields":{"type":"array","items":{"type":"string"}}},"required":["domains"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.search","description":"Search companies with filters and sorting.","parameters":{"type":"object","properties":{"filters":{"type":"object"},"page":{"type":"integer"}},"required":["filters"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"person.enrich","description":"Enrich people by LinkedIn profile URL or business email; optionally select returned fields.","parameters":{"type":"object","properties":{"professional_network_profile_urls":{"type":"array","items":{"type":"string"}},"business_emails":{"type":"array","items":{"type":"string"}},"fields":{"type":"array","items":{"type":"string"}}},"required":["professional_network_profile_urls"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"person.search","description":"Search people with filters and sorting.","parameters":{"type":"object","properties":{"filters":{"type":"object"},"page":{"type":"integer"}},"required":["filters"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"cryptolens","displayName":"Cryptolens","description":"Manage Cryptolens customers and software license keys.","auth":{"kind":"api-key","hint":"Cryptolens access token with the relevant key/customer scopes."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"customer.add","description":"Create a customer record, optionally enabling the customer portal with activation management.","parameters":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"companyName":{"type":"string"},"notes":{"type":"string"},"enableCustomerAssociation":{"type":"boolean"},"allowActivationManagement":{"type":"boolean"},"allowMultipleUserAssociation":{"type":"boolean"}},"required":["name","email","companyName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"key.block","description":"Block a license key so the Activation method will reject it until the key is unblocked.","parameters":{"type":"object","properties":{"productId":{"type":"number"},"key":{"type":"string"}},"required":["productId","key"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"key.activate","description":"Activate a license key against a machine. Verifies the key, records the activation under the supplied MachineCode, and returns the cryptographically-signed license payload.","parameters":{"type":"object","properties":{"productId":{"type":"number"},"key":{"type":"string"},"machineCode":{"type":"string"},"friendlyName":{"type":"string"},"fieldsToReturn":{"type":"number"},"metadata":{"type":"boolean"},"floatingTimeInterval":{"type":"number"},"maxOverdraft":{"type":"number"}},"required":["productId","key","machineCode"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"key.deactivate","description":"Deactivate (or float-release) a license key activation for the supplied MachineCode, freeing the seat for re-use.","parameters":{"type":"object","properties":{"productId":{"type":"number"},"key":{"type":"string"},"machineCode":{"type":"string"},"floating":{"type":"boolean"}},"required":["productId","key","machineCode"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"key.create","description":"Create one or more license keys for a product with optional feature flags, machine limits, and customer/reseller binding.","parameters":{"type":"object","properties":{"productId":{"type":"number"},"period":{"type":"number"},"f1":{"type":"boolean"},"f2":{"type":"boolean"},"f3":{"type":"boolean"},"f4":{"type":"boolean"},"f5":{"type":"boolean"},"f6":{"type":"boolean"},"f7":{"type":"boolean"},"f8":{"type":"boolean"},"notes":{"type":"string"},"block":{"type":"boolean"},"customerId":{"type":"number"},"newCustomer":{"type":"boolean"},"trialActivation":{"type":"boolean"},"maxNoOfMachines":{"type":"number"},"allowedMachines":{"type":"string"},"resellerId":{"type":"number"},"noOfKeys":{"type":"number"}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"csv-files","displayName":"CSV Files","description":"Parse bounded CSV files into records and create CSV files from structured records.","auth":{"kind":"none"},"defaultConsistencyModel":"advisory","category":"database","capabilities":[{"name":"csv.parse","class":"read","description":"Parse a base64-encoded CSV file into object records or row arrays.","parameters":{"type":"object","properties":{"fileBase64":{"type":"string","description":"CSV file content encoded as canonical base64."},"delimiter":{"type":"string","minLength":1,"maxLength":1,"default":","},"header":{"type":"boolean","default":true}},"required":["fileBase64"],"additionalProperties":false}},{"name":"csv.create","class":"mutation","description":"Create a base64-encoded CSV file from object records.","parameters":{"type":"object","properties":{"records":{"type":"array","minItems":1,"maxItems":10000,"items":{"type":"object"}},"columns":{"type":"array","maxItems":256,"items":{"type":"string","minLength":1}},"delimiter":{"type":"string","minLength":1,"maxLength":1,"default":","},"header":{"type":"boolean","default":true}},"required":["records"],"additionalProperties":false},"cas":"none","externalEffect":true}]},{"kind":"customer-io","displayName":"Customer.io","description":"Trigger Customer.io campaigns, send transactional email, and read customers / segments / messages through the App API (Bearer).","auth":{"kind":"api-key","hint":"Customer.io App API key (Workspace Settings → API Credentials → App API Keys). For EU workspaces also set metadata.region=\"eu\"."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"customers.search","description":"Search customers by attribute filter (App API customer search).","parameters":{"type":"object","properties":{"filter":{"type":"object","description":"Customer.io filter expression (e.g. { and: [{ attribute: { field: \"email\", operator: \"eq\", value: \"ada@example.com\" } }] })."},"start":{"type":"string","description":"Pagination cursor returned by previous response."},"limit":{"type":"integer","minimum":1,"maximum":1000}},"required":["filter"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.get","description":"Read a single customer profile and its tracked attributes by ID.","parameters":{"type":"object","properties":{"customerId":{"type":"string"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.segments","description":"List the segments a customer belongs to.","parameters":{"type":"object","properties":{"customerId":{"type":"string"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"segments.search","description":"List all segments in the workspace.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"segments.get","description":"Read a single segment definition.","parameters":{"type":"object","properties":{"segmentId":{"type":"integer"}},"required":["segmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.search","description":"List campaigns (newsletters and triggered) defined in the workspace.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.get","description":"Read a single campaign by ID.","parameters":{"type":"object","properties":{"campaignId":{"type":"integer"}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.search","description":"List sent messages (delivery records) with optional filters.","parameters":{"type":"object","properties":{"start":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":1000},"type":{"type":"string","enum":["email","push","sms","webhook","slack","in_app"]},"metric":{"type":"string","enum":["delivered","sent","opened","clicked","bounced","failed","unsubscribed","spammed"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.trigger","description":"Trigger an API-triggered broadcast campaign for a set of recipients or segments.","parameters":{"type":"object","properties":{"campaignId":{"type":"integer"},"ids":{"type":"array","items":{"type":"string"},"description":"Customer IDs to target."},"emails":{"type":"array","items":{"type":"string"}},"per_user_data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"data":{"type":"object"}},"required":["id"]}},"data_file_url":{"type":"string","description":"CSV/URL data file for high-volume broadcasts."},"data":{"type":"object","description":"Shared trigger data merged into the campaign template."},"recipients":{"type":"object","description":"Segment-targeting filter (mutually exclusive with ids/emails)."}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactional.send-email","description":"Send a transactional email via /v1/send/email (uses a configured transactional message template).","parameters":{"type":"object","properties":{"message":{"type":"object","properties":{"transactional_message_id":{"type":["string","integer"]},"to":{"type":"string"},"identifiers":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"cio_id":{"type":"string"}}},"from":{"type":"string"},"reply_to":{"type":"string"},"subject":{"type":"string"},"body":{"type":"string"},"plaintext_body":{"type":"string"},"preheader":{"type":"string"},"fake_bcc":{"type":"boolean"},"disable_message_retention":{"type":"boolean"},"send_to_unsubscribed":{"type":"boolean"},"tracked":{"type":"boolean"},"queue_draft":{"type":"boolean"},"message_data":{"type":"object"},"headers":{"type":"object"},"attachments":{"type":"object"}},"required":["identifiers"]}},"required":["message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"segments.add-customers","description":"Add customers to a manual segment.","parameters":{"type":"object","properties":{"segmentId":{"type":"integer"},"ids":{"type":"array","items":{"type":"string"}},"id_type":{"type":"string","enum":["id","email","cio_id"]}},"required":["segmentId","ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"segments.remove-customers","description":"Remove customers from a manual segment.","parameters":{"type":"object","properties":{"segmentId":{"type":"integer"},"ids":{"type":"array","items":{"type":"string"}},"id_type":{"type":"string","enum":["id","email","cio_id"]}},"required":["segmentId","ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"customgpt","displayName":"CustomGPT","description":"Create and manage CustomGPT agents (chatbots), drive conversations, and export transcripts.","auth":{"kind":"api-key","hint":"CustomGPT API token (Profile → API → Create API Key)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"agents.create","description":"Create a new CustomGPT agent (project) seeded from a sitemap URL or uploaded file.","parameters":{"type":"object","properties":{"project_name":{"type":"string","description":"Display name for the new agent/project."},"sitemap_path":{"type":"string","description":"URL to a sitemap to import as agent knowledge. Omit if uploading a file."},"file":{"type":"string","description":"Base64-encoded file payload (text/audio/video) to seed agent knowledge. Omit if using sitemap."},"is_shared":{"type":"boolean","description":"Whether the agent is public."}},"required":["project_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"agents.update","description":"Update an existing CustomGPT agent (project) — rename, change sharing, or replace knowledge source.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Target project ID."},"project_name":{"type":"string","description":"New display name."},"sitemap_path":{"type":"string","description":"New sitemap URL."},"is_shared":{"type":"boolean","description":"Whether the agent is public."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"agents.delete","description":"Permanently delete a CustomGPT agent (project) and its associated knowledge.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Target project ID."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"agents.updateSettings","description":"Update chatbot UI/behavior settings for a CustomGPT agent (persona, colors, citations, branding).","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Target project ID."},"custom_persona":{"type":"string","description":"Custom persona instructions."},"chatbot_model":{"type":"string","description":"Underlying model identifier."},"response_source":{"type":"string","description":"Source for generating responses (e.g. own_content, default)."},"chatbot_msg_lang":{"type":"string","description":"Language code for chatbot messages."},"chatbot_color":{"type":"string","description":"Hex color code for chatbot UI."},"chatbot_toolbar_color":{"type":"string","description":"Hex color code for toolbar."},"default_prompt":{"type":"string","description":"Default prompt shown to users."},"persona_instructions":{"type":"string","description":"Chatbot persona instructions."},"no_answer_message":{"type":"string","description":"Message when no answer is found."},"ending_message":{"type":"string","description":"Message shown at end of conversation."},"hang_in_there_msg":{"type":"string","description":"Message for long processing times."},"chatbot_siesta_msg":{"type":"string","description":"Message when chatbot is unavailable."},"enable_citations":{"type":"boolean","description":"Show citations in responses."},"enable_feedbacks":{"type":"boolean","description":"Collect user feedback."},"citations_view_type":{"type":"string","description":"Citation display style."},"citations_answer_source_label_msg":{"type":"string","description":"Label for the citation answer source."},"citations_sources_label_msg":{"type":"string","description":"Label for the citation sources list."},"is_loading_indicator_enabled":{"type":"boolean","description":"Show loading indicator during responses."},"remove_branding":{"type":"boolean","description":"Remove CustomGPT branding."},"enable_recaptcha_for_public_chatbots":{"type":"boolean","description":"Enable reCAPTCHA on public chatbots."},"is_selling_enabled":{"type":"boolean","description":"Enable selling features."},"is_ocr_enabled":{"type":"boolean","description":"Enable OCR for image inputs."},"is_anonymized":{"type":"boolean","description":"Anonymize stored data."},"file_data_retension":{"type":"boolean","description":"Enable file data retention."},"are_licenses_allowed":{"type":"boolean","description":"Whether project licenses are allowed."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"conversations.create","description":"Open a new conversation thread with a CustomGPT agent so subsequent messages share a session.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Target agent (project) ID."},"name":{"type":"string","description":"Optional human-readable conversation name."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.sendMessage","description":"Send a message to a CustomGPT conversation and receive the agent reply.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Owning agent (project) ID."},"session_id":{"type":"string","description":"Conversation session ID."},"prompt":{"type":"string","description":"Message/question to send."},"stream":{"type":"boolean","description":"Stream the response in real time."},"custom_persona":{"type":"string","description":"Per-message persona override (optional)."},"chatbot_model":{"type":"string","description":"Override the agent model for this turn."},"response_source":{"type":"string","description":"Source for generating the response (own_content, default)."},"agent_capability":{"type":"string","description":"Capability mode (fastest-responses, premium-responses, etc)."},"lang":{"type":"string","description":"Language code for the prompt (default en)."},"custom_context":{"type":"string","description":"Extra context appended to the conversation."}},"required":["projectId","session_id","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.find","description":"Find conversations for an agent — optionally filtered by user, freshness, or session ID.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Owning agent (project) ID."},"session_id":{"type":"string","description":"Exact conversation session ID."},"userFilter":{"type":"string","description":"Filter by user who created the conversation."},"lastUpdatedAfter":{"type":"string","description":"ISO-8601 timestamp; return conversations updated after this point."},"limit":{"type":"integer","description":"Maximum conversations to return."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversations.export","description":"Export the full message history of a CustomGPT conversation as a downloadable transcript.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Owning agent (project) ID."},"session_id":{"type":"string","description":"Conversation session to export."}},"required":["projectId","session_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.list.recent","description":"List recently created conversations for an agent — backs the newConversation polling trigger upstream.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Owning agent (project) ID."},"since":{"type":"string","description":"ISO-8601 timestamp; only return conversations created after this point."},"limit":{"type":"integer","description":"Maximum conversations to return."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"dappier","displayName":"Dappier","description":"Real-time web search, sports news, stock market data, and lifestyle news search.","auth":{"kind":"api-key","hint":"Dappier API Key from https://platform.dappier.com/profile/api-keys"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"search.realTimeWeb","description":"Perform a real-time web search with optional domain filtering.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Natural language query or URL"},"similarity_top_k":{"type":"integer","description":"Number of results to return (default: 9)"},"ref":{"type":"string","description":"Preferred domain to restrict results"},"num_articles_ref":{"type":"integer","description":"Minimum articles from the preferred domain"},"search_algorithm":{"type":"string","description":"Search algorithm to use for matching"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.sportsNews","description":"Search sports news with optional domain filtering.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Natural language query or URL"},"similarity_top_k":{"type":"integer","description":"Number of results to return (default: 9)"},"ref":{"type":"string","description":"Preferred domain to restrict results"},"num_articles_ref":{"type":"integer","description":"Minimum articles from the preferred domain"},"search_algorithm":{"type":"string","description":"Search algorithm to use for matching"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.stockMarketData","description":"Search stock market data and financial information.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Natural language query or stock symbol"},"similarity_top_k":{"type":"integer","description":"Number of results to return (default: 9)"},"ref":{"type":"string","description":"Preferred domain to restrict results"},"num_articles_ref":{"type":"integer","description":"Minimum articles from the preferred domain"},"search_algorithm":{"type":"string","description":"Search algorithm to use for matching"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.lifestyleNews","description":"Search lifestyle news and entertainment content.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Natural language query or URL"},"similarity_top_k":{"type":"integer","description":"Number of results to return (default: 9)"},"ref":{"type":"string","description":"Preferred domain to restrict results"},"num_articles_ref":{"type":"integer","description":"Minimum articles from the preferred domain"},"search_algorithm":{"type":"string","description":"Search algorithm to use for matching"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"dashworks","displayName":"Dashworks","description":"Query a Dashworks Bot for a federated-search answer grounded in the workspace’s connected knowledge sources, with optional inline source citations.","auth":{"kind":"api-key","hint":"Dashworks API key (Settings → API Keys). Sent as a bearer token on every request."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"generate.answer","description":"Ask a configured Dashworks Bot a question and receive a synthesized answer drawn from the bot’s connected sources. When inlineSources is true (default) the answer text contains inline markdown citations.","parameters":{"type":"object","properties":{"botId":{"type":"string","description":"Bot ID copied from Dashworks → Bots → (select bot) → settings. Identifies which knowledge-source bundle the question is routed to."},"message":{"type":"string","description":"The question or prompt to send to the bot."},"inlineSources":{"type":"boolean","description":"When true (default), sources are cited inline in markdown formatting within the answer text. When false, the answer omits inline citations."}},"required":["botId","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"datadog","displayName":"Datadog","description":"Submit logs, metrics, events, and service checks to Datadog (DD-API-KEY ingest surface). The DD-APPLICATION-KEY-gated management surface (monitors, dashboards, query) is intentionally out of scope.","auth":{"kind":"api-key","hint":"Datadog DD-API-KEY (Organization Settings → API Keys). Also set metadata.intakeUrl to the regional intake host for your Datadog site (e.g. https://api.datadoghq.com for US1, https://api.datadoghq.eu for EU, https://api.us3.datadoghq.com for US3, https://api.us5.datadoghq.com for US5, https://api.ap1.datadoghq.com for AP1, https://api.ddog-gov.com for US1-FED)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"auth.validate","description":"Probe credentials against the Datadog API (GET /api/v1/validate).","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"logs.submit","description":"Send one or more structured log entries to Datadog Logs (POST /api/v2/logs). Each entry takes ddsource, ddtags, hostname, message, service, and any additional structured attributes.","parameters":{"type":"object","properties":{"logs":{"type":"array","description":"Array of log entries. Datadog accepts up to 1000 entries or 5 MB per request.","items":{"type":"object","properties":{"ddsource":{"type":"string","description":"The integration name (e.g. nginx, agent-runtime)."},"ddtags":{"type":"string","description":"Comma-separated tag list (env:prod,team:foo)."},"hostname":{"type":"string"},"message":{"type":"string","description":"Log body. JSON-encoded strings are parsed into structured attributes."},"service":{"type":"string"}},"required":["message"],"additionalProperties":true}}},"required":["logs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"metrics.submit","description":"Submit metric series points to Datadog (POST /api/v2/series). Each series carries metric name, type, unit, points, resources, and tags.","parameters":{"type":"object","properties":{"series":{"type":"array","items":{"type":"object","properties":{"metric":{"type":"string","description":"Dot-delimited metric name (e.g. system.cpu.user)."},"type":{"type":"integer","description":"Metric intake type: 0=unspecified, 1=count, 2=rate, 3=gauge. Datadog rejects unknown values.","enum":[0,1,2,3]},"interval":{"type":"integer","description":"Aggregation interval in seconds (required for rate/count)."},"unit":{"type":"string"},"points":{"type":"array","description":"Array of [timestampSeconds, value] pairs OR { timestamp, value } objects per v2 API.","items":{"type":"object","properties":{"timestamp":{"type":"integer","description":"POSIX seconds."},"value":{"type":"number"}},"required":["timestamp","value"]}},"resources":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","description":"e.g. host."}},"required":["name","type"]}},"tags":{"type":"array","items":{"type":"string"}},"metadata":{"type":"object"}},"required":["metric","type","points"]}}},"required":["series"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"metrics.submit.v1","description":"Submit metrics via the v1 intake (POST /api/v1/series) for clients still on the legacy payload shape (points as [[ts, value], ...]).","parameters":{"type":"object","properties":{"series":{"type":"array","items":{"type":"object","properties":{"metric":{"type":"string"},"type":{"type":"string","enum":["count","rate","gauge"],"description":"v1 metric type string (NOT the v2 integer)."},"interval":{"type":"integer"},"host":{"type":"string"},"points":{"type":"array","description":"Array of [timestampSeconds, value] tuples.","items":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2}},"tags":{"type":"array","items":{"type":"string"}}},"required":["metric","points"]}}},"required":["series"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"metrics.distribution.submit","description":"Submit distribution points (histogram-style metrics) to Datadog (POST /api/v1/distribution_points).","parameters":{"type":"object","properties":{"series":{"type":"array","items":{"type":"object","properties":{"metric":{"type":"string"},"host":{"type":"string"},"points":{"type":"array","description":"Array of [timestampSeconds, [values...]] tuples."},"tags":{"type":"array","items":{"type":"string"}},"type":{"type":"string","enum":["distribution"]}},"required":["metric","points"]}}},"required":["series"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"events.post","description":"Post a custom event to the Datadog event stream (POST /api/v1/events). Use for deploys, incidents, agent-significant transitions.","parameters":{"type":"object","properties":{"title":{"type":"string"},"text":{"type":"string","description":"Markdown-formatted body, 4000 char max."},"aggregation_key":{"type":"string","description":"Use a deterministic key to dedupe in the event stream."},"alert_type":{"type":"string","enum":["error","warning","info","success","user_update","recommendation","snapshot"]},"date_happened":{"type":"integer","description":"POSIX seconds. Defaults to now."},"host":{"type":"string"},"priority":{"type":"string","enum":["normal","low"]},"related_event_id":{"type":"integer"},"source_type_name":{"type":"string","description":"Source integration name (e.g. github, jenkins)."},"tags":{"type":"array","items":{"type":"string"}},"device_name":{"type":"string"}},"required":["title","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.list","description":"Stream events from the Datadog event stream within a time window (GET /api/v1/events). Filter by priority, sources, tags, or unaggregated mode.","parameters":{"type":"object","properties":{"start":{"type":"integer","description":"POSIX seconds (required). Window start."},"end":{"type":"integer","description":"POSIX seconds (required). Window end."},"priority":{"type":"string","enum":["normal","low"]},"sources":{"type":"string","description":"Comma-separated list of source names to filter on."},"tags":{"type":"string","description":"Comma-separated list of tags to filter on (host:foo,env:prod)."},"unaggregated":{"type":"boolean"},"exclude_aggregate":{"type":"boolean"},"page":{"type":"integer","minimum":0}},"required":["start","end"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"events.get","description":"Fetch a single event by ID (GET /api/v1/events/{eventId}).","parameters":{"type":"object","properties":{"eventId":{"type":"integer"}},"required":["eventId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"checks.submit","description":"Submit a service-check status (POST /api/v1/check_run). Use 0=OK, 1=WARNING, 2=CRITICAL, 3=UNKNOWN. Service checks back monitor types of class \"service check\".","parameters":{"type":"object","properties":{"check":{"type":"string","description":"Service check name (e.g. app.is_ok)."},"host_name":{"type":"string"},"status":{"type":"integer","enum":[0,1,2,3]},"message":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"timestamp":{"type":"integer","description":"POSIX seconds. Defaults to now."}},"required":["check","host_name","status"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"datafuel","displayName":"DataFuel","description":"Crawl and scrape websites into markdown / structured JSON via the DataFuel API.","auth":{"kind":"api-key","hint":"DataFuel API key (sent as Bearer token)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"crawl.website","description":"Start a crawl job over a website and convert pages to markdown / structured data.","parameters":{"type":"object","properties":{"url":{"type":"string"},"ai_prompt":{"type":"string"},"json_schema":{"type":"object"},"depth":{"type":"integer"},"limit":{"type":"integer"}},"required":["url","depth","limit"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"scrape.website","description":"Scrape a single URL and convert its content to markdown / structured data.","parameters":{"type":"object","properties":{"url":{"type":"string"},"ai_prompt":{"type":"string"},"json_schema":{"type":"object"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.scrape","description":"Fetch the result of a previously-started scrape / crawl job by job_id.","parameters":{"type":"object","properties":{"job_id":{"type":"string"},"markdown":{"type":"boolean"},"ai_response":{"type":"boolean"}},"required":["job_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"datocms","displayName":"DatoCMS","description":"Read and mutate DatoCMS records (items), models (item types), uploads, environments, users, and webhooks via the Content Management API.","auth":{"kind":"api-key","hint":"DatoCMS full-access API token (Settings → API tokens). Sent as a Bearer token; sandbox environment selection is forwarded via the X-Environment header on capabilities that accept an `environment` parameter."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"site.get","description":"Fetch the current DatoCMS project (site) metadata.","parameters":{"type":"object","properties":{"environment":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"items.list","description":"List records (items), optionally filtered by item type and paginated.","parameters":{"type":"object","properties":{"itemTypeId":{"type":"string"},"environment":{"type":"string"},"locale":{"type":"string"},"version":{"type":"string"},"pageOffset":{"type":"integer"},"pageLimit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"items.get","description":"Fetch a single record by id.","parameters":{"type":"object","properties":{"itemId":{"type":"string"},"environment":{"type":"string"},"version":{"type":"string"}},"required":["itemId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"items.create","description":"Create a record (item) of a given item type.","parameters":{"type":"object","properties":{"itemTypeId":{"type":"string"},"attributes":{"type":"object"},"environment":{"type":"string"}},"required":["itemTypeId","attributes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"items.update","description":"Update an existing record.","parameters":{"type":"object","properties":{"itemId":{"type":"string"},"attributes":{"type":"object"},"environment":{"type":"string"}},"required":["itemId","attributes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"items.delete","description":"Delete a record.","parameters":{"type":"object","properties":{"itemId":{"type":"string"},"environment":{"type":"string"}},"required":["itemId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"items.publish","description":"Publish a draft record.","parameters":{"type":"object","properties":{"itemId":{"type":"string"},"environment":{"type":"string"}},"required":["itemId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"items.unpublish","description":"Unpublish a published record.","parameters":{"type":"object","properties":{"itemId":{"type":"string"},"environment":{"type":"string"}},"required":["itemId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"itemTypes.list","description":"List item types (models) defined in the project.","parameters":{"type":"object","properties":{"environment":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"itemTypes.get","description":"Fetch a single item type (model) by id.","parameters":{"type":"object","properties":{"itemTypeId":{"type":"string"},"environment":{"type":"string"}},"required":["itemTypeId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"uploads.list","description":"List media uploads.","parameters":{"type":"object","properties":{"environment":{"type":"string"},"pageOffset":{"type":"integer"},"pageLimit":{"type":"integer"},"query":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"uploads.get","description":"Fetch a single upload by id.","parameters":{"type":"object","properties":{"uploadId":{"type":"string"},"environment":{"type":"string"}},"required":["uploadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"uploads.create","description":"Register a previously uploaded S3 path as a DatoCMS upload (call /upload-requests first to obtain the path).","parameters":{"type":"object","properties":{"path":{"type":"string"},"author":{"type":"string"},"copyright":{"type":"string"},"notes":{"type":"string"},"defaultFieldMetadata":{"type":"object"},"environment":{"type":"string"}},"required":["path"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"uploads.requestUrl","description":"Request a signed S3 upload URL for a new media file. Returned URL is uploaded to with a separate PUT, then registered via uploads.create.","parameters":{"type":"object","properties":{"filename":{"type":"string"},"environment":{"type":"string"}},"required":["filename"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"uploads.delete","description":"Delete an upload.","parameters":{"type":"object","properties":{"uploadId":{"type":"string"},"environment":{"type":"string"}},"required":["uploadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"environments.list","description":"List sandbox environments for the project.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"environments.get","description":"Fetch a single environment by id.","parameters":{"type":"object","properties":{"environmentId":{"type":"string"}},"required":["environmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"environments.fork","description":"Fork an existing environment to create a new sandbox.","parameters":{"type":"object","properties":{"sourceEnvironmentId":{"type":"string"},"newEnvironmentId":{"type":"string"},"fast":{"type":"boolean"}},"required":["sourceEnvironmentId","newEnvironmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.list","description":"List collaborator users on the project.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.get","description":"Fetch a single collaborator by id.","parameters":{"type":"object","properties":{"userId":{"type":"string"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"webhooks.list","description":"List configured webhooks on the project.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"webhooks.get","description":"Fetch a single webhook by id.","parameters":{"type":"object","properties":{"webhookId":{"type":"string"}},"required":["webhookId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"webhooks.create","description":"Create a webhook subscription.","parameters":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"},"events":{"type":"array"},"headers":{"type":"object"},"enabled":{"type":"boolean"}},"required":["name","url","events"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Delete a webhook subscription.","parameters":{"type":"object","properties":{"webhookId":{"type":"string"}},"required":["webhookId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"deepgram","displayName":"Deepgram","description":"Transcribe audio to text, synthesize text to speech, and analyze audio content with AI-powered speech recognition.","auth":{"kind":"api-key","hint":"Deepgram API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"transcription.create","description":"Transcribe audio from a URL or file upload to text.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"URL of the audio file to transcribe."},"model":{"type":"string","description":"Model to use (nova-2, nova-2-general, nova-2-meeting, etc.)."},"language":{"type":"string","description":"BCP-47 language code (e.g., en, es, fr)."},"punctuate":{"type":"boolean","description":"Enable punctuation in transcript."},"paragraphs":{"type":"boolean","description":"Enable paragraph breaks."},"diarize":{"type":"boolean","description":"Enable speaker diarization."},"smart_format":{"type":"boolean","description":"Enable smart formatting."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transcription.get","description":"Get the status and result of a transcription request.","parameters":{"type":"object","properties":{"requestId":{"type":"string","description":"ID of the transcription request."}},"required":["requestId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"speak.generate","description":"Convert text to speech with AI-powered voice synthesis.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"Text to synthesize into speech."},"model":{"type":"string","description":"Voice model to use (aura-asteria-en, aura-luna-en, etc.)."},"encoding":{"type":"string","description":"Output audio encoding (linear16, pcm, ulaw, etc.)."},"sample_rate":{"type":"integer","description":"Sample rate in Hz (e.g., 16000, 24000)."}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.list","description":"List all projects in your Deepgram account.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.get","description":"Get details of a specific project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"UUID of the project."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"usage.list","description":"Get usage analytics and billing information for a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"UUID of the project."},"startDateTime":{"type":"string","description":"Start date in ISO 8601 format."},"endDateTime":{"type":"string","description":"End date in ISO 8601 format."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"keys.list","description":"List all API keys for a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"UUID of the project."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"keys.create","description":"Create a new API key for a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"UUID of the project."},"comment":{"type":"string","description":"Comment or description for the key."},"scopes":{"type":"array","description":"List of scopes (e.g., [\"admin\", \"member\"])."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"deepseek","displayName":"DeepSeek","description":"Generate completions with DeepSeek chat models via the DeepSeek API.","auth":{"kind":"api-key","hint":"DeepSeek API key (Bearer token from platform.deepseek.com)."},"category":"other","defaultConsistencyModel":"cache","capabilities":[{"name":"ask.deepseek","description":"Run a DeepSeek chat completion. Mirrors the activepieces \"Ask Deepseek\" action and accepts the same generation knobs.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"The DeepSeek model that will generate the completion (e.g. deepseek-chat, deepseek-reasoner)."},"prompt":{"type":"string","description":"The user question to send to the model."},"frequencyPenalty":{"type":"number","description":"Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far."},"maxTokens":{"type":"integer","description":"Maximum number of tokens to generate. Between 1 and 8192."},"presencePenalty":{"type":"number","description":"Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far."},"responseFormat":{"type":"string","description":"Response format: \"text\" or \"json_object\". JSON mode requires the prompt to also instruct JSON output.","enum":["text","json_object"]},"temperature":{"type":"number","description":"Sampling temperature between 0 and 2. Lower values produce more deterministic output."},"topP":{"type":"number","description":"Nucleus sampling cutoff. Values <= 1. Generally alter this OR temperature, not both."},"memoryKey":{"type":"string","description":"Optional key that shares chat history across runs. Leave empty to invoke the model statelessly."},"roles":{"type":"array","description":"Optional array of role messages prepended to the conversation (e.g. system / assistant / user turns).","items":{"type":"object","properties":{"role":{"type":"string","enum":["system","user","assistant"]},"content":{"type":"string"}},"required":["role","content"]}}},"required":["model","prompt","maxTokens","responseFormat"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":false},{"name":"models.list","description":"List the chat models the DeepSeek account can invoke.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"demandbase","displayName":"Demandbase","description":"Manage Demandbase platform users (list, get, create) through the Admin API using client-credentials auth.","auth":{"kind":"oauth2","grantType":"client_credentials","tokenUrl":"https://uapi.demandbase.com/auth/v1/token","scopes":[],"clientIdEnv":"DEMANDBASE_OAUTH_CLIENT_ID","clientSecretEnv":"DEMANDBASE_OAUTH_CLIENT_SECRET"},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.list","description":"List platform users. Paginate with limit/offset; filter by status/role.","parameters":{"type":"object","properties":{"limit":{"type":"number","description":"Max records to return (max 100)."},"offset":{"type":"number","description":"Pagination offset."},"status":{"type":"string","description":"Filter by user status."},"role":{"type":"string","description":"Filter by user role."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.get","description":"Get a single platform user by id.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"The user's unique identifier."}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.create","description":"Create a platform user. email, first_name, last_name, and role are required.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"User email address."},"first_name":{"type":"string","description":"User first name."},"last_name":{"type":"string","description":"User last name."},"role":{"type":"string","description":"User role within the platform."}},"required":["email","first_name","last_name","role"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"denser-ai","displayName":"Denser.ai","description":"Query Denser.ai chatbots against a tenant's document and website corpus and receive synthesized answers with optional citations.","auth":{"kind":"api-key","hint":"Denser.ai API key (workspace dashboard → API keys). Sent as a bearer token on every chat request."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"process.input.text","description":"Send a user question to a configured Denser.ai chatbot and receive a synthesized answer drawn from the chatbot's retrieval corpus. Optional knobs select the underlying model, override the system prompt, and toggle inline citations.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Identifier of the target chatbot, copied from the Denser dashboard at https://denser.ai/u/chatbots."},"question":{"type":"string","description":"The user question to be processed by the chatbot."},"prompt":{"type":"string","description":"Optional system prompt that overrides the chatbot's default instructions for this single call."},"model":{"type":"string","description":"Optional model identifier (for example gpt-3.5, gpt-4). When omitted, Denser uses the chatbot default."},"citation":{"type":"boolean","description":"When true, the response includes inline citations linking back to the source documents used to synthesize the answer."}},"required":["chatbotId","question"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"descript","displayName":"Descript","description":"AI-powered video and podcast editor. Run Underlord edits on a project, import media, list/get projects, and publish.","auth":{"kind":"api-key","hint":"Descript personal API token (workspace settings → API)."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"projects.list","description":"List projects in the workspace, optionally filtered by name, creator, and created/updated date range.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Substring filter on project name (case-insensitive)."},"created_by":{"type":"string","description":"Filter by creator user ID, or \"me\"."},"sort":{"type":"string","enum":["name","created_at","updated_at"],"description":"Field to sort results by."},"direction":{"type":"string","enum":["asc","desc"]},"created_after":{"type":"string","description":"ISO 8601 lower bound on created_at."},"created_before":{"type":"string","description":"ISO 8601 upper bound on created_at."},"updated_after":{"type":"string","description":"ISO 8601 lower bound on updated_at."},"updated_before":{"type":"string","description":"ISO 8601 upper bound on updated_at."},"limit":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.get","description":"Fetch a single project by ID, including composition list and Drive folder.","parameters":{"type":"object","properties":{"project_id":{"type":"string"}},"required":["project_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobs.get","description":"Get the status of an Underlord/agent job. Returns state (queued|running|succeeded|failed) plus result payload on success.","parameters":{"type":"object","properties":{"job_id":{"type":"string"}},"required":["job_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"agent.edit","description":"Submit a natural-language Underlord edit job against an existing project, or create a new project first and edit it. Returns a job_id to poll via jobs.get.","parameters":{"type":"object","properties":{"mode":{"type":"string","enum":["existing","new"],"description":"Edit an existing project or create a brand-new one before editing."},"project_id":{"type":"string","description":"Required when mode = \"existing\"."},"project_name":{"type":"string","description":"Name for the new project when mode = \"new\"."},"team_access":{"type":"string","enum":["view","comment","edit"],"description":"Team access level for the newly created project (mode = \"new\" only)."},"folder_name":{"type":"string","description":"Drive folder path for the new project (mode = \"new\" only)."},"prompt":{"type":"string","description":"Natural-language instruction for Underlord (e.g. \"Remove filler words and silences\")."},"model":{"type":"string","description":"Optional Underlord model override. Blank uses the Descript default."},"callback_url":{"type":"string","format":"uri","description":"Optional webhook; Descript POSTs job status here on completion/failure."}},"required":["mode","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.import","description":"Import media (video/audio) into a project by URL. Descript fetches the URL server-side, transcribes in the given language, and optionally creates a composition on the timeline.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"media_name":{"type":"string","description":"Display name for the media file."},"media_url":{"type":"string","format":"uri","description":"Public URL of the media; must support HTTP Range and stay live ~12–48h."},"language":{"type":"string","description":"ISO 639-1 transcription language (e.g. \"en\", \"es\"). Defaults to workspace setting."},"composition_name":{"type":"string","description":"If set, create a composition (timeline) with this name from the imported media."},"composition_width":{"type":"integer","description":"Composition width in pixels. Defaults to 1920. Used only with composition_name."},"composition_height":{"type":"integer","description":"Composition height in pixels. Defaults to 1080. Used only with composition_name."}},"required":["project_id","media_name","media_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.delete","description":"Delete a Descript project by ID. Removes the project, its compositions, and any imported media.","parameters":{"type":"object","properties":{"project_id":{"type":"string"}},"required":["project_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"project.publish","description":"Export a project as video or audio and publish it as a Descript share page. Returns the share URL and export job_id.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"media_type":{"type":"string","enum":["video","audio"],"description":"Export format."},"resolution":{"type":"string","enum":["480p","720p","1080p","1440p","2160p"],"description":"Video resolution. Ignored when media_type = \"audio\"."},"access_level":{"type":"string","enum":["public","workspace","invite_only"],"description":"Who can view the share page. Blank inherits Drive default."}},"required":["project_id","media_type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"detecting-ai","displayName":"Detecting.AI","description":"Detect AI-generated content, check plagiarism, and humanize text.","auth":{"kind":"api-key","hint":"Detecting.AI API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"content.detect-ai","description":"Detect if content is AI-generated.","parameters":{"type":"object","properties":{"text":{"type":"string"},"version":{"type":"string"},"model":{"type":"string"}},"required":["text","version","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"plagiarism.check","description":"Check text for plagiarism.","parameters":{"type":"object","properties":{"text":{"type":"string"},"version":{"type":"string"},"model":{"type":"string"}},"required":["text","version","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"text.humanize","description":"Humanize AI-generated text.","parameters":{"type":"object","properties":{"text":{"type":"string"},"version":{"type":"string"},"model":{"type":"string"}},"required":["text","version","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"devin","displayName":"Devin","description":"Create Devin sessions, fetch session details, and post messages to a running session.","auth":{"kind":"api-key","hint":"Devin API key sent as Authorization: Bearer ."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.session","description":"Create a new Devin session with an initial prompt.","parameters":{"type":"object","properties":{"prompt":{"type":"string"},"snapshotId":{"type":"string"},"playbookId":{"type":"string"},"unlisted":{"type":"boolean"},"idempotent":{"type":"boolean"}},"required":["prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.session.details","description":"Retrieve details for an existing Devin session.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"}},"required":["sessionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"send.message","description":"Send a follow-up message to an active Devin session.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"},"message":{"type":"string"}},"required":["sessionId","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sessions.list","description":"List Devin sessions visible to the API key. Optional limit/status filters.","parameters":{"type":"object","properties":{"limit":{"type":"number","description":"Maximum number of sessions to return."},"status":{"type":"string","description":"Filter to sessions in the given status."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"attachments.upload","description":"Upload an attachment to an existing Devin session. `content` is the file body; set `encoding=\"base64\"` for binary payloads. `mime_type` defaults upstream when omitted.","parameters":{"type":"object","properties":{"session_id":{"type":"string","description":"Devin session id the attachment belongs to."},"content":{"type":"string","description":"File contents, interpreted per `encoding`."},"encoding":{"type":"string","enum":["utf-8","base64"],"default":"utf-8","description":"Encoding of `content`. Use base64 for binary payloads."},"filename":{"type":"string","description":"Filename including extension."},"mime_type":{"type":"string","description":"Optional MIME type for the upload."}},"required":["session_id","content","filename"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"dialpad","displayName":"Dialpad","description":"Read Dialpad contacts, calls, and users, create contacts, and send SMS through the v2 API.","auth":{"kind":"oauth2","authorizationUrl":"https://dialpad.com/oauth2/authorize","tokenUrl":"https://dialpad.com/oauth2/token","scopes":["calls:list","offline_access"],"clientIdEnv":"DIALPAD_OAUTH_CLIENT_ID","clientSecretEnv":"DIALPAD_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.list","description":"List contacts. Set include_local + owner_id to include a user's local contacts; paginate with cursor.","parameters":{"type":"object","properties":{"cursor":{"type":"string","description":"Pagination token from a previous response."},"include_local":{"type":"boolean","description":"Include company local contacts (default false)."},"owner_id":{"type":"string","description":"User id whose local contacts should be retrieved."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create a contact. first_name and last_name are required. Omit owner_id for a shared company contact.","parameters":{"type":"object","properties":{"first_name":{"type":"string","description":"Contact's first name."},"last_name":{"type":"string","description":"Contact's last name."},"company_name":{"type":"string","description":"Contact's company name."},"job_title":{"type":"string","description":"Contact's job title."},"emails":{"type":"array","description":"Email strings; primary first.","items":{"type":"string"}},"phones":{"type":"array","description":"E.164-formatted phone strings; primary first.","items":{"type":"string"}},"owner_id":{"type":"string","description":"User id to create a local contact for; omit for a shared company contact."}},"required":["first_name","last_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.list","description":"List calls. Filter by started_after/started_before (UTC ms) and target; paginate with cursor.","parameters":{"type":"object","properties":{"cursor":{"type":"string","description":"Pagination token from a previous response."},"started_after":{"type":"number","description":"UTC millisecond timestamp; calls started after this time."},"started_before":{"type":"number","description":"UTC millisecond timestamp; calls started before this time."},"target_id":{"type":"number","description":"Filter calls by target entity id."},"target_type":{"type":"string","description":"Target type: callcenter, callrouter, channel, coaching, team, department, office, user, etc."},"include_anonymized":{"type":"boolean","description":"Include anonymized call records (default false)."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.get","description":"Get a single call by id.","parameters":{"type":"object","properties":{"id":{"type":"number","description":"The call's unique identifier (int64)."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sms.send","description":"Send an SMS/MMS. to_numbers = up to 10 E.164 destinations, text = body. Provide one sender: user_id, from_number, or sender_group_id(+type).","parameters":{"type":"object","properties":{"to_numbers":{"type":"array","description":"Up to 10 E.164-formatted destination numbers.","items":{"type":"string"}},"text":{"type":"string","description":"Message body text."},"user_id":{"type":"number","description":"Sender's Dialpad user id."},"from_number":{"type":"string","description":"Sender's phone number; overrides user_id/sender_group_id."},"sender_group_id":{"type":"number","description":"Office, department, or call-center id to send from."},"sender_group_type":{"type":"string","enum":["callcenter","department","office"],"description":"Sender group type."},"media":{"type":"string","description":"Base64-encoded media attachment (max 500 KiB); triggers MMS."},"infer_country_code":{"type":"boolean","description":"Relax strict E.164 requirement (default false)."}},"required":["to_numbers","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.list","description":"List users. Filter by email/name/state; paginate with cursor.","parameters":{"type":"object","properties":{"cursor":{"type":"string","description":"Pagination token from a previous response."},"email":{"type":"string","description":"Filter by user's email address."},"first_name":{"type":"string","description":"Filter by first-name prefix."},"last_name":{"type":"string","description":"Filter by last-name prefix."},"state":{"type":"string","description":"Filter by state: active, all, cancelled, deleted, pending, suspended."},"company_admin":{"type":"boolean","description":"Return only company admins (true) or non-admins (false)."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"digital-ocean","displayName":"DigitalOcean","description":"Inspect and manage DigitalOcean projects, Droplets, volumes, databases, and App Platform apps.","auth":{"kind":"api-key","hint":"DigitalOcean personal access token with the minimum required scopes."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.get","description":"Read the current account and status.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.list","description":"List projects.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"perPage":{"type":"integer","minimum":1,"maximum":200}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.get","description":"Read one project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.create","description":"Create a project.","parameters":{"type":"object","properties":{"project":{"type":"object"}},"required":["project"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"projects.update","description":"Update a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"project":{"type":"object"}},"required":["projectId","project"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"projects.delete","description":"Delete a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"droplets.list","description":"List Droplets.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"perPage":{"type":"integer","minimum":1,"maximum":200},"tagName":{"type":"string"},"name":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"droplets.get","description":"Read one Droplet.","parameters":{"type":"object","properties":{"dropletId":{"type":"integer"}},"required":["dropletId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"droplets.create","description":"Create one or more Droplets.","parameters":{"type":"object","properties":{"droplet":{"type":"object"}},"required":["droplet"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"droplets.action","description":"Run a provider-native Droplet action such as power_on, shutdown, snapshot, resize, or rebuild.","parameters":{"type":"object","properties":{"dropletId":{"type":"integer"},"action":{"type":"object"}},"required":["dropletId","action"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"droplets.delete","description":"Delete a Droplet.","parameters":{"type":"object","properties":{"dropletId":{"type":"integer"}},"required":["dropletId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"volumes.list","description":"List block-storage volumes.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"perPage":{"type":"integer","minimum":1,"maximum":200},"region":{"type":"string"},"name":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"volumes.create","description":"Create a block-storage volume.","parameters":{"type":"object","properties":{"volume":{"type":"object"}},"required":["volume"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"volumes.delete","description":"Delete a block-storage volume.","parameters":{"type":"object","properties":{"volumeId":{"type":"string"}},"required":["volumeId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"databases.list","description":"List managed database clusters.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"perPage":{"type":"integer","minimum":1,"maximum":200},"tagName":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"databases.get","description":"Read a managed database cluster.","parameters":{"type":"object","properties":{"databaseId":{"type":"string"}},"required":["databaseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"databases.create","description":"Create a managed database cluster.","parameters":{"type":"object","properties":{"database":{"type":"object"}},"required":["database"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"databases.delete","description":"Delete a managed database cluster.","parameters":{"type":"object","properties":{"databaseId":{"type":"string"}},"required":["databaseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"apps.list","description":"List App Platform apps.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"perPage":{"type":"integer","minimum":1,"maximum":200}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"apps.get","description":"Read an App Platform app.","parameters":{"type":"object","properties":{"appId":{"type":"string"}},"required":["appId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"apps.create","description":"Create an App Platform app.","parameters":{"type":"object","properties":{"spec":{"type":"object"}},"required":["spec"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"apps.update","description":"Update an App Platform app specification.","parameters":{"type":"object","properties":{"appId":{"type":"string"},"spec":{"type":"object"}},"required":["appId","spec"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"apps.delete","description":"Delete an App Platform app.","parameters":{"type":"object","properties":{"appId":{"type":"string"}},"required":["appId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"digital-pilot","displayName":"DigitalPilot","description":"Manage target accounts and monitor high-intent visits in DigitalPilot.","auth":{"kind":"api-key","hint":"DigitalPilot API key and account domain."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"target-accounts.add","description":"Add a target account to track in DigitalPilot.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"The account ID to add"},"accountName":{"type":"string","description":"The account name"},"domain":{"type":"string","description":"Account domain"}},"required":["accountId","accountName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"target-accounts.remove","description":"Remove a target account from DigitalPilot.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"The account ID to remove"}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"visits.search","description":"Search high-intent visits from target accounts.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Filter by target account ID"},"intentLevel":{"type":"string","description":"Filter by intent level (high, medium, low)"},"limit":{"type":"integer","description":"Maximum number of results"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"visits.get","description":"Get details of a specific visit.","parameters":{"type":"object","properties":{"visitId":{"type":"string","description":"The visit ID"}},"required":["visitId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"discord","displayName":"Discord","description":"Read Discord guilds, channels, members, and messages, and post or edit messages on behalf of a connected user.","auth":{"kind":"oauth2","authorizationUrl":"https://discord.com/oauth2/authorize","tokenUrl":"https://discord.com/api/oauth2/token","scopes":["identify","email","guilds","guilds.members.read","messages.read","webhook.incoming"],"clientIdEnv":"DISCORD_OAUTH_CLIENT_ID","clientSecretEnv":"DISCORD_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"advisory","capabilities":[{"name":"users.me","description":"Return the connected Discord user (id, username, email if granted, avatar).","parameters":{"type":"object","properties":{}},"requiredScopes":["identify"],"class":"read"},{"name":"guilds.list","description":"List guilds (servers) the connected user is a member of. Pagination via `before`, `after`, `limit` (max 200).","parameters":{"type":"object","properties":{"before":{"type":"string","description":"Snowflake id; return guilds before this id."},"after":{"type":"string","description":"Snowflake id; return guilds after this id."},"limit":{"type":"integer","minimum":1,"maximum":200,"default":200}}},"requiredScopes":["guilds"],"class":"read"},{"name":"guilds.get","description":"Read a single guild by id.","parameters":{"type":"object","properties":{"guildId":{"type":"string"}},"required":["guildId"]},"requiredScopes":["guilds"],"class":"read"},{"name":"guilds.channels.list","description":"List channels in a guild.","parameters":{"type":"object","properties":{"guildId":{"type":"string"}},"required":["guildId"]},"requiredScopes":["guilds"],"class":"read"},{"name":"guilds.members.list","description":"List guild members. Requires `guilds.members.read` scope.","parameters":{"type":"object","properties":{"guildId":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":1000,"default":100},"after":{"type":"string","description":"Snowflake id; pagination cursor."}},"required":["guildId"]},"requiredScopes":["guilds.members.read"],"class":"read"},{"name":"guilds.members.get","description":"Read a single member of a guild by user id.","parameters":{"type":"object","properties":{"guildId":{"type":"string"},"userId":{"type":"string"}},"required":["guildId","userId"]},"requiredScopes":["guilds.members.read"],"class":"read"},{"name":"channels.get","description":"Read a channel by id.","parameters":{"type":"object","properties":{"channelId":{"type":"string"}},"required":["channelId"]},"requiredScopes":["guilds"],"class":"read"},{"name":"channels.messages.list","description":"List messages in a channel. Pagination uses snowflake cursors `before`, `after`, `around`; `limit` max 100.","parameters":{"type":"object","properties":{"channelId":{"type":"string"},"before":{"type":"string"},"after":{"type":"string"},"around":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"required":["channelId"]},"requiredScopes":["messages.read"],"class":"read"},{"name":"channels.messages.get","description":"Read a single message from a channel by id.","parameters":{"type":"object","properties":{"channelId":{"type":"string"},"messageId":{"type":"string"}},"required":["channelId","messageId"]},"requiredScopes":["messages.read"],"class":"read"},{"name":"channels.messages.create","description":"Post a message to a channel. Provide `content` or `embeds`. Append-only — no CAS — the caller owns dedupe via idempotencyKey.","parameters":{"type":"object","properties":{"channelId":{"type":"string"},"content":{"type":"string"},"tts":{"type":"boolean"},"embeds":{"type":"array","items":{"type":"object"},"description":"Discord embed objects."},"allowed_mentions":{"type":"object"},"message_reference":{"type":"object","description":"Reply target: { message_id, channel_id?, guild_id?, fail_if_not_exists? }."},"components":{"type":"array","items":{"type":"object"},"description":"Message components (action rows / buttons)."},"flags":{"type":"integer","description":"Bitfield of message flags."}},"required":["channelId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"channels.messages.update","description":"Edit a previously posted message. Only the message author can edit.","parameters":{"type":"object","properties":{"channelId":{"type":"string"},"messageId":{"type":"string"},"content":{"type":"string"},"embeds":{"type":"array","items":{"type":"object"}},"allowed_mentions":{"type":"object"},"components":{"type":"array","items":{"type":"object"}},"flags":{"type":"integer"}},"required":["channelId","messageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"channels.messages.delete","description":"Delete a message. Idempotent on the message id.","parameters":{"type":"object","properties":{"channelId":{"type":"string"},"messageId":{"type":"string"}},"required":["channelId","messageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"channels.messages.reactions.create","description":"Add a reaction to a message. `emoji` is URL-encoded by the request engine; unicode emoji or `name:id` for custom.","parameters":{"type":"object","properties":{"channelId":{"type":"string"},"messageId":{"type":"string"},"emoji":{"type":"string","description":"Unicode emoji or `name:id` for a custom guild emoji."}},"required":["channelId","messageId","emoji"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"channels.threads.create","description":"Create a thread in a channel without an anchor message.","parameters":{"type":"object","properties":{"channelId":{"type":"string"},"name":{"type":"string"},"type":{"type":"integer","description":"Channel type: 11 = public thread, 12 = private thread, 10 = announcement thread."},"auto_archive_duration":{"type":"integer","enum":[60,1440,4320,10080],"description":"Minutes of inactivity before auto-archive."},"invitable":{"type":"boolean"},"rate_limit_per_user":{"type":"integer","minimum":0,"maximum":21600}},"required":["channelId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"discourse","displayName":"Discourse","description":"Manage Discourse categories, topics, posts, groups, notifications, search, and moderation.","auth":{"kind":"api-key","hint":"JSON containing apiKey and apiUsername. Use a dedicated, narrowly scoped Discourse API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"categories.list","description":"List visible categories and optional subcategories.","parameters":{"type":"object","properties":{"includeSubcategories":{"type":"boolean"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"categories.create","description":"Create a category with provider-native settings and permissions.","parameters":{"type":"object","properties":{"category":{"type":"object","description":"Category definition containing at least name."}},"required":["category"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"categories.update","description":"Update a category.","parameters":{"type":"object","properties":{"categoryId":{"type":"integer"},"category":{"type":"object","description":"Provider-native category patch."}},"required":["categoryId","category"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"topics.latest","description":"List latest topics.","parameters":{"type":"object","properties":{"order":{"type":"string","enum":["default","created","activity","views","posts","category","likes","op_likes","posters"]},"ascending":{"type":"boolean"},"perPage":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"topics.get","description":"Read a topic and its post stream.","parameters":{"type":"object","properties":{"topicId":{"type":"integer","description":"Discourse topic id."}},"required":["topicId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"topics.create","description":"Create a topic.","parameters":{"type":"object","properties":{"title":{"type":"string"},"raw":{"type":"string","description":"Raw Markdown post body."},"categoryId":{"type":"integer"},"externalId":{"type":"string"},"embedUrl":{"type":"string","format":"uri"},"autoTrack":{"type":"boolean"}},"required":["title","raw"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"topics.update","description":"Update a topic title or category.","parameters":{"type":"object","properties":{"topicId":{"type":"integer","description":"Discourse topic id."},"title":{"type":"string"},"categoryId":{"type":"integer"}},"required":["topicId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"topics.set-status","description":"Close, pin, archive, or hide a topic, or reverse that status.","parameters":{"type":"object","properties":{"topicId":{"type":"integer","description":"Discourse topic id."},"status":{"type":"string","enum":["closed","pinned","pinned_globally","archived","visible"]},"enabled":{"type":"boolean"},"until":{"type":"string","description":"Required by Discourse for temporary pinning."}},"required":["topicId","status","enabled"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"topics.delete","description":"Delete a topic.","parameters":{"type":"object","properties":{"topicId":{"type":"integer","description":"Discourse topic id."}},"required":["topicId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"posts.get","description":"Read one post.","parameters":{"type":"object","properties":{"postId":{"type":"integer","description":"Discourse post id."}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"posts.create","description":"Reply to a topic.","parameters":{"type":"object","properties":{"topicId":{"type":"integer","description":"Discourse topic id."},"raw":{"type":"string","description":"Raw Markdown post body."},"replyToPostNumber":{"type":"integer"}},"required":["topicId","raw"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"posts.update","description":"Edit a post with an optional reason.","parameters":{"type":"object","properties":{"postId":{"type":"integer","description":"Discourse post id."},"raw":{"type":"string"},"editReason":{"type":"string"},"bypassBump":{"type":"boolean"}},"required":["postId","raw"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"posts.delete","description":"Delete a post.","parameters":{"type":"object","properties":{"postId":{"type":"integer","description":"Discourse post id."}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"search.query","description":"Search topics, posts, users, and categories using Discourse search syntax.","parameters":{"type":"object","properties":{"query":{"type":"string"},"page":{"type":"integer","minimum":1}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tags.list","description":"List tags.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.get","description":"Read a public user profile.","parameters":{"type":"object","properties":{"username":{"type":"string"}},"required":["username"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.list","description":"List groups.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.get","description":"Read a group by name.","parameters":{"type":"object","properties":{"groupName":{"type":"string"}},"required":["groupName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.members.list","description":"List members of a group.","parameters":{"type":"object","properties":{"groupName":{"type":"string"}},"required":["groupName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.members.add","description":"Add comma-separated usernames to a group.","parameters":{"type":"object","properties":{"groupId":{"type":"integer"},"usernames":{"type":"string"}},"required":["groupId","usernames"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"groups.members.remove","description":"Remove comma-separated usernames from a group.","parameters":{"type":"object","properties":{"groupId":{"type":"integer"},"usernames":{"type":"string"}},"required":["groupId","usernames"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"notifications.list","description":"List notifications for the API username.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1},"recent":{"type":"boolean"},"unread":{"type":"boolean"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"notifications.mark-read","description":"Mark one notification, or all notifications, as read.","parameters":{"type":"object","properties":{"notificationId":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"moderation.users.suspend","description":"Suspend a user until a date with an auditable reason.","parameters":{"type":"object","properties":{"userId":{"type":"integer"},"suspendUntil":{"type":"string","format":"date"},"reason":{"type":"string"},"message":{"type":"string"},"postAction":{"type":"string"}},"required":["userId","suspendUntil","reason"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"dittofeed","displayName":"Dittofeed","description":"Send identify, track, and screen events to a self-hosted or cloud Dittofeed instance for customer messaging segmentation.","auth":{"kind":"api-key","hint":"Dittofeed workspace API key for the public apps API."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.identify","description":"Identify a Dittofeed user, attaching traits to the user profile.","parameters":{"type":"object","properties":{"userId":{"type":"string"},"traits":{"type":"object"},"messageId":{"type":"string"},"timestamp":{"type":"string"},"context":{"type":"object"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.track","description":"Track a named event for a Dittofeed user with optional properties.","parameters":{"type":"object","properties":{"userId":{"type":"string"},"event":{"type":"string"},"properties":{"type":"object"},"messageId":{"type":"string"},"timestamp":{"type":"string"},"context":{"type":"object"}},"required":["userId","event"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"screens.record","description":"Record a screen view for a Dittofeed user with optional screen properties.","parameters":{"type":"object","properties":{"userId":{"type":"string"},"name":{"type":"string"},"properties":{"type":"object"},"messageId":{"type":"string"},"timestamp":{"type":"string"},"context":{"type":"object"}},"required":["userId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.create","description":"Add or update a subscriber by identifying the user and persisting subscriber traits (email, phone, subscription groups).","parameters":{"type":"object","properties":{"userId":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"traits":{"type":"object"},"subscriptionGroupId":{"type":"string"},"messageId":{"type":"string"},"timestamp":{"type":"string"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.delete","description":"Delete a subscriber by emitting a Subscription Cancelled event (Dittofeed has no public hard-delete; this is the documented removal path).","parameters":{"type":"object","properties":{"userId":{"type":"string"},"subscriptionGroupId":{"type":"string"}},"required":["userId","subscriptionGroupId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"broadcast.send","description":"Trigger a Dittofeed broadcast by id. The broadcast must already be defined in the workspace; this dispatches it to the configured audience.","parameters":{"type":"object","properties":{"broadcastId":{"type":"string"},"workspaceId":{"type":"string"}},"required":["broadcastId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"journey.trigger","description":"Trigger a Dittofeed journey for a specific user. The journey id must reference a published journey in the workspace.","parameters":{"type":"object","properties":{"journeyId":{"type":"string"},"userId":{"type":"string"},"workspaceId":{"type":"string"},"context":{"type":"object"}},"required":["journeyId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"docsbot","displayName":"DocsBot","description":"Build AI-powered chatbots that pull answers from your documentation and dynamically update training sources.","auth":{"kind":"api-key","hint":"DocsBot API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"bots.find","description":"Find or list bots in your account.","parameters":{"type":"object","properties":{"botId":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bots.create","description":"Create a new DocsBot.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"language":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sources.create","description":"Create a new training source for a bot.","parameters":{"type":"object","properties":{"botId":{"type":"string"},"type":{"type":"string"},"name":{"type":"string"},"content":{"type":"string"}},"required":["botId","type","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sources.upload","description":"Upload a file as a training source for a bot.","parameters":{"type":"object","properties":{"botId":{"type":"string"},"fileName":{"type":"string"},"fileContent":{"type":"string"}},"required":["botId","fileName","fileContent"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sources.delete","description":"Delete a training source from a bot.","parameters":{"type":"object","properties":{"botId":{"type":"string"},"sourceId":{"type":"string"}},"required":["botId","sourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.ask","description":"Ask a question to a DocsBot.","parameters":{"type":"object","properties":{"botId":{"type":"string"},"question":{"type":"string"},"conversationId":{"type":"string"}},"required":["botId","question"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"doctly","displayName":"Doctly AI","description":"Convert PDFs to markdown via the Doctly document-parse API.","auth":{"kind":"api-key","hint":"Doctly API key (Bearer token)."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"convert.pdf.to.text","description":"Upload a PDF document for markdown conversion. Returns a document handle with `id` and initial `status`; poll documents.get until status is COMPLETED, then fetch output_file_url.","parameters":{"type":"object","properties":{"file":{"type":"string","description":"PDF payload as a base64-encoded string (no data: URL prefix). The Doctly API treats this as the document body."},"filename":{"type":"string","description":"Original filename of the uploaded PDF (used for downstream document naming)."}},"required":["file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.get","description":"Fetch the current state of a Doctly document by id. Use this to poll the upload until status is COMPLETED or FAILED; the COMPLETED payload includes `output_file_url`.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"Document id returned by convert.pdf.to.text."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.delete","description":"Delete a processed document from Doctly. Removes the original upload, the parsed markdown output, and any associated job state.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"Document id returned by convert.pdf.to.text."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"jobs.cancel","description":"Cancel an in-flight Doctly processing job. Doctly tracks one parse job per document; cancelling deletes the document handle and stops any pending OCR/markdown work.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"Document id whose parse job should be cancelled."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"documentpro","displayName":"DocumentPro","description":"Run a DocumentPro extract Workflow against a previously uploaded document and receive the structured fields parsed by the AI pipeline.","auth":{"kind":"api-key","hint":"DocumentPro API key (workspace settings -> API). Sent as the x-api-key header on every request."},"category":"doc","defaultConsistencyModel":"advisory","capabilities":[{"name":"run.extract","description":"Run an extract / Workflow against a previously uploaded document and return the structured fields produced by the configured template. Optional flags toggle OCR, layout / table detection, page selection, and regex-based segmentation.","parameters":{"type":"object","properties":{"document_id":{"type":"string","description":"ID returned by the upload endpoint (POST /v1/documents). Identifies the file to parse."},"template_id":{"type":"string","description":"ID of the Workflow / template to run. Templates are created in the DocumentPro UI and define the fields to extract."},"use_ocr":{"type":"boolean","description":"Enable the OCR pipeline. Required when using gpt-3.5-turbo or any OCR-dependent flag (layout, tables, regex segmentation)."},"query_model":{"type":"string","description":"AI model used for parsing (e.g. \"gpt-4o\", \"gpt-3.5-turbo\"). Defaults to the template setting if omitted."},"detect_layout":{"type":"boolean","description":"Detect document layout (columns, headers, blocks). Requires use_ocr=true."},"detect_tables":{"type":"boolean","description":"Detect tables and emit them as structured rows. Requires use_ocr=true."},"page_ranges":{"type":"string","description":"Which pages to parse, e.g. \"1-3,5,7-9\". Empty / omitted = all pages."},"chunk_by_pages":{"type":"integer","description":"Pages per segment for method-1 segmentation. Pass 0 / omit to disable."},"rolling_window":{"type":"integer","description":"Window size in pages for method-2 segmentation. Pass 0 / omit to disable."},"start_regex":{"type":"string","description":"Regex marking where parsing should begin within the document text. Requires use_ocr=true."},"end_regex":{"type":"string","description":"Regex marking where parsing should stop. Requires use_ocr=true."},"split_regex":{"type":"string","description":"Regex used to split the document into sections before extraction. Requires use_ocr=true."},"use_all_matches":{"type":"boolean","description":"When true, every regex match yields a section; when false, only the first match is used. Requires use_ocr=true."}},"required":["document_id","template_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"documents.delete","description":"Delete a previously uploaded DocumentPro document and its associated extraction history. Cannot be undone.","parameters":{"type":"object","properties":{"document_id":{"type":"string","description":"ID of the document to remove (returned by the upload endpoint)."}},"required":["document_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"extraction.export","description":"Export the structured extraction for a document in the requested format (json, csv, xlsx). The response is the serialized export payload.","parameters":{"type":"object","properties":{"document_id":{"type":"string","description":"ID of the document whose extraction should be exported."},"template_id":{"type":"string","description":"Template / Workflow whose extraction is being exported. Required when a document has multiple templates run against it."},"format":{"type":"string","enum":["json","csv","xlsx"],"description":"Export format. Defaults to json on the upstream when omitted."}},"required":["document_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"documerge","displayName":"DocuMerge","description":"Merge and generate documents with dynamic data via DocuMerge: combine files, convert files to PDF, split PDFs, and run document/data-route merges.","auth":{"kind":"api-key","hint":"DocuMerge API key issued from the workspace settings."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"files.combine","description":"Combine multiple files (by file identifier, URL, or inline contents) into a single output file in the requested format.","parameters":{"type":"object","properties":{"output":{"type":"string","description":"Output format for the combined file (e.g. \"pdf\", \"docx\")."},"files":{"type":"array","description":"Array of file identifiers to combine.","items":{"type":"string"}},"name":{"type":"string","description":"Name for the combined output file."},"url":{"type":"string","format":"uri","description":"URL of an additional file to include in the merge."},"contents":{"type":"string","description":"Additional inline content to include alongside the listed files."}},"required":["output","files"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.convertToPdf","description":"Convert a single file (by file identifier or remote URL) into a PDF.","parameters":{"type":"object","properties":{"fileName":{"type":"string","description":"Name of the file to convert."},"fileUrl":{"type":"string","format":"uri","description":"URL of the source file to convert (if the file is not already uploaded)."}},"required":["fileName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"dataRouteMerge.create","description":"Run a data-route merge using a configured route key and a field-data payload.","parameters":{"type":"object","properties":{"routeKey":{"type":"string","description":"Key of the data route to merge against."},"fields":{"type":"object","description":"Field data to merge into the route template."}},"required":["routeKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documentMerge.create","description":"Run a document merge using a configured document key and a field-data payload.","parameters":{"type":"object","properties":{"documentKey":{"type":"string","description":"Key of the document template to merge."},"fields":{"type":"object","description":"Field data to merge into the document template."}},"required":["documentKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pdf.split","description":"Split a PDF by extracting and/or removing specified page numbers or ranges; returns the resulting PDF(s).","parameters":{"type":"object","properties":{"fileName":{"type":"string","description":"Name of the source PDF file."},"fileUrl":{"type":"string","format":"uri","description":"URL of the source PDF if not already uploaded."},"extract":{"type":"array","description":"Page numbers or ranges to extract (e.g. [\"1\", \"3-5\"]).","items":{"type":"string"}},"remove":{"type":"array","description":"Page numbers or ranges to remove (e.g. [\"2\", \"6-7\"]).","items":{"type":"string"}}},"required":["fileName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"docuseal","displayName":"DocuSeal","description":"Send documents for e-signature via DocuSeal, poll submission status, void in-flight submissions, and react to push events when submitters sign.","auth":{"kind":"api-key","hint":"Paste a DocuSeal personal API key (settings → API). Optional webhook secret enables push-driven workflows."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"get_submission","class":"read","description":"Fetch the current status of a DocuSeal submission and each submitter.","parameters":{"type":"object","properties":{"submissionId":{"type":"string"}},"required":["submissionId"]}},{"name":"create_submission","class":"mutation","description":"Send a template for signature to one or more submitters. external_id is the idempotency key; retries return the original submission.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"templateId":{"type":"string"},"submitters":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"values":{"type":"object","additionalProperties":true}},"required":["email"]}},"sendEmail":{"type":"boolean","default":true},"message":{"type":"string"}},"required":["templateId","submitters"]}},{"name":"void_submission","class":"mutation","description":"Cancel an in-flight submission. CAS via updated_at — concurrent voids return ResourceContention.","cas":"etag-if-match","externalEffect":true,"parameters":{"type":"object","properties":{"submissionId":{"type":"string"},"reason":{"type":"string"}},"required":["submissionId"]}}]},{"kind":"docusign","displayName":"DocuSign","description":"Create, send, and manage DocuSign envelopes; list templates and inspect recipient signing status.","auth":{"kind":"oauth2","authorizationUrl":"https://account.docusign.com/oauth/auth","tokenUrl":"https://account.docusign.com/oauth/token","scopes":["signature","extended"],"clientIdEnv":"DOCUSIGN_OAUTH_CLIENT_ID","clientSecretEnv":"DOCUSIGN_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"envelopes.list","description":"List envelopes for an account, optionally filtered by status, date range, or folder.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"from_date":{"type":"string","description":"ISO-8601 date; only envelopes changed at or after this time are returned."},"to_date":{"type":"string","description":"ISO-8601 upper bound on envelope last-change time."},"status":{"type":"string","description":"Comma-separated list of envelope statuses, e.g. sent,delivered,completed."},"folder_ids":{"type":"string","description":"Comma-separated folder ids to restrict the search."},"search_text":{"type":"string"},"count":{"type":"integer","minimum":1,"maximum":100},"start_position":{"type":"integer","minimum":0}},"required":["accountId","from_date"]},"requiredScopes":["signature"],"class":"read"},{"name":"envelopes.get","description":"Read a single envelope by id. Pass include=recipients,tabs,documents to expand the response.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"envelopeId":{"type":"string"},"include":{"type":"string","description":"Comma-separated expansion list: recipients, tabs, documents, custom_fields."},"advanced_update":{"type":"boolean"}},"required":["accountId","envelopeId"]},"requiredScopes":["signature"],"class":"read"},{"name":"envelopes.create","description":"Create and optionally send an envelope. Set status=\"sent\" to dispatch immediately; status=\"created\" leaves it as a draft.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"emailSubject":{"type":"string"},"emailBlurb":{"type":"string"},"status":{"type":"string","enum":["created","sent"]},"documents":{"type":"array","items":{"type":"object"},"description":"Document descriptors: name, documentId, fileExtension, documentBase64."},"recipients":{"type":"object","description":"Recipients envelope, e.g. { signers: [...], carbonCopies: [...] }."},"templateId":{"type":"string"},"templateRoles":{"type":"array","items":{"type":"object"}},"customFields":{"type":"object"},"eventNotification":{"type":"object"},"brandId":{"type":"string"}},"required":["accountId","emailSubject"]},"requiredScopes":["signature"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"envelopes.update","description":"Update an existing envelope: change status (e.g. created → sent to dispatch a draft), patch metadata, or void it via status=\"voided\" with a voidedReason.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"envelopeId":{"type":"string"},"status":{"type":"string","enum":["sent","voided","created","correct"]},"voidedReason":{"type":"string"},"emailSubject":{"type":"string"},"emailBlurb":{"type":"string"},"purgeState":{"type":"string","enum":["unpurged","documents_queued","documents_and_metadata_queued"]},"advanced_update":{"type":"boolean"}},"required":["accountId","envelopeId"]},"requiredScopes":["signature"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"envelopes.recipients.list","description":"List recipients of an envelope, including signing status, routing order, and tabs when expanded.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"envelopeId":{"type":"string"},"include_tabs":{"type":"boolean"},"include_extended":{"type":"boolean"},"include_metadata":{"type":"boolean"}},"required":["accountId","envelopeId"]},"requiredScopes":["signature"],"class":"read"},{"name":"envelopes.recipients.update","description":"Modify or add recipients on an in-flight envelope. resend_envelope=true triggers a fresh signing notice.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"envelopeId":{"type":"string"},"resend_envelope":{"type":"boolean"},"signers":{"type":"array","items":{"type":"object"}},"carbonCopies":{"type":"array","items":{"type":"object"}},"certifiedDeliveries":{"type":"array","items":{"type":"object"}}},"required":["accountId","envelopeId"]},"requiredScopes":["signature"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"envelopes.documents.list","description":"List documents attached to an envelope.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"envelopeId":{"type":"string"},"include_metadata":{"type":"boolean"},"include_tabs":{"type":"boolean"},"documents_by_userid":{"type":"boolean"}},"required":["accountId","envelopeId"]},"requiredScopes":["signature"],"class":"read"},{"name":"templates.list","description":"List account-level templates, optionally filtered by folder, shared status, or search text.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"folder_ids":{"type":"string"},"search_text":{"type":"string"},"shared":{"type":"string","enum":["shared_with_me","all"]},"order_by":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]},"count":{"type":"integer","minimum":1,"maximum":100},"start_position":{"type":"integer","minimum":0}},"required":["accountId"]},"requiredScopes":["signature"],"class":"read"},{"name":"templates.get","description":"Read a single template definition by id.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"templateId":{"type":"string"},"include":{"type":"string"}},"required":["accountId","templateId"]},"requiredScopes":["signature"],"class":"read"},{"name":"envelope.send","description":"Send a previously-drafted DocuSign envelope by transitioning its status from \"created\" to \"sent\". Idempotent: sending an already-sent envelope is a no-op.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"envelopeId":{"type":"string"}},"required":["accountId","envelopeId"]},"requiredScopes":["signature"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"envelope.void","description":"Void an in-progress DocuSign envelope. Requires a voidedReason string that is recorded on the envelope and shown to signers.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"envelopeId":{"type":"string"},"voidedReason":{"type":"string"}},"required":["accountId","envelopeId","voidedReason"]},"requiredScopes":["signature"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"recipient.resendInvitation","description":"Resend the signing invitation email to one or more recipients of an in-flight envelope. Pass the recipient descriptors that should be re-notified; resend_envelope=true is forced on.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"envelopeId":{"type":"string"},"signers":{"type":"array","items":{"type":"object"}},"carbonCopies":{"type":"array","items":{"type":"object"}},"certifiedDeliveries":{"type":"array","items":{"type":"object"}}},"required":["accountId","envelopeId"]},"requiredScopes":["signature"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"envelopes.views.recipient","description":"Create an embedded-signing recipient view URL. The returned `url` is a one-time link the caller redirects the signer into.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"envelopeId":{"type":"string"},"returnUrl":{"type":"string"},"authenticationMethod":{"type":"string"},"clientUserId":{"type":"string"},"email":{"type":"string"},"userName":{"type":"string"},"frameAncestors":{"type":"array","items":{"type":"string"}},"messageOrigins":{"type":"array","items":{"type":"string"}}},"required":["accountId","envelopeId","returnUrl","authenticationMethod","clientUserId","email","userName"]},"requiredScopes":["signature"],"class":"mutation","cas":"native-idempotency","externalEffect":false}]},{"kind":"drip","displayName":"Drip","description":"Manage subscribers, campaigns, and tags in the Drip e-commerce CRM.","auth":{"kind":"api-key","hint":"Drip API token from account settings. The connection must also store the account_id."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"subscribers.add_to_campaign","description":"Add a subscriber to a Drip campaign.","parameters":{"type":"object","properties":{"account_id":{"type":"string","description":"Drip account ID"},"email":{"type":"string","description":"Subscriber email address"},"campaign_id":{"type":"string","description":"Campaign ID to add to"},"first_name":{"type":"string","description":"Subscriber first name"},"last_name":{"type":"string","description":"Subscriber last name"},"phone":{"type":"string","description":"Subscriber phone number"},"address":{"type":"string","description":"Subscriber address"},"city":{"type":"string","description":"Subscriber city"},"state":{"type":"string","description":"Subscriber state"},"zip":{"type":"string","description":"Subscriber zip code"},"country":{"type":"string","description":"Subscriber country"}},"required":["account_id","email","campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.apply_tag","description":"Apply a tag to a Drip subscriber.","parameters":{"type":"object","properties":{"account_id":{"type":"string","description":"Drip account ID"},"email":{"type":"string","description":"Subscriber email address"},"tag":{"type":"string","description":"Tag to apply"}},"required":["account_id","email","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.upsert","description":"Create or update a Drip subscriber.","parameters":{"type":"object","properties":{"account_id":{"type":"string","description":"Drip account ID"},"email":{"type":"string","description":"Subscriber email address"},"first_name":{"type":"string","description":"Subscriber first name"},"last_name":{"type":"string","description":"Subscriber last name"},"phone":{"type":"string","description":"Subscriber phone number"},"address":{"type":"string","description":"Subscriber address"},"city":{"type":"string","description":"Subscriber city"},"state":{"type":"string","description":"Subscriber state"},"zip":{"type":"string","description":"Subscriber zip code"},"country":{"type":"string","description":"Subscriber country"}},"required":["account_id","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"subscribers.delete","description":"Delete a Drip subscriber by id or email.","parameters":{"type":"object","properties":{"account_id":{"type":"string","description":"Drip account ID"},"id_or_email":{"type":"string","description":"Subscriber id or URL-encoded email to delete."}},"required":["account_id","id_or_email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.record","description":"Record a custom event for a Drip subscriber.","parameters":{"type":"object","properties":{"account_id":{"type":"string","description":"Drip account ID"},"email":{"type":"string","description":"Subscriber email the event belongs to."},"action":{"type":"string","description":"Event action name, e.g. \"Purchased a product\"."},"properties":{"type":"object","description":"Free-form key/value properties to attach to the event."},"occurred_at":{"type":"string","description":"ISO-8601 timestamp the event occurred at."}},"required":["account_id","email","action"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"dropbox","displayName":"Dropbox","description":"Read, organize, search, and share files in a Dropbox account. Standard OAuth2 with refresh tokens against the Dropbox v2 RPC API at api.dropboxapi.com.","auth":{"kind":"oauth2","authorizationUrl":"https://www.dropbox.com/oauth2/authorize","tokenUrl":"https://api.dropboxapi.com/oauth2/token","scopes":["account_info.read","files.metadata.read","files.metadata.write","sharing.read","sharing.write"],"clientIdEnv":"DROPBOX_OAUTH_CLIENT_ID","clientSecretEnv":"DROPBOX_OAUTH_CLIENT_SECRET","extraAuthParams":{"token_access_type":"offline"}},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.get_current_account","description":"Read the currently authenticated Dropbox account (used for connection self-test). Returns account_id, email, name, country, and team membership when applicable.","parameters":{"type":"object","properties":{}},"requiredScopes":["account_info.read"],"class":"read"},{"name":"users.get_space_usage","description":"Read the account-level storage quota and current usage (in bytes). Useful for surfacing capacity warnings before upload mutations.","parameters":{"type":"object","properties":{}},"requiredScopes":["account_info.read"],"class":"read"},{"name":"files.list_folder","description":"List the children of a folder. Use path \"\" (empty string) for the account root; otherwise pass a path beginning with \"/\", e.g. \"/Reports/2026\". Returns a `cursor` for incremental pagination via files.list_folder_continue.","parameters":{"type":"object","properties":{"path":{"type":"string","description":"Path to the folder. Use \"\" (empty string) for the root, otherwise leading slash, e.g. \"/Reports\"."},"recursive":{"type":"boolean","default":false,"description":"Recurse into subfolders. Defaults to false (one level only)."},"include_media_info":{"type":"boolean","default":false},"include_deleted":{"type":"boolean","default":false},"include_has_explicit_shared_members":{"type":"boolean","default":false},"include_mounted_folders":{"type":"boolean","default":true},"limit":{"type":"integer","minimum":1,"maximum":2000,"description":"Page size; Dropbox caps at 2000."}},"required":["path"]},"requiredScopes":["files.metadata.read"],"class":"read"},{"name":"files.list_folder_continue","description":"Continue a previous files.list_folder enumeration by feeding back the `cursor` returned in the prior page. Pages until `has_more` is false.","parameters":{"type":"object","properties":{"cursor":{"type":"string","description":"Cursor returned from list_folder or a prior list_folder_continue."}},"required":["cursor"]},"requiredScopes":["files.metadata.read"],"class":"read"},{"name":"files.get_metadata","description":"Read metadata for a single file, folder, or deleted entry. Returns the `.tag` discriminator (\"file\" | \"folder\" | \"deleted\") on the entry.","parameters":{"type":"object","properties":{"path":{"type":"string","description":"Path or id of the entry. Paths begin with \"/\"; ids look like \"id:abc123\"."},"include_media_info":{"type":"boolean","default":false},"include_deleted":{"type":"boolean","default":false},"include_has_explicit_shared_members":{"type":"boolean","default":false}},"required":["path"]},"requiredScopes":["files.metadata.read"],"class":"read"},{"name":"files.search","description":"Indexed search across the account. `query` is the free-text search string; `options` narrows by path scope, file type, and ordering. Use the returned `cursor` with files.search_continue (not exposed here) for paging.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search string."},"options":{"type":"object","description":"Optional SearchOptions; e.g. { \"path\": \"/Reports\", \"max_results\": 50, \"file_status\": \"active\", \"filename_only\": false }.","properties":{"path":{"type":"string"},"max_results":{"type":"integer","minimum":1,"maximum":1000},"order_by":{"type":"string","enum":["relevance","last_modified_time"]},"file_status":{"type":"string","enum":["active","deleted"]},"filename_only":{"type":"boolean"},"file_extensions":{"type":"array","items":{"type":"string"}},"file_categories":{"type":"array","items":{"type":"string","enum":["image","document","pdf","spreadsheet","presentation","audio","video","folder","paper","others"]}}}},"match_field_options":{"type":"object","properties":{"include_highlights":{"type":"boolean"}}}},"required":["query"]},"requiredScopes":["files.metadata.read"],"class":"read"},{"name":"files.create_folder_v2","description":"Create a folder at the given path. Set `autorename` to true to let Dropbox suffix a counter on collision; otherwise Dropbox returns a `path/conflict/folder` error which the declarative layer surfaces as { status: \"conflict\" }.","parameters":{"type":"object","properties":{"path":{"type":"string","description":"Destination path, e.g. \"/Reports/2026\". Must begin with \"/\"."},"autorename":{"type":"boolean","default":false}},"required":["path"]},"requiredScopes":["files.metadata.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.move_v2","description":"Move or rename a file or folder. Set `allow_shared_folder` and `allow_ownership_transfer` for cross-shared-folder moves. Dropbox returns `to/conflict/...` on a destination collision.","parameters":{"type":"object","properties":{"from_path":{"type":"string","description":"Current path or id."},"to_path":{"type":"string","description":"New path. Must begin with \"/\"."},"allow_shared_folder":{"type":"boolean","default":false},"autorename":{"type":"boolean","default":false},"allow_ownership_transfer":{"type":"boolean","default":false}},"required":["from_path","to_path"]},"requiredScopes":["files.metadata.write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"files.copy_v2","description":"Server-side copy a file or folder to a destination path. Dropbox dedupes on (to_path) and returns `to/conflict/...` on collision.","parameters":{"type":"object","properties":{"from_path":{"type":"string"},"to_path":{"type":"string"},"allow_shared_folder":{"type":"boolean","default":false},"autorename":{"type":"boolean","default":false},"allow_ownership_transfer":{"type":"boolean","default":false}},"required":["from_path","to_path"]},"requiredScopes":["files.metadata.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.delete_v2","description":"Move a file or folder to the deleted state. Dropbox retains deleted items for 30 days on standard plans; pass `parent_rev` to make the delete conditional on a specific revision.","parameters":{"type":"object","properties":{"path":{"type":"string"},"parent_rev":{"type":"string","description":"Optional rev (from get_metadata) to make the delete conditional."}},"required":["path"]},"requiredScopes":["files.metadata.write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"sharing.create_shared_link_with_settings","description":"Mint a public shared link with optional access controls (audience, requested_visibility, expires, password). Dropbox dedupes per (path, settings); a duplicate request 409s with `shared_link_already_exists` carrying the existing link, which the declarative layer surfaces as { status: \"conflict\" }.","parameters":{"type":"object","properties":{"path":{"type":"string","description":"Path to share, e.g. \"/Reports/Q1.pdf\"."},"settings":{"type":"object","description":"SharedLinkSettings; all fields optional.","properties":{"requested_visibility":{"type":"string","enum":["public","team_only","password"]},"link_password":{"type":"string"},"expires":{"type":"string","description":"ISO8601 expiry timestamp."},"audience":{"type":"string","enum":["public","team","no_one","password","members"]},"access":{"type":"string","enum":["viewer","editor","max"]},"allow_download":{"type":"boolean"}}}},"required":["path"]},"requiredScopes":["sharing.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sharing.list_shared_links","description":"List existing shared links. Filter by `path` to scope to one entry, or pass `cursor` to page through prior results. Set `direct_only` to true to exclude inherited links from parent folders.","parameters":{"type":"object","properties":{"path":{"type":"string","description":"Optional path to filter to one entry."},"cursor":{"type":"string","description":"Pagination cursor from a prior call."},"direct_only":{"type":"boolean","default":false}}},"requiredScopes":["sharing.read"],"class":"read"}]},{"kind":"dub","displayName":"Dub","description":"Create, manage, and analyse short links on Dub — the modern link attribution platform for tracking conversions and running affiliate programmes.","auth":{"kind":"api-key","hint":"Dub workspace API key (Bearer token)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"links.create","description":"Create a short link.","parameters":{"type":"object","properties":{"url":{"type":"string"},"domain":{"type":"string"},"key":{"type":"string"},"externalId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"image":{"type":"string"},"video":{"type":"string"},"tagNames":{"type":"array","items":{"type":"string"}},"folderId":{"type":"string"},"expiresAt":{"type":"string"},"expiredUrl":{"type":"string"},"password":{"type":"string"},"trackConversion":{"type":"boolean"},"proxy":{"type":"boolean"},"rewrite":{"type":"boolean"},"doIndex":{"type":"boolean"},"archived":{"type":"boolean"},"ios":{"type":"string"},"android":{"type":"string"},"comments":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"links.get","description":"Retrieve a short link by link ID, external ID, or domain+key slug.","parameters":{"type":"object","properties":{"linkId":{"type":"string"},"externalId":{"type":"string"},"domain":{"type":"string"},"key":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"links.list","description":"List or search short links in the workspace.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"tagNames":{"type":"array","items":{"type":"string"}},"search":{"type":"string"},"userId":{"type":"string"},"showArchived":{"type":"boolean"},"page":{"type":"integer"},"pageSize":{"type":"integer"},"sort":{"type":"string","enum":["createdAt","clicks","lastClicked"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"links.update","description":"Update an existing short link.","parameters":{"type":"object","properties":{"linkId":{"type":"string"},"url":{"type":"string"},"domain":{"type":"string"},"key":{"type":"string"},"externalId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"image":{"type":"string"},"video":{"type":"string"},"tagNames":{"type":"array","items":{"type":"string"}},"folderId":{"type":"string"},"expiresAt":{"type":"string"},"expiredUrl":{"type":"string"},"password":{"type":"string"},"trackConversion":{"type":"boolean"},"proxy":{"type":"boolean"},"rewrite":{"type":"boolean"},"doIndex":{"type":"boolean"},"archived":{"type":"boolean"},"ios":{"type":"string"},"android":{"type":"string"},"comments":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"links.delete","description":"Delete a short link.","parameters":{"type":"object","properties":{"linkId":{"type":"string"}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tags.create","description":"Create a tag in the Dub workspace.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Tag name."},"color":{"type":"string","enum":["red","yellow","green","blue","purple","pink","brown"],"description":"Tag colour (Dub palette)."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"duckdb","displayName":"DuckDB","description":"Load bounded JSON tables into a throwaway in-memory DuckDB database and run a parameterized query.","auth":{"kind":"none"},"defaultConsistencyModel":"advisory","category":"database","capabilities":[{"name":"create.and.query.db","class":"read","description":"Create in-memory tables from JSON arrays and return a bounded parameterized SQL query result.","parameters":{"type":"object","properties":{"tables":{"type":"array","minItems":1,"maxItems":16,"items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Za-z_][A-Za-z0-9_]{0,62}$","maxLength":63},"data":{"type":"array","maxItems":10000,"items":{"type":"object"}},"schema":{"type":"object","maxProperties":256}},"required":["name","data"],"additionalProperties":false}},"query":{"type":"string","minLength":1,"maxLength":20000,"description":"A single relation-returning SQL query. Use $1, $2, and args for dynamic values."},"args":{"type":"array","maxItems":100,"items":{"type":["string","number","boolean","null"]}},"maxRows":{"type":"integer","minimum":1,"maximum":10000,"default":1000}},"required":["tables","query"],"additionalProperties":false}}]},{"kind":"dumpling-ai","displayName":"Dumpling AI","description":"Transform unstructured website content into clean, AI-ready data via Dumpling AI.","auth":{"kind":"api-key","hint":"Dumpling AI API key. Create one in app.dumplingai.com under Settings → API Keys."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"web.crawl","description":"Crawl a website starting from the given URL, returning cleaned content for each page visited.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Base URL to crawl."},"limit":{"type":"integer","description":"Maximum number of pages to crawl."},"depth":{"type":"integer","description":"Distance from the base URL to follow links."},"format":{"type":"string","enum":["markdown","html","text"],"description":"Output content format."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"web.scrape","description":"Scrape a single web page and return its cleaned content.","parameters":{"type":"object","properties":{"url":{"type":"string"},"format":{"type":"string","enum":["markdown","html","text"]},"cleaned":{"type":"boolean","description":"Whether the output should be cleaned of boilerplate."},"renderJs":{"type":"boolean","description":"Render JavaScript before extracting content."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"document.extract","description":"Extract structured data from a document file (URL or base64) given a natural-language prompt.","parameters":{"type":"object","properties":{"file":{"type":"string","description":"File URL or base64-encoded file contents."},"prompt":{"type":"string","description":"Prompt describing what to extract from the document."},"jsonMode":{"type":"boolean","description":"Whether to return the result as JSON."}},"required":["file","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"image.generate","description":"Generate one or more images from a prompt using the specified model.","parameters":{"type":"object","properties":{"prompt":{"type":"string"},"model":{"type":"string","description":"The image-generation model identifier."},"aspect_ratio":{"type":"string","description":"Aspect ratio for the generated image."},"num_outputs":{"type":"integer","description":"Number of images to generate (1–4)."},"seed":{"type":"integer","description":"Seed for reproducible generation."},"output_format":{"type":"string","enum":["png","jpg","webp"]}},"required":["prompt","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"search.news","description":"Search Google News and optionally scrape the top results.","parameters":{"type":"object","properties":{"query":{"type":"string"},"country":{"type":"string","description":"Country code for location bias (e.g. US)."},"location":{"type":"string","description":"Specific location to focus the search."},"language":{"type":"string","description":"Language code for the results (e.g. en)."},"dateRange":{"type":"string","enum":["anyTime","pastHour","pastDay","pastWeek","pastMonth","pastYear"],"description":"Filter results by recency."},"page":{"type":"integer"},"scrapeResults":{"type":"boolean"},"numResultsToScrape":{"type":"integer","description":"Number of top results to scrape (max 10)."},"scrapeFormat":{"type":"string","enum":["markdown","html","text"]},"cleanedOutput":{"type":"boolean"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false}]},{"kind":"dust","displayName":"Dust","description":"Run Dust assistant conversations, attach fragments and files, and manage data-source documents in a Dust workspace.","auth":{"kind":"api-key","hint":"Dust API key (sk-…); the workspace id is supplied per-request via the workspaceId input."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"conversations.create","description":"Create a new Dust assistant conversation, optionally seeding it with a first user message and a title.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"title":{"type":"string"},"visibility":{"type":"string"},"message":{"type":"object","description":"Optional first message — Dust expects { content, mentions, context } where context describes the user identity."},"contentFragment":{"type":"object","description":"Optional content fragment seeded into the conversation (text + content type + name)."}},"required":["workspaceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.reply","description":"Append a user message to an existing Dust conversation, triggering the assistant to reply.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"conversationId":{"type":"string"},"content":{"type":"string"},"mentions":{"type":"array","description":"Assistant mentions — each entry like { configurationId } selects which Dust assistant should answer.","items":{"type":"object","properties":{"configurationId":{"type":"string"}},"required":["configurationId"]}},"context":{"type":"object","description":"Caller identity / locale context Dust attaches to the message (username, timezone, profilePictureUrl, etc)."}},"required":["workspaceId","conversationId","content","mentions"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.get","description":"Fetch a Dust conversation, including its message tree and any attached fragments.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"conversationId":{"type":"string"}},"required":["workspaceId","conversationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversations.addFragment","description":"Attach a content fragment (inline text or a previously uploaded file) to an existing Dust conversation. fileId, when supplied, takes precedence over the inline fragment payload.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"conversationId":{"type":"string"},"title":{"type":"string"},"fragmentName":{"type":"string"},"fileId":{"type":"string","description":"ID of a file previously created with files.upload — supplying it skips the inline content path."},"contentType":{"type":"string"},"content":{"type":"string"},"url":{"type":"string"}},"required":["workspaceId","conversationId","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.upload","description":"Register a file with Dust so it can be referenced from a content fragment by fileId. The caller supplies the descriptor (name, contentType, size, useCase); the returned id is passed to conversations.addFragment.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"fileName":{"type":"string"},"contentType":{"type":"string"},"fileSize":{"type":"integer"},"useCase":{"type":"string","description":"Why the file is being uploaded — typical values include \"conversation\" or \"tool_output\"."}},"required":["workspaceId","fileName","contentType","fileSize","useCase"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.upsert","description":"Insert or replace a document in a Dust data source. documentId is caller-supplied so repeated calls with the same id replace prior content (idempotent by document key).","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"datasource":{"type":"string","description":"Data-source name (slug) within the workspace."},"documentId":{"type":"string"},"content":{"type":"string"},"sourceUrl":{"type":"string"},"tags":{"type":"array","items":{"type":"string"},"description":"Tag strings indexed alongside the document for retrieval filtering."}},"required":["workspaceId","datasource","documentId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"easy-peasy-ai","displayName":"Easy-Peasy.AI","description":"Generate text from tenant-defined custom generators, produce AI images across multiple model backends, and transcribe audio via Easy-Peasy.AI.","auth":{"kind":"api-key","hint":"Easy-Peasy.AI API key from Account → API. Sent as a Bearer token in the Authorization header."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"generator.text.run","description":"Run a custom Easy-Peasy.AI text generator. The generator and its prompt template are configured in the Easy-Peasy.AI UI; this call supplies the keyword payload, optional background context, and model/language switches at invocation time.","parameters":{"type":"object","properties":{"keywords":{"type":"string","description":"Primary input prompt for the generator. Max 1000 characters."},"extra1":{"type":"string","description":"Optional background context that augments the prompt. Max 1000 characters."},"outputs":{"type":"integer","description":"Number of candidate generations to return. Defaults to 1 server-side."},"language":{"type":"string","description":"Target language for the generated text (e.g. English, Spanish, German). Defaults to English."},"shouldUseGPT4":{"type":"boolean","description":"When true, route the generation through the GPT-4 model variant. Higher cost; the default model is the lower-tier backend."}},"required":["keywords"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"image.generate","description":"Generate an AI image from a text prompt. Selects between Easy-Peasy.AI image-model backends and accepts style, artist, dimension, HD, and reference-image controls.","parameters":{"type":"object","properties":{"prompt":{"type":"string","description":"Text description of the image to render."},"model":{"type":"string","description":"Image model identifier (e.g. stable-diffusion, dall-e, flux). Maps to an Easy-Peasy.AI model slug."},"style":{"type":"string","description":"Art style or aesthetic descriptor blended into the prompt (e.g. cinematic, watercolor, neon)."},"artist":{"type":"string","description":"Optional artist whose style the image should imitate."},"dimensions":{"type":"string","description":"Aspect ratio / output dimensions (e.g. 1024x1024, 1792x1024)."},"useHD":{"type":"boolean","description":"When true, render in HD quality. Higher cost than the standard quality default."},"image":{"type":"string","description":"Optional URL to a reference image used to anchor style or composition."}},"required":["prompt","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"transcription.create","description":"Submit a hosted audio URL for asynchronous transcription. Returns a transcription job handle; the result is fetched with transcription.get once processing is complete.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Publicly fetchable URL of the audio file to transcribe."},"name":{"type":"string","description":"Human-readable title used to label this transcription in the Easy-Peasy.AI dashboard."},"audio_type":{"type":"string","description":"Type of audio content (e.g. meeting, podcast, lecture, interview). Drives downstream transcript formatting."},"detect_speakers":{"type":"boolean","description":"When true, run speaker diarization and label each segment with the detected speaker."},"enhanced_quality":{"type":"boolean","description":"When true, use the higher-quality transcription model. Slower and more expensive than the default."}},"required":["url","name","audio_type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"transcription.get","description":"Read the current state of an Easy-Peasy.AI transcription job by ID, including status (queued/processing/completed/failed) and, once finished, the transcript payload.","parameters":{"type":"object","properties":{"transcriptionId":{"type":"string","description":"Transcription job identifier returned by transcription.create."}},"required":["transcriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"ebay","displayName":"eBay","description":"Manage eBay seller inventory items and fulfillment orders, and read the connected user identity.","auth":{"kind":"oauth2","authorizationUrl":"https://auth.ebay.com/oauth2/authorize","tokenUrl":"https://api.ebay.com/identity/v1/oauth2/token","scopes":["https://api.ebay.com/oauth/api_scope","https://api.ebay.com/oauth/api_scope/sell.inventory","https://api.ebay.com/oauth/api_scope/sell.fulfillment","https://api.ebay.com/oauth/api_scope/sell.account","https://api.ebay.com/oauth/api_scope/sell.marketing","https://api.ebay.com/oauth/api_scope/commerce.identity.readonly"],"clientIdEnv":"EBAY_OAUTH_CLIENT_ID","clientSecretEnv":"EBAY_OAUTH_CLIENT_SECRET","tokenClientAuthMethod":"client_secret_basic"},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"inventory_items.search","description":"List inventory items for the connected seller with pagination.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Page size (eBay default 25, max 200)."},"offset":{"type":"integer","minimum":0,"description":"Zero-based offset of the first item to return."}}},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.inventory"],"class":"read"},{"name":"inventory_items.get","description":"Read a single inventory item by SKU.","parameters":{"type":"object","properties":{"sku":{"type":"string","description":"Seller-defined inventory SKU."}},"required":["sku"]},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.inventory"],"class":"read"},{"name":"inventory_items.upsert","description":"Create or fully replace an inventory item identified by SKU (eBay PUT semantics are upsert).","parameters":{"type":"object","properties":{"sku":{"type":"string","description":"Seller-defined inventory SKU."},"marketplaceId":{"type":"string","description":"Marketplace id, e.g. EBAY_US. Defaults to Content-Language en-US."},"item":{"type":"object","description":"Inventory item payload (product, condition, availability, packageWeightAndSize)."}},"required":["sku","item"]},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.inventory"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"inventory_items.delete","description":"Delete an inventory item and all of its offers by SKU.","parameters":{"type":"object","properties":{"sku":{"type":"string"}},"required":["sku"]},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.inventory"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"offers.search","description":"List offers (listings) attached to a given inventory SKU with pagination.","parameters":{"type":"object","properties":{"sku":{"type":"string","description":"Inventory SKU whose offers to list."},"marketplace_id":{"type":"string","description":"Marketplace filter, e.g. EBAY_US."},"format":{"type":"string","enum":["FIXED_PRICE","AUCTION"]},"limit":{"type":"integer","minimum":1,"maximum":200},"offset":{"type":"integer","minimum":0}},"required":["sku"]},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.inventory"],"class":"read"},{"name":"offers.publish","description":"Publish an offer, converting it into an active eBay listing.","parameters":{"type":"object","properties":{"offerId":{"type":"string","description":"Unique identifier of the offer to publish."}},"required":["offerId"]},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.inventory"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.search","description":"List fulfillment orders for the connected seller with optional filters and pagination.","parameters":{"type":"object","properties":{"filter":{"type":"string","description":"eBay fulfillment filter expression, e.g. \"creationdate:[2026-01-01T00:00:00.000Z..]\" or \"orderfulfillmentstatus:{NOT_STARTED|IN_PROGRESS}\"."},"orderIds":{"type":"string","description":"Comma-separated list of order ids to fetch."},"fieldGroups":{"type":"string","description":"Optional response projection, e.g. TAX_BREAKDOWN."},"marketplaceId":{"type":"string","description":"Marketplace id header override, e.g. EBAY_US."},"limit":{"type":"integer","minimum":1,"maximum":1000},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.fulfillment"],"class":"read"},{"name":"orders.get","description":"Read a single fulfillment order by id.","parameters":{"type":"object","properties":{"orderId":{"type":"string"},"fieldGroups":{"type":"string","description":"Optional response projection, e.g. TAX_BREAKDOWN."},"marketplaceId":{"type":"string","description":"Marketplace id header override, e.g. EBAY_US."}},"required":["orderId"]},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.fulfillment"],"class":"read"},{"name":"orders.ship","description":"Create a shipping fulfillment for an order — records carrier, tracking, and the line items shipped.","parameters":{"type":"object","properties":{"orderId":{"type":"string"},"marketplaceId":{"type":"string","description":"Marketplace id header override, e.g. EBAY_US."},"fulfillment":{"type":"object","description":"Shipping fulfillment payload (lineItems, shippedDate, shippingCarrierCode, trackingNumber)."}},"required":["orderId","fulfillment"]},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.fulfillment"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"identity.get","description":"Read the connected eBay user identity (account type, registration marketplace, business / individual flags).","parameters":{"type":"object","properties":{}},"requiredScopes":["https://api.ebay.com/oauth/api_scope/commerce.identity.readonly"],"class":"read"},{"name":"inventory.update","description":"Bulk-update price and/or available quantity for one or more inventory items / offers.","parameters":{"type":"object","properties":{"marketplaceId":{"type":"string","description":"Marketplace id header override, e.g. EBAY_US."},"requests":{"type":"array","description":"eBay PriceQuantity request array. Each entry targets a SKU and/or offerId with new ship-to-locationAvailability / price values.","items":{"type":"object"}}},"required":["requests"]},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.inventory"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.cancel","description":"Request order cancellation via the Post-Order Cancellation API. Sellers can request cancellation on unshipped orders.","parameters":{"type":"object","properties":{"legacyOrderId":{"type":"string","description":"eBay legacy (string) order id the cancellation request applies to."},"cancelReason":{"type":"string","description":"Reason for the cancellation, e.g. OUT_OF_STOCK_OR_CANNOT_FULFILL, BUYER_ASKED_CANCEL, ADDRESS_ISSUES."},"marketplaceId":{"type":"string","description":"Marketplace id header override, e.g. EBAY_US."}},"required":["legacyOrderId","cancelReason"]},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.fulfillment"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"listing.end","description":"End an active listing by withdrawing its offer.","parameters":{"type":"object","properties":{"offerId":{"type":"string","description":"Unique identifier of the offer (active listing) to withdraw."}},"required":["offerId"]},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.inventory"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"echowin","displayName":"Echowin","description":"Manage contacts and workflows in Echowin.","auth":{"kind":"api-key","hint":"Echowin API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.create","description":"Create a new contact in Echowin.","parameters":{"type":"object","properties":{"firstName":{"type":"string","description":"First name of the contact."},"lastName":{"type":"string","description":"Last name of the contact."},"email":{"type":"string","description":"Email address of the contact."},"number":{"type":"string","description":"Phone number (will be automatically cleaned)."},"carrier":{"type":"string","description":"Phone carrier name."}},"required":["number"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.find","description":"Find a contact by name, email, or phone number.","parameters":{"type":"object","properties":{"search":{"type":"string","description":"Search by name, email, or phone number."}},"required":["search"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.delete","description":"Delete a contact from Echowin.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"The unique identifier of the contact to delete."}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"eden-ai","displayName":"Eden AI","description":"Call Eden AI aggregated endpoints (text generation, language detection, OCR, translation, TTS, image generation, document parsing) across a configurable provider list.","auth":{"kind":"api-key","hint":"Eden AI workspace API key. Mint one at https://app.edenai.run/admin/api-settings/features-preferences and send as a Bearer token."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"generate.text","description":"Generate text from a prompt by routing to one or more LLM providers. `providers` is a comma-separated list; later entries are fallbacks.","parameters":{"type":"object","properties":{"providers":{"type":"string","description":"Primary provider key, optionally followed by fallback keys (e.g. \"openai,cohere\")."},"text":{"type":"string","description":"The prompt or instruction to generate from."},"temperature":{"type":"number","minimum":0,"maximum":2},"max_tokens":{"type":"integer","minimum":1},"model":{"type":"string","description":"Provider-specific model id (e.g. \"openai/gpt-4o\")."},"fallback_providers":{"type":"string","description":"Comma-separated fallback providers (alternative to listing them in providers)."},"show_original_response":{"type":"boolean"},"settings":{"type":"object","description":"Per-provider settings overrides keyed by provider name."}},"required":["providers","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"summarize.text","description":"Summarize a passage of text. Output length is controlled by `output_sentences`.","parameters":{"type":"object","properties":{"providers":{"type":"string"},"text":{"type":"string"},"language":{"type":"string","description":"ISO 639-1 language code (e.g. \"en\")."},"output_sentences":{"type":"integer","minimum":1,"maximum":20},"model":{"type":"string"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"extract.keywords","description":"Extract weighted keywords from text.","parameters":{"type":"object","properties":{"providers":{"type":"string"},"text":{"type":"string"},"language":{"type":"string"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"detect.language","description":"Detect the language of an input text. Returns ISO 639-1 codes plus confidence per provider.","parameters":{"type":"object","properties":{"providers":{"type":"string"},"text":{"type":"string"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"extract.entities","description":"Run named-entity recognition on a passage of text.","parameters":{"type":"object","properties":{"providers":{"type":"string"},"text":{"type":"string"},"language":{"type":"string"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"moderate.text","description":"Run content-moderation scoring (toxicity, hate, sexual, etc.) on input text.","parameters":{"type":"object","properties":{"providers":{"type":"string"},"text":{"type":"string"},"language":{"type":"string"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"spell.check","description":"Run a spelling/grammar correction pass on input text.","parameters":{"type":"object","properties":{"providers":{"type":"string"},"text":{"type":"string"},"language":{"type":"string"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","text","language"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"translate.text","description":"Translate text between languages. `source_language` may be omitted to auto-detect.","parameters":{"type":"object","properties":{"providers":{"type":"string"},"text":{"type":"string"},"source_language":{"type":"string","description":"ISO 639-1 code or \"auto\" to detect."},"target_language":{"type":"string"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","text","target_language"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"invoice.parser","description":"Parse a financial invoice document. Accepts a public `file_url` (the declarative engine JSON-encodes bodies, so binary uploads use a bespoke path).","parameters":{"type":"object","properties":{"providers":{"type":"string"},"file_url":{"type":"string","description":"Public URL to the invoice file (PDF or image)."},"language":{"type":"string"},"file_password":{"type":"string"},"convert_to_pdf":{"type":"boolean"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","file_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"receipt.parser","description":"Parse a receipt document via URL. Same constraints as invoice.parser.","parameters":{"type":"object","properties":{"providers":{"type":"string"},"file_url":{"type":"string"},"language":{"type":"string"},"file_password":{"type":"string"},"convert_to_pdf":{"type":"boolean"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","file_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"ocr.image","description":"Run OCR (text extraction) on an image or scanned document referenced by URL.","parameters":{"type":"object","properties":{"providers":{"type":"string"},"file_url":{"type":"string"},"language":{"type":"string"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","file_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"image.generation","description":"Generate one or more images from a text prompt at a fixed resolution.","parameters":{"type":"object","properties":{"providers":{"type":"string"},"text":{"type":"string","description":"The image-generation prompt."},"resolution":{"type":"string","description":"Image resolution, e.g. \"512x512\" or \"1024x1024\"."},"num_images":{"type":"integer","minimum":1,"maximum":10},"model":{"type":"string"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","text","resolution"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"text.to.speech","description":"Synthesize speech audio from text. `option` selects voice gender (\"MALE\" | \"FEMALE\").","parameters":{"type":"object","properties":{"providers":{"type":"string"},"text":{"type":"string"},"language":{"type":"string"},"option":{"type":"string","description":"Voice gender: \"MALE\" or \"FEMALE\"."},"rate":{"type":"integer","minimum":-100,"maximum":100},"pitch":{"type":"integer","minimum":-100,"maximum":100},"volume":{"type":"integer","minimum":-100,"maximum":100},"audio_format":{"type":"string","description":"Container format (e.g. \"mp3\", \"wav\")."},"sampling_rate":{"type":"integer","minimum":0,"maximum":200000},"model":{"type":"string"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","text","language"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"elastic-email","displayName":"Elastic Email","description":"Send transactional email, manage contacts, segments, and campaigns through the Elastic Email v4 REST API.","auth":{"kind":"api-key","hint":"Elastic Email API key (Settings → API → Create Additional API Key) with Contacts, Campaigns, and Email scopes."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.list","description":"List contacts in the account.","parameters":{"type":"object","properties":{"search":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":1000},"offset":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.add","description":"Bulk add contacts (upsert by email).","parameters":{"type":"object","properties":{"contacts":{"type":"array","items":{"type":"object","properties":{"Email":{"type":"string"},"Status":{"type":"string"},"FirstName":{"type":"string"},"LastName":{"type":"string"},"CustomFields":{"type":"object"},"ConsentIP":{"type":"string"},"ConsentDate":{"type":"string"},"ConsentTracking":{"type":"string"}},"required":["Email"]}}},"required":["contacts"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.create","description":"Create a single contact.","parameters":{"type":"object","properties":{"email":{"type":"string"},"status":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"customFields":{"type":"object"},"consentIP":{"type":"string"},"consentDate":{"type":"string"},"consentTracking":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update an existing contact by email address.","parameters":{"type":"object","properties":{"email":{"type":"string"},"status":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"customFields":{"type":"object"},"consentIP":{"type":"string"},"consentDate":{"type":"string"},"consentTracking":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.unsubscribe","description":"Unsubscribe one or more contacts from the account.","parameters":{"type":"object","properties":{"emails":{"type":"array","items":{"type":"string"}}},"required":["emails"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"segments.create","description":"Create a new contact segment from a rule expression.","parameters":{"type":"object","properties":{"name":{"type":"string"},"rule":{"type":"string"}},"required":["name","rule"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.list","description":"List campaigns filtered by name or with pagination.","parameters":{"type":"object","properties":{"search":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.create","description":"Create a new email campaign.","parameters":{"type":"object","properties":{"name":{"type":"string"},"recipients":{"type":"object"},"content":{"type":"object","properties":{"From":{"type":"string"},"ReplyTo":{"type":"string"},"Subject":{"type":"string"},"PoolName":{"type":"string"},"ChannelName":{"type":"string"},"Encoding":{"type":"string"},"EnableTracking":{"type":"boolean"},"TemplateName":{"type":"string"},"AttachFiles":{"type":"array","items":{"type":"string"}},"Merge":{"type":"object"},"Body":{"type":"array","items":{"type":"object","properties":{"ContentType":{"type":"string"},"Content":{"type":"string"},"Charset":{"type":"string"}},"required":["ContentType","Content"]}}},"required":["From"]},"status":{"type":"string"},"options":{"type":"object"}},"required":["name","recipients","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.update","description":"Update an existing campaign by name.","parameters":{"type":"object","properties":{"name":{"type":"string"},"recipients":{"type":"object"},"content":{"type":"object","properties":{"From":{"type":"string"},"ReplyTo":{"type":"string"},"Subject":{"type":"string"},"PoolName":{"type":"string"},"ChannelName":{"type":"string"},"Encoding":{"type":"string"},"EnableTracking":{"type":"boolean"},"TemplateName":{"type":"string"},"AttachFiles":{"type":"array","items":{"type":"string"}},"Merge":{"type":"object"},"Body":{"type":"array","items":{"type":"object","properties":{"ContentType":{"type":"string"},"Content":{"type":"string"},"Charset":{"type":"string"}},"required":["ContentType","Content"]}}},"required":["From"]},"status":{"type":"string"},"options":{"type":"object"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"email.send","description":"Send a transactional email through /v4/emails/transactional.","parameters":{"type":"object","properties":{"recipients":{"type":"object"},"content":{"type":"object","properties":{"From":{"type":"string"},"ReplyTo":{"type":"string"},"Subject":{"type":"string"},"PoolName":{"type":"string"},"ChannelName":{"type":"string"},"Encoding":{"type":"string"},"EnableTracking":{"type":"boolean"},"TemplateName":{"type":"string"},"AttachFiles":{"type":"array","items":{"type":"string"}},"Merge":{"type":"object"},"Body":{"type":"array","items":{"type":"object","properties":{"ContentType":{"type":"string"},"Content":{"type":"string"},"Charset":{"type":"string"}},"required":["ContentType","Content"]}}},"required":["From"]},"options":{"type":"object","properties":{"TimeOffset":{"type":"integer"},"PoolName":{"type":"string"},"ChannelName":{"type":"string"},"Encoding":{"type":"string"},"TrackOpens":{"type":"boolean"},"TrackClicks":{"type":"boolean"}}},"merge":{"type":"object"}},"required":["recipients","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"elevenlabs","displayName":"ElevenLabs","description":"Convert text to speech using ElevenLabs AI voice synthesis.","auth":{"kind":"api-key","hint":"ElevenLabs API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"speech.synthesis","description":"Convert text to speech and return audio.","parameters":{"type":"object","properties":{"voiceId":{"type":"string","description":"The voice ID to use for synthesis"},"text":{"type":"string","description":"The text to convert to speech"},"modelId":{"type":"string","description":"Optional model ID (defaults to eleven_monolingual_v1)"}},"required":["voiceId","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"emailit","displayName":"Emailit","description":"Send transactional emails through the Emailit API.","auth":{"kind":"api-key","hint":"Emailit API key. Sent as a Bearer token on every request."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"send.email","description":"Send a transactional email through Emailit. Supports plain text or HTML body, CC/BCC fan-out, reply-to override, and custom headers.","parameters":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"},"description":"Recipient email addresses. Combined cap of 50 across to/cc/bcc."},"from_email":{"type":"string","description":"Verified sender email address."},"from_name":{"type":"string","description":"Optional display name shown to recipients."},"cc":{"type":"array","items":{"type":"string"},"description":"Visible carbon-copy recipients."},"bcc":{"type":"array","items":{"type":"string"},"description":"Hidden carbon-copy recipients."},"reply_to":{"type":"string","description":"Reply-to address. Defaults to from_email when omitted."},"subject":{"type":"string","description":"Subject line shown in the recipient inbox."},"content":{"type":"string","description":"Email body. Either plain text or HTML."},"content_type":{"type":"string","enum":["text","html"],"description":"Body encoding hint. Defaults to text."},"headers":{"type":"object","description":"Custom email headers as key/value pairs, e.g. X-Campaign-ID."}},"required":["to","from_email","subject","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"logs.list","description":"List Emailit delivery logs. Filter by RFC3339 `from`/`to` window and delivery `status` (delivered|bounced|opened|clicked). `limit` caps the page size.","parameters":{"type":"object","properties":{"from":{"type":"string","description":"RFC3339 lower bound for the log window (inclusive)."},"to":{"type":"string","description":"RFC3339 upper bound for the log window (inclusive)."},"status":{"type":"string","enum":["delivered","bounced","opened","clicked"],"description":"Filter logs to a single delivery status."},"limit":{"type":"integer","minimum":1,"description":"Maximum number of log entries to return."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"emailoctopus","displayName":"EmailOctopus","description":"Email marketing: manage EmailOctopus lists and contacts (add/update, tag, unsubscribe, find).","auth":{"kind":"api-key","hint":"EmailOctopus API key from Account → Integrations & API. Sent as a Bearer token on every request."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.addOrUpdate","description":"Add a contact to a list, or update it if the email is already present.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"email_address":{"type":"string"},"fields":{"type":"object"},"tags":{"type":"object"},"status":{"type":"string","enum":["subscribed","unsubscribed","pending"]}},"required":["listId","email_address"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.unsubscribe","description":"Unsubscribe a contact from a list by contact id (MD5 of lowercased email).","parameters":{"type":"object","properties":{"listId":{"type":"string"},"contactId":{"type":"string"}},"required":["listId","contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.updateEmail","description":"Update a contact email by replacing the address on the existing contact.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"contactId":{"type":"string"},"new_email_address":{"type":"string"}},"required":["listId","contactId","new_email_address"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.addTag","description":"Add a tag to a contact. Existing tags are preserved.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"contactId":{"type":"string"},"tag":{"type":"string"}},"required":["listId","contactId","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.removeTag","description":"Remove a tag from a contact. Other tags are preserved.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"contactId":{"type":"string"},"tag":{"type":"string"}},"required":["listId","contactId","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"lists.create","description":"Create a new list.","parameters":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.find","description":"Look up a single contact by id within a list.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"contactId":{"type":"string"}},"required":["listId","contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"enrichlayer","displayName":"Enrich Layer","description":"LinkedIn-style profile, company, school, and job enrichment. Reverse-lookup contacts by email or phone, search employees, and check disposable email addresses.","auth":{"kind":"api-key","hint":"Enrich Layer API key from the dashboard. Sent as a bearer token in the Authorization header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"school.profile.get","description":"Fetch a LinkedIn school profile by public URL.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"LinkedIn school profile URL."},"use_cache":{"type":"string","description":"if-present | if-recent"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.profile.get","description":"Fetch a LinkedIn company profile by public URL.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"LinkedIn company URL."},"categories":{"type":"string","description":"include | exclude"},"funding_data":{"type":"string","description":"include | exclude"},"exit_data":{"type":"string","description":"include | exclude"},"acquisitions":{"type":"string","description":"include | exclude"},"extra":{"type":"string","description":"include | exclude"},"use_cache":{"type":"string","description":"if-present | if-recent"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"person.profile.get","description":"Fetch a LinkedIn person profile by public URL.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"LinkedIn profile URL."},"skills":{"type":"string","description":"include | exclude"},"inferred_salary":{"type":"string","description":"include | exclude"},"personal_email":{"type":"string","description":"include | exclude"},"personal_contact_number":{"type":"string","description":"include | exclude"},"twitter_profile_id":{"type":"string"},"facebook_profile_id":{"type":"string"},"github_profile_id":{"type":"string"},"extra":{"type":"string","description":"include | exclude"},"use_cache":{"type":"string","description":"if-present | if-recent"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.lookup","description":"Lookup a company by name, domain, or LinkedIn slug.","parameters":{"type":"object","properties":{"company_domain":{"type":"string"},"company_name":{"type":"string"},"company_location":{"type":"string"},"enrich_profile":{"type":"string","description":"enrich | skip"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.id.lookup","description":"Resolve a LinkedIn internal company id from a company URL.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"LinkedIn company URL."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.picture.get","description":"Get a temporary URL to a company profile picture.","parameters":{"type":"object","properties":{"linkedin_company_profile_url":{"type":"string"}},"required":["linkedin_company_profile_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"person.picture.get","description":"Get a temporary URL to a person profile picture.","parameters":{"type":"object","properties":{"linkedin_person_profile_url":{"type":"string"}},"required":["linkedin_person_profile_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"employee.listing","description":"List employees of a company by LinkedIn URL.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"LinkedIn company URL."},"country":{"type":"string"},"enrich_profiles":{"type":"string","description":"enrich | skip"},"role_search":{"type":"string","description":"Regex of role titles to match."},"page_size":{"type":"integer","minimum":1,"maximum":200000},"employment_status":{"type":"string","description":"current | past | all"},"sort_by":{"type":"string","description":"recently-joined | recently-left | oldest | none"},"resolve_numeric_id":{"type":"boolean"},"use_cache":{"type":"string","description":"if-present | if-recent"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"employee.count","description":"Get employee headcount estimate for a company.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"LinkedIn company URL."},"linkedin_employee_count":{"type":"string","description":"include | exclude"},"employment_status":{"type":"string","description":"current | past | all"},"use_cache":{"type":"string","description":"if-present | if-recent"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"employee.search","description":"Search a company's employee list by keyword/role.","parameters":{"type":"object","properties":{"linkedin_company_profile_url":{"type":"string"},"keyword_regex":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":200000},"country":{"type":"string"},"enrich_profiles":{"type":"string","description":"enrich | skip"},"resolve_numeric_id":{"type":"boolean"}},"required":["linkedin_company_profile_url","keyword_regex"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"person.lookup","description":"Resolve a person by name + company hints to a LinkedIn profile.","parameters":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"company_domain":{"type":"string"},"location":{"type":"string"},"title":{"type":"string"},"enrich_profile":{"type":"string","description":"enrich | skip"}},"required":["first_name","company_domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"role.lookup","description":"Find a person currently holding a given role at a company.","parameters":{"type":"object","properties":{"role":{"type":"string","description":"Role/title to search for."},"company_name":{"type":"string"},"enrich_profile":{"type":"string","description":"enrich | skip"}},"required":["role","company_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reverse.email.lookup","description":"Reverse-lookup a LinkedIn profile from a work or personal email.","parameters":{"type":"object","properties":{"work_email":{"type":"string"},"enrich_profile":{"type":"string","description":"enrich | skip"},"lookup_depth":{"type":"string","description":"superficial | deep"}},"required":["work_email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reverse.phone.lookup","description":"Reverse-lookup public profiles (LinkedIn, Twitter, Facebook) from a phone number.","parameters":{"type":"object","properties":{"phone_number":{"type":"string","description":"E.164-formatted phone number."}},"required":["phone_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"work.email.lookup","description":"Find a work email address for a LinkedIn person profile.","parameters":{"type":"object","properties":{"linkedin_profile_url":{"type":"string"},"callback_url":{"type":"string","description":"Webhook URL for async result delivery."}},"required":["linkedin_profile_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"personal.contact.lookup","description":"Find personal contact numbers for a LinkedIn person profile.","parameters":{"type":"object","properties":{"linkedin_profile_url":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":10}},"required":["linkedin_profile_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"personal.email.lookup","description":"Find personal email addresses for a LinkedIn person profile.","parameters":{"type":"object","properties":{"linkedin_profile_url":{"type":"string"},"email_validation":{"type":"string","description":"include | exclude"},"page_size":{"type":"integer","minimum":1,"maximum":10}},"required":["linkedin_profile_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"disposable.email.check","description":"Check whether an email address belongs to a disposable provider.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"student.listing","description":"List alumni/students for a LinkedIn school profile.","parameters":{"type":"object","properties":{"linkedin_school_url":{"type":"string"},"country":{"type":"string"},"enrich_profiles":{"type":"string","description":"enrich | skip"},"search_keyword":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":15000},"student_status":{"type":"string","description":"current | past | all"},"sort_by":{"type":"string","description":"recently-started | recently-finished | none"},"resolve_numeric_id":{"type":"boolean"},"use_cache":{"type":"string","description":"if-present | if-recent"}},"required":["linkedin_school_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"job.profile.get","description":"Fetch a single LinkedIn job posting by URL.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"LinkedIn job posting URL."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"job.search","description":"Search job postings for a LinkedIn company by job type, region, and experience.","parameters":{"type":"object","properties":{"search_id":{"type":"string","description":"LinkedIn company numeric id."},"job_type":{"type":"string","description":"full-time | part-time | contract | internship | temporary | volunteer | other"},"experience_level":{"type":"string","description":"internship | entry_level | associate | mid_senior_level | director"},"when":{"type":"string","description":"yesterday | past-week | past-month | anytime"},"flexibility":{"type":"string","description":"remote | on-site | hybrid"},"geo_id":{"type":"string","description":"LinkedIn geo URN identifier."},"keyword":{"type":"string"}},"required":["search_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"job.count","description":"Get the count of job postings for a LinkedIn company.","parameters":{"type":"object","properties":{"search_id":{"type":"string"},"job_type":{"type":"string"},"experience_level":{"type":"string"},"when":{"type":"string"},"flexibility":{"type":"string"},"geo_id":{"type":"string"},"keyword":{"type":"string"}},"required":["search_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.search","description":"Search the company database by industry, headcount, country, or follower range.","parameters":{"type":"object","properties":{"country":{"type":"string"},"region":{"type":"string"},"city":{"type":"string"},"name":{"type":"string"},"industry":{"type":"string"},"employee_count_min":{"type":"integer","minimum":0},"employee_count_max":{"type":"integer","minimum":0},"follower_count_min":{"type":"integer","minimum":0},"follower_count_max":{"type":"integer","minimum":0},"founded_after_year":{"type":"integer"},"founded_before_year":{"type":"integer"},"funding_amount_max":{"type":"integer","minimum":0},"funding_amount_min":{"type":"integer","minimum":0},"funding_raised_after":{"type":"string","description":"YYYY-MM-DD"},"funding_raised_before":{"type":"string","description":"YYYY-MM-DD"},"public_identifier_in_list":{"type":"string"},"public_identifier_not_in_list":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":100},"enrich_profiles":{"type":"string","description":"enrich | skip"},"use_cache":{"type":"string","description":"if-present | if-recent"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"person.search","description":"Search the people database by current role, education, industry, or skills.","parameters":{"type":"object","properties":{"country":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"education_field_of_study":{"type":"string"},"education_degree_name":{"type":"string"},"education_school_name":{"type":"string"},"education_school_linkedin_profile_url":{"type":"string"},"current_role_title":{"type":"string"},"past_role_title":{"type":"string"},"current_role_before":{"type":"string","description":"YYYY-MM-DD"},"current_role_after":{"type":"string","description":"YYYY-MM-DD"},"current_company_linkedin_profile_url":{"type":"string"},"past_company_linkedin_profile_url":{"type":"string"},"current_job_description":{"type":"string"},"past_job_description":{"type":"string"},"current_company_name":{"type":"string"},"past_company_name":{"type":"string"},"linkedin_groups":{"type":"string"},"languages":{"type":"string"},"region":{"type":"string"},"city":{"type":"string"},"headline":{"type":"string"},"summary":{"type":"string"},"industries":{"type":"string"},"interests":{"type":"string"},"skills":{"type":"string"},"current_company_country":{"type":"string"},"current_company_region":{"type":"string"},"current_company_city":{"type":"string"},"current_company_type":{"type":"string"},"current_company_follower_count_min":{"type":"integer","minimum":0},"current_company_follower_count_max":{"type":"integer","minimum":0},"current_company_industry":{"type":"string"},"current_company_employee_count_min":{"type":"integer","minimum":0},"current_company_employee_count_max":{"type":"integer","minimum":0},"current_company_description":{"type":"string"},"current_company_founded_after_year":{"type":"integer"},"current_company_founded_before_year":{"type":"integer"},"current_company_funding_amount_min":{"type":"integer","minimum":0},"current_company_funding_amount_max":{"type":"integer","minimum":0},"current_company_funding_raised_after":{"type":"string"},"current_company_funding_raised_before":{"type":"string"},"public_identifier_in_list":{"type":"string"},"public_identifier_not_in_list":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":100},"enrich_profiles":{"type":"string","description":"enrich | skip"},"use_cache":{"type":"string","description":"if-present | if-recent"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"credit.balance.get","description":"Get the remaining API credit balance for the account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"esignatures","displayName":"eSignatures","description":"Create contracts on eSignatures.io and send them to signers from a template.","auth":{"kind":"api-key","hint":"eSignatures.io API token (sent as HTTP basic / bearer)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.contract","description":"Create a contract from a template and send it to the listed signers.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"ID of the template to use for the contract."},"title":{"type":"string","description":"Unique title for the contract (defaults to template title)."},"locale":{"type":"string","description":"Language setting for the signer page and emails."},"metadata":{"type":"string","description":"Custom data to attach to the contract."},"expiresInHours":{"type":"number","description":"Sets the expiry time (in hours) for the contract."},"customWebhookUrl":{"type":"string","description":"Custom URL for webhook notifications."},"assignedUserEmail":{"type":"string","description":"Email to assign management of the contract."},"labels":{"type":"array","items":{"type":"string"},"description":"Labels to assign to the contract."},"test":{"type":"boolean","description":"Mark as test/demo contract with no fees charged."},"saveAsDraft":{"type":"boolean","description":"Save as draft instead of sending to signers."},"signers":{"type":"array","description":"List of individuals required to sign (name, email, and/or mobile).","items":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"mobile":{"type":"string"}},"required":["name"]}}},"required":["templateId","signers"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contract.cancel","description":"Withdraw / cancel an in-progress contract.","parameters":{"type":"object","properties":{"contractId":{"type":"string","description":"ID of the contract to cancel."},"voidedBy":{"type":"string","description":"Name of the user voiding the contract (recorded in audit trail)."}},"required":["contractId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contract.delete","description":"Delete a contract permanently.","parameters":{"type":"object","properties":{"contractId":{"type":"string","description":"ID of the contract to delete."}},"required":["contractId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"etsy","displayName":"Etsy","description":"Manage Etsy seller resources — shop listings, shop receipts (orders), transactions, and the shop entity — via the Etsy Open API v3.","auth":{"kind":"oauth2","authorizationUrl":"https://www.etsy.com/oauth/connect","tokenUrl":"https://api.etsy.com/v3/public/oauth/token","scopes":["listings_r","listings_w","listings_d","transactions_r","transactions_w","shops_r","shops_w","profile_r","email_r"],"clientIdEnv":"ETSY_OAUTH_CLIENT_ID","clientSecretEnv":"ETSY_OAUTH_CLIENT_SECRET"},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.me","description":"Read the authenticated user, including their numeric user_id. Used to bootstrap shop_id resolution.","parameters":{"type":"object","properties":{}},"requiredScopes":["profile_r"],"class":"read"},{"name":"shops.get_for_user","description":"Resolve the shop owned by a given Etsy user. Returns the shop_id used by every listing/receipt call.","parameters":{"type":"object","properties":{"user_id":{"type":"integer","description":"Etsy numeric user_id (from users.me)."}},"required":["user_id"]},"requiredScopes":["shops_r"],"class":"read"},{"name":"shops.get","description":"Read a single shop by shop_id.","parameters":{"type":"object","properties":{"shop_id":{"type":"integer"}},"required":["shop_id"]},"requiredScopes":["shops_r"],"class":"read"},{"name":"shops.update","description":"Update mutable shop attributes (title, announcement, sale_message, policy_welcome).","parameters":{"type":"object","properties":{"shop_id":{"type":"integer"},"title":{"type":"string"},"announcement":{"type":"string"},"sale_message":{"type":"string"},"policy_welcome":{"type":"string"},"policy_payment":{"type":"string"},"policy_shipping":{"type":"string"},"policy_refunds":{"type":"string"},"policy_additional":{"type":"string"},"policy_seller_info":{"type":"string"},"policy_privacy":{"type":"string"}},"required":["shop_id"]},"requiredScopes":["shops_w"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"listings.search","description":"List shop listings with optional state, sort, and keyword filters. Paginated by limit/offset.","parameters":{"type":"object","properties":{"shop_id":{"type":"integer"},"state":{"type":"string","enum":["active","inactive","sold_out","draft","expired"],"description":"Filter by listing state. Defaults to active server-side when omitted."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Max 100 per page."},"offset":{"type":"integer","minimum":0},"sort_on":{"type":"string","enum":["created","price","updated","score"]},"sort_order":{"type":"string","enum":["asc","ascending","desc","descending","up","down"]},"keywords":{"type":"string","description":"Search within listing titles/descriptions."},"includes":{"type":"string","description":"Comma-separated associations to inline, e.g. Images,Inventory,Translations."}},"required":["shop_id"]},"requiredScopes":["listings_r"],"class":"read"},{"name":"listings.get","description":"Read a single listing by listing_id.","parameters":{"type":"object","properties":{"listing_id":{"type":"integer"},"includes":{"type":"string","description":"Comma-separated associations to inline, e.g. Images,Inventory,Shipping,Translations,Videos."},"language":{"type":"string","description":"BCP-47 language tag for localized fields."}},"required":["listing_id"]},"requiredScopes":["listings_r"],"class":"read"},{"name":"listings.create","description":"Create a draft shop listing. Required: quantity, title, description, price, who_made, when_made, taxonomy_id. Listing is created in `draft` state by default — caller must POST `listings.update` with state=active to publish.","parameters":{"type":"object","properties":{"shop_id":{"type":"integer"},"quantity":{"type":"integer","minimum":1},"title":{"type":"string"},"description":{"type":"string"},"price":{"type":"number","description":"Listing price in shop currency."},"who_made":{"type":"string","enum":["i_did","someone_else","collective"]},"when_made":{"type":"string","description":"Etsy when_made enum, e.g. \"made_to_order\", \"2020_2025\", \"before_1700\"."},"taxonomy_id":{"type":"integer","description":"Etsy seller taxonomy node id."},"shipping_profile_id":{"type":"integer"},"return_policy_id":{"type":"integer"},"materials":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"styles":{"type":"array","items":{"type":"string"}},"item_weight":{"type":"number"},"item_length":{"type":"number"},"item_width":{"type":"number"},"item_height":{"type":"number"},"is_supply":{"type":"boolean"},"is_personalizable":{"type":"boolean"},"type":{"type":"string","enum":["physical","download","both"]}},"required":["shop_id","quantity","title","description","price","who_made","when_made","taxonomy_id"]},"requiredScopes":["listings_w"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"listings.update","description":"Update a shop listing. Only supplied fields are modified. Use `state` to publish a draft (active), retire (inactive), or move to draft.","parameters":{"type":"object","properties":{"shop_id":{"type":"integer"},"listing_id":{"type":"integer"},"title":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"quantity":{"type":"integer","minimum":0},"state":{"type":"string","enum":["active","inactive","draft"]},"materials":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"taxonomy_id":{"type":"integer"},"shipping_profile_id":{"type":"integer"},"return_policy_id":{"type":"integer"},"is_personalizable":{"type":"boolean"},"featured_rank":{"type":"integer"}},"required":["shop_id","listing_id"]},"requiredScopes":["listings_w"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"listings.delete","description":"Permanently delete a shop listing. Etsy enforces idempotency — repeated deletes return 404 on the same listing_id.","parameters":{"type":"object","properties":{"listing_id":{"type":"integer"}},"required":["listing_id"]},"requiredScopes":["listings_d"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"receipts.search","description":"List shop receipts (orders). Filter by paid/shipped state and date window. Paginated by limit/offset.","parameters":{"type":"object","properties":{"shop_id":{"type":"integer"},"min_created":{"type":"integer","description":"Unix timestamp lower bound for create_timestamp."},"max_created":{"type":"integer","description":"Unix timestamp upper bound for create_timestamp."},"min_last_modified":{"type":"integer"},"max_last_modified":{"type":"integer"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0},"sort_on":{"type":"string","enum":["created","updated","receipt_id"]},"sort_order":{"type":"string","enum":["asc","ascending","desc","descending","up","down"]},"was_paid":{"type":"boolean"},"was_shipped":{"type":"boolean"},"was_delivered":{"type":"boolean"},"was_canceled":{"type":"boolean"}},"required":["shop_id"]},"requiredScopes":["transactions_r"],"class":"read"},{"name":"receipts.get","description":"Read a single shop receipt by receipt_id.","parameters":{"type":"object","properties":{"shop_id":{"type":"integer"},"receipt_id":{"type":"integer"}},"required":["shop_id","receipt_id"]},"requiredScopes":["transactions_r"],"class":"read"},{"name":"receipts.update","description":"Update buyer-facing notes on a receipt — was_shipped/was_paid flip plus internal notes.","parameters":{"type":"object","properties":{"shop_id":{"type":"integer"},"receipt_id":{"type":"integer"},"was_shipped":{"type":"boolean"},"was_paid":{"type":"boolean"}},"required":["shop_id","receipt_id"]},"requiredScopes":["transactions_w"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"receipts.create_shipment","description":"Mark a receipt as shipped and (optionally) attach tracking. Etsy notifies the buyer when send_bcc is true.","parameters":{"type":"object","properties":{"shop_id":{"type":"integer"},"receipt_id":{"type":"integer"},"tracking_code":{"type":"string"},"carrier_name":{"type":"string","description":"Etsy carrier slug, e.g. \"usps\", \"fedex\", \"ups\", \"dhl\"."},"send_bcc":{"type":"boolean","description":"Send the shipment notification email to the seller as well."},"note_to_buyer":{"type":"string"}},"required":["shop_id","receipt_id"]},"requiredScopes":["transactions_w"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.search","description":"List individual transactions (line items) for a shop, optionally filtered to a receipt.","parameters":{"type":"object","properties":{"shop_id":{"type":"integer"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}},"required":["shop_id"]},"requiredScopes":["transactions_r"],"class":"read"},{"name":"transactions.get","description":"Read a single transaction (line item) by transaction_id.","parameters":{"type":"object","properties":{"shop_id":{"type":"integer"},"transaction_id":{"type":"integer"}},"required":["shop_id","transaction_id"]},"requiredScopes":["transactions_r"],"class":"read"}]},{"kind":"everhour","displayName":"Everhour","description":"Time tracking software that integrates into project management tools to track billable hours, set budgets, and monitor spending.","auth":{"kind":"api-key","hint":"Everhour API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tasks.create","description":"Create a task in Everhour.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"The ID of the project to create the task in."},"name":{"type":"string","description":"The name of the task."}},"required":["projectId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"timers.start","description":"Start a timer for a task in Everhour.","parameters":{"type":"object","properties":{"taskId":{"type":"string","description":"The ID of the task to start the timer for."}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"timers.stop","description":"Stop the timer for a task in Everhour.","parameters":{"type":"object","properties":{"taskId":{"type":"string","description":"The ID of the task to stop the timer for."}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"time.create","description":"Log a time entry against an Everhour task.","parameters":{"type":"object","properties":{"taskId":{"type":"string","description":"The ID of the task the time entry attaches to."},"time":{"type":"integer","description":"Duration in seconds."},"date":{"type":"string","description":"Date the entry is logged for (YYYY-MM-DD)."},"user":{"type":"integer","description":"Optional user id; defaults to the authorised account."},"comment":{"type":"string","description":"Optional free-form comment for the entry."}},"required":["taskId","time","date"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"time.update","description":"Update an existing Everhour time entry.","parameters":{"type":"object","properties":{"taskId":{"type":"string","description":"The ID of the task the entry belongs to."},"timeId":{"type":"string","description":"The ID of the time entry to update."},"time":{"type":"integer","description":"Updated duration in seconds."},"date":{"type":"string","description":"Updated date (YYYY-MM-DD)."},"comment":{"type":"string","description":"Updated comment."}},"required":["taskId","timeId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"time.delete","description":"Delete an Everhour time entry.","parameters":{"type":"object","properties":{"taskId":{"type":"string","description":"The ID of the task the entry belongs to."},"timeId":{"type":"string","description":"The ID of the time entry to delete."}},"required":["taskId","timeId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"exa","displayName":"Exa","description":"AI-powered search and content extraction from the web.","auth":{"kind":"api-key","hint":"Exa API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"search.perform","description":"Perform a semantic or keyword search.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Search query"},"numResults":{"type":"integer","description":"Number of results to return (max 100)"},"includeDomains":{"type":"array","items":{"type":"string"},"description":"List of domains to include"},"excludeDomains":{"type":"array","items":{"type":"string"},"description":"List of domains to exclude"},"startCrawlDate":{"type":"string","description":"Start crawl date (ISO format)"},"endCrawlDate":{"type":"string","description":"End crawl date (ISO format)"},"startPublishedDate":{"type":"string","description":"Start published date (ISO format)"},"endPublishedDate":{"type":"string","description":"End published date (ISO format)"},"includeText":{"type":"string","description":"Strings that must be present in webpage text"},"excludeText":{"type":"string","description":"Strings that must not be present in webpage text"},"type":{"type":"string","enum":["keyword","neural"],"description":"Type of search to perform"},"category":{"type":"string","description":"Category of data to focus the search on"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.similar","description":"Find semantically similar links based on a URL.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Reference URL to find semantically similar links"},"numResults":{"type":"integer","description":"Number of results to return (max 100)"},"includeDomains":{"type":"array","items":{"type":"string"},"description":"List of domains to include"},"excludeDomains":{"type":"array","items":{"type":"string"},"description":"List of domains to exclude"},"startCrawlDate":{"type":"string","description":"Start crawl date (ISO format)"},"endCrawlDate":{"type":"string","description":"End crawl date (ISO format)"},"startPublishedDate":{"type":"string","description":"Start published date (ISO format)"},"endPublishedDate":{"type":"string","description":"End published date (ISO format)"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contents.get","description":"Get the full text contents from URLs.","parameters":{"type":"object","properties":{"urls":{"type":"array","items":{"type":"string"},"description":"Array of URLs to crawl"},"livecrawl":{"type":"string","enum":["always","never","fallback"],"description":"Livecrawl option"},"livecrawlTimeout":{"type":"integer","description":"Timeout for livecrawling in milliseconds"},"subpages":{"type":"integer","description":"Number of subpages to crawl"},"subpageTarget":{"type":"string","description":"Keyword(s) to find specific subpages"}},"required":["urls"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"answer.generate","description":"Generate a summarized answer from the web based on a query.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Question to answer from the web"},"model":{"type":"string","enum":["claude-3-5-sonnet","gpt-4o"],"description":"Model to use for the answer"},"numResults":{"type":"integer","description":"Number of web results to base the answer on"},"includeDomains":{"type":"array","items":{"type":"string"},"description":"List of domains to include"},"excludeDomains":{"type":"array","items":{"type":"string"},"description":"List of domains to exclude"},"text":{"type":"boolean","description":"If true, includes full text content from search results"}},"required":["query","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"excel-files","displayName":"Excel Files","description":"Read bounded XLSX workbooks and create XLSX files from structured rows.","auth":{"kind":"none"},"defaultConsistencyModel":"advisory","category":"spreadsheet","capabilities":[{"name":"excel.read","class":"read","description":"Read every sheet, or one named sheet, from a base64-encoded XLSX workbook.","parameters":{"type":"object","properties":{"fileBase64":{"type":"string","description":"XLSX workbook content encoded as canonical base64."},"sheet":{"description":"Optional sheet name or one-based sheet number.","oneOf":[{"type":"string","minLength":1},{"type":"integer","minimum":1}]}},"required":["fileBase64"],"additionalProperties":false}},{"name":"excel.create","class":"mutation","description":"Create a single-sheet base64-encoded XLSX workbook from row arrays.","parameters":{"type":"object","properties":{"rows":{"type":"array","minItems":1,"maxItems":10000,"items":{"type":"array","maxItems":256}},"sheetName":{"type":"string","minLength":1,"maxLength":31,"default":"Sheet1"}},"required":["rows"],"additionalProperties":false},"cas":"none","externalEffect":true}]},{"kind":"facebook-leads","displayName":"Facebook Leads","description":"Capture leads from Facebook Lead Ads: list lead-gen forms on managed pages, page through submitted leads, and subscribe a page to the leadgen webhook field.","auth":{"kind":"oauth2","authorizationUrl":"https://www.facebook.com/v19.0/dialog/oauth","tokenUrl":"https://graph.facebook.com/v19.0/oauth/access_token","scopes":["pages_show_list","pages_manage_metadata","leads_retrieval","ads_management","pages_read_engagement"],"clientIdEnv":"FACEBOOK_OAUTH_CLIENT_ID","clientSecretEnv":"FACEBOOK_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"advisory","capabilities":[{"name":"users.me","description":"Return the connected Facebook user (id, name) for the granted access token.","parameters":{"type":"object","properties":{"fields":{"type":"string","description":"Comma-separated Graph field selector (e.g. \"id,name\")."}}},"requiredScopes":["pages_show_list"],"class":"read"},{"name":"pages.list","description":"List Facebook pages the connected user manages. Each entry includes a Page Access Token usable for page-scoped lead-gen actions.","parameters":{"type":"object","properties":{"fields":{"type":"string","description":"Comma-separated Graph field selector. Default returns id,name,access_token,category,tasks."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25},"after":{"type":"string","description":"Cursor-style pagination token."}}},"requiredScopes":["pages_show_list"],"class":"read"},{"name":"forms.list","description":"List lead-gen forms on a page. Requires a Page Access Token passed as access_token (in addition to the user grant bearer).","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"access_token":{"type":"string","description":"Page Access Token for the target page."},"fields":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25},"after":{"type":"string"}},"required":["pageId","access_token"]},"requiredScopes":["leads_retrieval","pages_show_list"],"class":"read"},{"name":"forms.get","description":"Read a single lead-gen form by id.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"access_token":{"type":"string","description":"Page Access Token for the owning page."},"fields":{"type":"string"}},"required":["formId","access_token"]},"requiredScopes":["leads_retrieval"],"class":"read"},{"name":"forms.leads.list","description":"List leads submitted against a form. Returns the field_data array per lead; use `filtering` for created_time windows.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"access_token":{"type":"string","description":"Page Access Token for the owning page."},"fields":{"type":"string"},"filtering":{"type":"string","description":"JSON-encoded filter spec, e.g. [{\"field\":\"time_created\",\"operator\":\"GREATER_THAN\",\"value\":1700000000}]."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25},"after":{"type":"string"}},"required":["formId","access_token"]},"requiredScopes":["leads_retrieval"],"class":"read"},{"name":"leads.get","description":"Read a single lead by leadgen id. The new.lead trigger emits a leadgen_id; this is the canonical hydrate path.","parameters":{"type":"object","properties":{"leadId":{"type":"string"},"access_token":{"type":"string","description":"Page Access Token for the owning page."},"fields":{"type":"string","description":"Comma-separated Graph field selector. Default returns created_time,id,ad_id,form_id,field_data."}},"required":["leadId","access_token"]},"requiredScopes":["leads_retrieval"],"class":"read"},{"name":"page.subscriptions.list","description":"List the webhook field subscriptions currently attached to a page. Used to confirm a page is subscribed to the leadgen field before relying on new.lead.","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"access_token":{"type":"string","description":"Page Access Token for the target page."}},"required":["pageId","access_token"]},"requiredScopes":["pages_manage_metadata"],"class":"read"},{"name":"page.subscriptions.create","description":"Subscribe a page to webhook fields (must include \"leadgen\" for the new.lead trigger). Idempotent on the (pageId, fields) pair.","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"access_token":{"type":"string","description":"Page Access Token for the target page."},"subscribed_fields":{"type":"string","description":"Comma-separated field list, e.g. \"leadgen\"."}},"required":["pageId","access_token","subscribed_fields"]},"requiredScopes":["pages_manage_metadata"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"page.subscriptions.delete","description":"Remove the app webhook subscription on a page. Idempotent on the page id.","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"access_token":{"type":"string","description":"Page Access Token for the target page."}},"required":["pageId","access_token"]},"requiredScopes":["pages_manage_metadata"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"facebook-pages","displayName":"Facebook Pages","description":"Read Facebook pages the connected user manages, post and edit page updates, manage comments, and read basic page insights.","auth":{"kind":"oauth2","authorizationUrl":"https://www.facebook.com/v19.0/dialog/oauth","tokenUrl":"https://graph.facebook.com/v19.0/oauth/access_token","scopes":["pages_show_list","pages_read_engagement","pages_read_user_content","pages_manage_posts","pages_manage_engagement","pages_manage_metadata","read_insights"],"clientIdEnv":"FACEBOOK_OAUTH_CLIENT_ID","clientSecretEnv":"FACEBOOK_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"advisory","capabilities":[{"name":"users.me","description":"Return the connected Facebook user (id, name) for the granted access token.","parameters":{"type":"object","properties":{"fields":{"type":"string","description":"Comma-separated Graph field selector (e.g. \"id,name,email\")."}}},"requiredScopes":["pages_show_list"],"class":"read"},{"name":"pages.list","description":"List Facebook pages the connected user manages. Each entry includes a Page Access Token usable for page-scoped actions.","parameters":{"type":"object","properties":{"fields":{"type":"string","description":"Comma-separated Graph field selector. Default returns id,name,access_token,category,tasks."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25},"after":{"type":"string","description":"Cursor-style pagination token."}}},"requiredScopes":["pages_show_list"],"class":"read"},{"name":"pages.get","description":"Read a single Facebook page by id.","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"fields":{"type":"string","description":"Comma-separated Graph field selector."}},"required":["pageId"]},"requiredScopes":["pages_show_list"],"class":"read"},{"name":"pages.feed.list","description":"List posts on a page feed. Pagination via `limit`, `after`, `before` cursors; time range via `since` / `until` (unix or strtotime).","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"fields":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25},"after":{"type":"string"},"before":{"type":"string"},"since":{"type":"string"},"until":{"type":"string"}},"required":["pageId"]},"requiredScopes":["pages_read_engagement","pages_read_user_content"],"class":"read"},{"name":"pages.published_posts.list","description":"List posts the page itself published (excludes visitor posts). Same pagination as pages.feed.list.","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"fields":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25},"after":{"type":"string"},"before":{"type":"string"},"since":{"type":"string"},"until":{"type":"string"}},"required":["pageId"]},"requiredScopes":["pages_read_engagement"],"class":"read"},{"name":"posts.get","description":"Read a single page post by id.","parameters":{"type":"object","properties":{"postId":{"type":"string","description":"Graph post id, typically `{pageId}_{postId}`."},"fields":{"type":"string"}},"required":["postId"]},"requiredScopes":["pages_read_engagement"],"class":"read"},{"name":"posts.comments.list","description":"List comments on a post. Use `filter=toplevel` (default) or `stream` for nested chronological order.","parameters":{"type":"object","properties":{"postId":{"type":"string"},"fields":{"type":"string"},"filter":{"type":"string","enum":["toplevel","stream"],"default":"toplevel"},"order":{"type":"string","enum":["chronological","reverse_chronological"]},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25},"after":{"type":"string"}},"required":["postId"]},"requiredScopes":["pages_read_user_content"],"class":"read"},{"name":"pages.insights.read","description":"Read page-level insights metrics (e.g. page_impressions, page_engaged_users). Caller passes the metric name plus optional period.","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"metric":{"type":"string","description":"Comma-separated metric names per the Graph Insights reference."},"period":{"type":"string","enum":["day","week","days_28","lifetime"]},"since":{"type":"string"},"until":{"type":"string"}},"required":["pageId","metric"]},"requiredScopes":["read_insights"],"class":"read"},{"name":"pages.feed.create","description":"Publish a post to a page feed. Provide `message` and/or `link`. Append-only — no CAS — caller owns dedupe via idempotencyKey. Requires a Page Access Token bound to the target page.","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"message":{"type":"string"},"link":{"type":"string","description":"URL to attach to the post."},"published":{"type":"boolean","description":"false to create as an unpublished draft (default true)."},"scheduled_publish_time":{"type":"integer","description":"Unix timestamp for scheduled publishing; requires published=false."},"targeting":{"type":"object","description":"Audience targeting spec (locales, countries, etc.)."},"feed_targeting":{"type":"object","description":"News-feed targeting spec."}},"required":["pageId"]},"requiredScopes":["pages_manage_posts"],"class":"mutation","cas":"none","externalEffect":true},{"name":"pages.photos.create","description":"Upload a photo to a page. Provide either `url` (Facebook fetches the asset) or `source` (multipart upload). Append-only — no CAS.","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"url":{"type":"string","description":"Publicly fetchable URL of the photo."},"caption":{"type":"string"},"published":{"type":"boolean"},"scheduled_publish_time":{"type":"integer"},"temporary":{"type":"boolean","description":"Upload as unpublished, returns a media id for later attachment."}},"required":["pageId"]},"requiredScopes":["pages_manage_posts"],"class":"mutation","cas":"none","externalEffect":true},{"name":"posts.update","description":"Edit a previously published page post. Only `message` and a few attachment fields are editable post-publish.","parameters":{"type":"object","properties":{"postId":{"type":"string"},"message":{"type":"string"},"is_published":{"type":"boolean"},"scheduled_publish_time":{"type":"integer"}},"required":["postId"]},"requiredScopes":["pages_manage_posts"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"posts.delete","description":"Delete a page post. Idempotent on the post id.","parameters":{"type":"object","properties":{"postId":{"type":"string"}},"required":["postId"]},"requiredScopes":["pages_manage_posts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.comments.create","description":"Post a comment on a page post (or reply via parent comment id passed as postId). Append-only — caller owns dedupe via idempotencyKey.","parameters":{"type":"object","properties":{"postId":{"type":"string","description":"Post id, or a parent comment id to reply to."},"message":{"type":"string"},"attachment_url":{"type":"string"},"attachment_id":{"type":"string"}},"required":["postId","message"]},"requiredScopes":["pages_manage_engagement"],"class":"mutation","cas":"none","externalEffect":true},{"name":"comments.delete","description":"Delete a comment by id. Idempotent on the comment id.","parameters":{"type":"object","properties":{"commentId":{"type":"string"}},"required":["commentId"]},"requiredScopes":["pages_manage_engagement"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"factors-ai","displayName":"Factors.ai","description":"B2B account intelligence and ABM platform. Retrieve the engagement journey (activity timeline) for a target account by domain.","auth":{"kind":"api-key","hint":"Generate a private API token for the target project in Factors.ai. Sent as the Authorization: Bearer header."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.journey","description":"Get the account journey (chronological engagement events) for a given account domain, optionally filtered by date range, event name, or user.","parameters":{"type":"object","properties":{"account_domain":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"event_name":{"type":"string"},"user_name":{"type":"string"}},"required":["account_domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"fathom","displayName":"Fathom","description":"Read Fathom meeting recordings, AI-generated summaries, transcripts, and team directory entries.","auth":{"kind":"oauth2","authorizationUrl":"https://fathom.video/oauth/authorize","tokenUrl":"https://fathom.video/oauth/token","scopes":["read:meetings","read:recordings","read:team"],"clientIdEnv":"FATHOM_OAUTH_CLIENT_ID","clientSecretEnv":"FATHOM_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"recordings.summary.get","description":"Fetch the AI-generated summary, highlights, and action items for a single recording.","parameters":{"type":"object","properties":{"recordingId":{"type":"string","description":"Recording identifier returned by listMeetings or the new-recording trigger."}},"required":["recordingId"]},"requiredScopes":["read:recordings"],"class":"read"},{"name":"recordings.transcript.get","description":"Fetch the full speaker-attributed transcript for a single recording.","parameters":{"type":"object","properties":{"recordingId":{"type":"string"},"format":{"type":"string","enum":["json","text","vtt"],"description":"Transcript serialisation format. Defaults to json when omitted."}},"required":["recordingId"]},"requiredScopes":["read:recordings"],"class":"read"},{"name":"meetings.list","description":"List meetings the authenticated workspace has access to. Supports paging and a date-range filter.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string","description":"Opaque pagination cursor returned by a previous page."},"startedAfter":{"type":"string","description":"ISO-8601 timestamp; only return meetings that started at or after this instant."},"startedBefore":{"type":"string","description":"ISO-8601 timestamp; only return meetings that started at or before this instant."},"teamId":{"type":"string","description":"Scope the listing to a specific Fathom team."}}},"requiredScopes":["read:meetings"],"class":"read"},{"name":"team.find","description":"Look up a Fathom team by id. Returns the team record plus member count.","parameters":{"type":"object","properties":{"teamId":{"type":"string","description":"Fathom team id."}},"required":["teamId"]},"requiredScopes":["read:team"],"class":"read"},{"name":"team.member.find","description":"Look up a single team member by id. Used to resolve attendees back to the workspace directory.","parameters":{"type":"object","properties":{"teamId":{"type":"string","description":"Team the member belongs to."},"memberId":{"type":"string","description":"Fathom member id."}},"required":["teamId","memberId"]},"requiredScopes":["read:team"],"class":"read"}]},{"kind":"fathom-analytics","displayName":"Fathom Analytics","description":"Privacy-focused website analytics. Query site traffic, manage sites and events, and generate aggregated reports.","auth":{"kind":"api-key","hint":"Fathom Analytics API token (Bearer)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"list.sites","description":"List all sites accessible to the authenticated account.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"starting_after":{"type":"string"},"ending_before":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.site","description":"Retrieve a single Fathom site by its identifier.","parameters":{"type":"object","properties":{"site_id":{"type":"string"}},"required":["site_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"create.event","description":"Create a new event/goal definition on a Fathom site.","parameters":{"type":"object","properties":{"site_id":{"type":"string"},"name":{"type":"string"}},"required":["site_id","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"list.events","description":"List events/goals defined on a Fathom site.","parameters":{"type":"object","properties":{"site_id":{"type":"string"},"limit":{"type":"integer"},"starting_after":{"type":"string"},"ending_before":{"type":"string"}},"required":["site_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.aggregation","description":"Run an aggregation report over pageviews or events with optional grouping, filtering, and sorting.","parameters":{"type":"object","properties":{"entity":{"type":"string","enum":["pageview","event"]},"entity_id":{"type":"string"},"aggregates":{"type":"string"},"date_grouping":{"type":"string"},"field_grouping":{"type":"string"},"date_from":{"type":"string"},"date_to":{"type":"string"},"timezone":{"type":"string"},"sort_by":{"type":"string"},"limit":{"type":"integer"},"filters":{"type":"string"}},"required":["entity","entity_id","aggregates"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"feathery","displayName":"Feathery","description":"Build powerful forms, workflows, and document automation.","auth":{"kind":"api-key","hint":"Feathery API key."},"category":"webhook","defaultConsistencyModel":"authoritative","capabilities":[{"name":"forms.create","description":"Create a new form.","parameters":{"type":"object","properties":{"form_name":{"type":"string"},"template_form_id":{"type":"string"},"enabled":{"type":"boolean"}},"required":["form_name","template_form_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.update","description":"Update an existing form.","parameters":{"type":"object","properties":{"form_id":{"type":"string"},"form_name":{"type":"string"},"enabled":{"type":"boolean"}},"required":["form_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"forms.delete","description":"Delete a form.","parameters":{"type":"object","properties":{"form_id":{"type":"string"}},"required":["form_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"submissions.list","description":"List form submissions.","parameters":{"type":"object","properties":{"form_id":{"type":"string"},"limit":{"type":"integer"},"offset":{"type":"integer"},"completed":{"type":"boolean"}},"required":["form_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"submissions.export","description":"Export submission as PDF.","parameters":{"type":"object","properties":{"submission_id":{"type":"string"}},"required":["submission_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"user.create","description":"Create a Feathery user record. The user id is supplied by the caller and is unique per workspace.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Workspace-unique user id."},"field_values":{"type":"object","description":"Initial field values keyed by Feathery field key."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"user.update","description":"Patch a Feathery user record by id.","parameters":{"type":"object","properties":{"id":{"type":"string"},"field_values":{"type":"object"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"user.delete","description":"Delete a Feathery user record by id. Destructive.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"fellow","displayName":"Fellow.ai","description":"AI Meeting Assistant and Notetaker - get notes and manage meeting recordings.","auth":{"kind":"api-key","hint":"Fellow.ai API key from User Settings -> Developer Tools."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"notes.get","description":"Get a Fellow.ai note by ID.","parameters":{"type":"object","properties":{"noteId":{"type":"string"}},"required":["noteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"notes.list","description":"List Fellow.ai notes.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"recordings.list","description":"List meeting recordings.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"figjam","displayName":"FigJam","description":"Read FigJam boards (stickies, connectors, shapes, sections), project metadata, render board images, and post or delete board comments through the Figma REST API.","auth":{"kind":"oauth2","authorizationUrl":"https://www.figma.com/oauth","tokenUrl":"https://api.figma.com/v1/oauth/token","scopes":["current_user:read","file_comments:read","file_comments:write","file_content:read","file_versions:read","project_metadata:read","webhooks:write"],"clientIdEnv":"FIGMA_OAUTH_CLIENT_ID","clientSecretEnv":"FIGMA_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"me.get","description":"Return the authenticated Figma/FigJam user.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":["current_user:read"],"class":"read"},{"name":"files.get","description":"Fetch a FigJam board by file key (full document tree, including STICKY/CONNECTOR/SHAPE_WITH_TEXT/SECTION nodes).","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"version":{"type":"string"},"ids":{"type":"string","description":"Comma-separated node ids to scope the response."},"depth":{"type":"integer","minimum":1,"maximum":4},"geometry":{"type":"string","enum":["paths"]},"plugin_data":{"type":"string"}},"required":["file_key"]},"requiredScopes":["file_content:read"],"class":"read"},{"name":"files.nodes","description":"Fetch one or more nodes from a FigJam board by id (e.g. a single sticky or a section subtree).","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"ids":{"type":"string","description":"Comma-separated list of node ids."},"version":{"type":"string"},"depth":{"type":"integer","minimum":1,"maximum":4},"geometry":{"type":"string","enum":["paths"]}},"required":["file_key","ids"]},"requiredScopes":["file_content:read"],"class":"read"},{"name":"files.images","description":"Render PNG/JPG/SVG/PDF images for a set of node ids inside a FigJam board (e.g. snapshot a section or a single sticky cluster).","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"ids":{"type":"string","description":"Comma-separated list of node ids to render."},"scale":{"type":"number","minimum":0.01,"maximum":4},"format":{"type":"string","enum":["jpg","png","svg","pdf"]},"svg_outline_text":{"type":"boolean"},"svg_include_id":{"type":"boolean"},"svg_simplify_stroke":{"type":"boolean"},"use_absolute_bounds":{"type":"boolean"},"version":{"type":"string"}},"required":["file_key","ids"]},"requiredScopes":["file_content:read"],"class":"read"},{"name":"files.image_fills","description":"List image fills referenced by a FigJam board (URLs to the source bitmaps placed on the canvas).","parameters":{"type":"object","properties":{"file_key":{"type":"string"}},"required":["file_key"]},"requiredScopes":["file_content:read"],"class":"read"},{"name":"files.versions.list","description":"List historical versions saved for a FigJam board.","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":50},"before":{"type":"integer"},"after":{"type":"integer"}},"required":["file_key"]},"requiredScopes":["file_versions:read"],"class":"read"},{"name":"files.comments.list","description":"List comments posted on a FigJam board (top-level threads and replies).","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"as_md":{"type":"boolean"}},"required":["file_key"]},"requiredScopes":["file_comments:read"],"class":"read"},{"name":"projects.metadata.get","description":"Get metadata for a Figma/FigJam project visible to the authenticated user.","parameters":{"type":"object","properties":{"project_id":{"type":"string"}},"required":["project_id"]},"requiredScopes":["project_metadata:read"],"class":"read"},{"name":"files.comments.create","description":"Post a new comment on a FigJam board (optionally pinned to a node or canvas coordinate, or threaded as a reply).","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"message":{"type":"string"},"comment_id":{"type":"string","description":"Reply to an existing comment by id."},"client_meta":{"type":"object","description":"Either { x, y } canvas coordinates or { node_id, node_offset: { x, y } } to pin to a node."}},"required":["file_key","message"]},"requiredScopes":["file_comments:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.comments.delete","description":"Delete a comment on a FigJam board.","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"comment_id":{"type":"string"}},"required":["file_key","comment_id"]},"requiredScopes":["file_comments:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.comments.reactions.add","description":"Add an emoji reaction to a FigJam board comment.","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"comment_id":{"type":"string"},"emoji":{"type":"string","description":"Emoji shortcode, e.g. :heart:."}},"required":["file_key","comment_id","emoji"]},"requiredScopes":["file_comments:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.create","description":"Register a Figma v2 webhook for a team event stream — FigJam boards emit FILE_UPDATE / FILE_VERSION_UPDATE / FILE_DELETE / FILE_COMMENT alongside Figma files.","parameters":{"type":"object","properties":{"event_type":{"type":"string","enum":["FILE_UPDATE","FILE_VERSION_UPDATE","FILE_DELETE","FILE_COMMENT"]},"team_id":{"type":"string"},"endpoint":{"type":"string","format":"uri"},"passcode":{"type":"string"},"status":{"type":"string","enum":["ACTIVE","PAUSED"]},"description":{"type":"string"}},"required":["event_type","team_id","endpoint","passcode"]},"requiredScopes":["webhooks:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Delete a Figma v2 webhook by id.","parameters":{"type":"object","properties":{"webhook_id":{"type":"string"}},"required":["webhook_id"]},"requiredScopes":["webhooks:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"figma","displayName":"Figma","description":"Read Figma files, components, comments, and project metadata; post comments back into the design source of truth.","auth":{"kind":"oauth2","authorizationUrl":"https://www.figma.com/oauth","tokenUrl":"https://api.figma.com/v1/oauth/token","scopes":["current_user:read","file_comments:read","file_comments:write","file_content:read","file_dev_resources:read","file_versions:read","library_content:read","project_metadata:read","team_library_content:read","webhooks:write"],"clientIdEnv":"FIGMA_OAUTH_CLIENT_ID","clientSecretEnv":"FIGMA_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"me.get","description":"Return the authenticated Figma user.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":["current_user:read"],"class":"read"},{"name":"files.get","description":"Fetch a Figma file by key (full document tree).","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"version":{"type":"string"},"ids":{"type":"string","description":"Comma-separated node ids to scope the response."},"depth":{"type":"integer","minimum":1,"maximum":4},"geometry":{"type":"string","enum":["paths"]},"plugin_data":{"type":"string"},"branch_data":{"type":"boolean"}},"required":["file_key"]},"requiredScopes":["file_content:read"],"class":"read"},{"name":"files.nodes","description":"Fetch one or more nodes from a Figma file by id.","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"ids":{"type":"string","description":"Comma-separated list of node ids."},"version":{"type":"string"},"depth":{"type":"integer","minimum":1,"maximum":4},"geometry":{"type":"string","enum":["paths"]}},"required":["file_key","ids"]},"requiredScopes":["file_content:read"],"class":"read"},{"name":"files.images","description":"Render images for a set of node ids inside a file.","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"ids":{"type":"string","description":"Comma-separated list of node ids to render."},"scale":{"type":"number","minimum":0.01,"maximum":4},"format":{"type":"string","enum":["jpg","png","svg","pdf"]},"svg_outline_text":{"type":"boolean"},"svg_include_id":{"type":"boolean"},"svg_simplify_stroke":{"type":"boolean"},"use_absolute_bounds":{"type":"boolean"},"version":{"type":"string"}},"required":["file_key","ids"]},"requiredScopes":["file_content:read"],"class":"read"},{"name":"files.image_fills","description":"List image fills referenced by a Figma file (URLs to the source bitmaps).","parameters":{"type":"object","properties":{"file_key":{"type":"string"}},"required":["file_key"]},"requiredScopes":["file_content:read"],"class":"read"},{"name":"files.versions.list","description":"List historical versions saved for a Figma file.","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":50},"before":{"type":"integer"},"after":{"type":"integer"}},"required":["file_key"]},"requiredScopes":["file_versions:read"],"class":"read"},{"name":"files.components.list","description":"List the components defined inside a Figma file.","parameters":{"type":"object","properties":{"file_key":{"type":"string"}},"required":["file_key"]},"requiredScopes":["library_content:read"],"class":"read"},{"name":"files.component_sets.list","description":"List the component sets (variant groups) defined inside a Figma file.","parameters":{"type":"object","properties":{"file_key":{"type":"string"}},"required":["file_key"]},"requiredScopes":["library_content:read"],"class":"read"},{"name":"files.styles.list","description":"List the published styles defined inside a Figma file.","parameters":{"type":"object","properties":{"file_key":{"type":"string"}},"required":["file_key"]},"requiredScopes":["library_content:read"],"class":"read"},{"name":"files.dev_resources.list","description":"List dev-mode resource links attached to a Figma file.","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"node_ids":{"type":"string","description":"Comma-separated node ids to filter dev resources."}},"required":["file_key"]},"requiredScopes":["file_dev_resources:read"],"class":"read"},{"name":"files.comments.list","description":"List comments on a Figma file.","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"as_md":{"type":"boolean"}},"required":["file_key"]},"requiredScopes":["file_comments:read"],"class":"read"},{"name":"projects.metadata.get","description":"Get metadata for a Figma project visible to the authenticated user.","parameters":{"type":"object","properties":{"project_id":{"type":"string"}},"required":["project_id"]},"requiredScopes":["project_metadata:read"],"class":"read"},{"name":"teams.components.list","description":"List published components shared across a Figma team library.","parameters":{"type":"object","properties":{"team_id":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":1000},"after":{"type":"integer"},"before":{"type":"integer"}},"required":["team_id"]},"requiredScopes":["team_library_content:read"],"class":"read"},{"name":"teams.styles.list","description":"List published styles shared across a Figma team library.","parameters":{"type":"object","properties":{"team_id":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":1000},"after":{"type":"integer"},"before":{"type":"integer"}},"required":["team_id"]},"requiredScopes":["team_library_content:read"],"class":"read"},{"name":"files.comments.create","description":"Post a new comment on a Figma file (optionally pinned to a node or canvas coordinate).","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"message":{"type":"string"},"comment_id":{"type":"string","description":"Reply to an existing comment by id."},"client_meta":{"type":"object","description":"Either { x, y } canvas coordinates or { node_id, node_offset: { x, y } } to pin to a node."}},"required":["file_key","message"]},"requiredScopes":["file_comments:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.comments.delete","description":"Delete a comment on a Figma file.","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"comment_id":{"type":"string"}},"required":["file_key","comment_id"]},"requiredScopes":["file_comments:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.comments.reactions.add","description":"Add an emoji reaction to a Figma comment.","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"comment_id":{"type":"string"},"emoji":{"type":"string","description":"Emoji shortcode, e.g. :heart:."}},"required":["file_key","comment_id","emoji"]},"requiredScopes":["file_comments:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.create","description":"Register a Figma v2 webhook for a team event stream (FILE_UPDATE, FILE_COMMENT, etc.).","parameters":{"type":"object","properties":{"event_type":{"type":"string","enum":["FILE_UPDATE","FILE_VERSION_UPDATE","FILE_DELETE","LIBRARY_PUBLISH","FILE_COMMENT","DEV_MODE_STATUS_UPDATE"]},"team_id":{"type":"string"},"endpoint":{"type":"string","format":"uri"},"passcode":{"type":"string"},"status":{"type":"string","enum":["ACTIVE","PAUSED"]},"description":{"type":"string"}},"required":["event_type","team_id","endpoint","passcode"]},"requiredScopes":["webhooks:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Delete a Figma v2 webhook by id.","parameters":{"type":"object","properties":{"webhook_id":{"type":"string"}},"required":["webhook_id"]},"requiredScopes":["webhooks:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"fillout-forms","displayName":"Fillout Forms","description":"Read Fillout form metadata and submissions: list forms, fetch a single response, page through submissions with status/date filters, and find a form by title.","auth":{"kind":"api-key","hint":"Fillout API key (Bearer) from Settings > Developer."},"category":"webhook","defaultConsistencyModel":"authoritative","capabilities":[{"name":"forms.list","description":"List every form on the workspace. Used to discover form IDs and titles.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"form.metadata","description":"Get a single form definition (questions, calculations, URL params).","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"find.form.by.title","description":"Find a Fillout form by partial or full title match. Mirrors the activepieces \"Find Form By Title\" action.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"Partial or full form title to search for."}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.form.responses","description":"List submissions for a form. Supports paging (limit/offset), date range, status (finished/in_progress/all), sort order, free-text search, and optional edit-link + preview-response inclusion.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"limit":{"type":"integer","description":"1-150; default 50."},"afterDate":{"type":"string","description":"ISO 8601 lower bound (inclusive)."},"beforeDate":{"type":"string","description":"ISO 8601 upper bound (inclusive)."},"offset":{"type":"integer","description":"Zero-based offset into the result set."},"status":{"type":"string","enum":["finished","in_progress","all"],"description":"Default: finished."},"includeEditLink":{"type":"boolean"},"includePreview":{"type":"boolean"},"sort":{"type":"string","enum":["asc","desc"]},"search":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.single.response","description":"Fetch a single submission by its ID under a given form.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"submissionId":{"type":"string"},"includeEditLink":{"type":"boolean"}},"required":["formId","submissionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"webhooks.create","description":"Register a webhook URL that Fillout will POST to for every new submission to the form. Backs the activepieces \"New Form Response\" trigger.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"url":{"type":"string","description":"HTTPS endpoint Fillout will POST submissions to."}},"required":["formId","url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Remove a previously-registered webhook subscription by its ID.","parameters":{"type":"object","properties":{"webhookId":{"type":"string"}},"required":["webhookId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"submission.create","description":"Create a form submission programmatically. `submissions` is an array of submission envelopes (questions[] + optional urlParameters[] / calculations[] / quiz). Mirrors POST /v1/api/forms/{formId}/submissions.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"submissions":{"type":"array","description":"Array of submission envelopes; each entry holds questions/answers and optional metadata.","items":{"type":"object"}}},"required":["formId","submissions"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"submission.delete","description":"Delete a single submission by id under a given form. Destructive; Fillout does not retain a soft-delete tombstone.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"submissionId":{"type":"string"}},"required":["formId","submissionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"findymail","displayName":"Findymail","description":"Find verified work email addresses by name and company domain, verify deliverability, and discover emails across a domain.","auth":{"kind":"api-key","hint":"API key from your Findymail dashboard. Sent as the Authorization: Bearer header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"email.find","description":"Find a person's verified work email from their full name and company domain. Consumes a credit when an email is found.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Full name of the person."},"domain":{"type":"string","description":"Company domain."}},"required":["name","domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"email.verify","description":"Verify the deliverability of an email address and return the email provider. Consumes a verification credit.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"email.find_by_domain","description":"Find email addresses associated with a company domain. Consumes credits per email returned.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Company domain to search."}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"credits.get","description":"Retrieve the remaining credit balance for the account.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"firebase","displayName":"Firebase","description":"Read and write Cloud Firestore documents via the Firebase REST API.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/datastore","https://www.googleapis.com/auth/firebase"],"clientIdEnv":"FIREBASE_OAUTH_CLIENT_ID","clientSecretEnv":"FIREBASE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent"}},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"documents.list","description":"List documents in a Firestore collection.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"collectionPath":{"type":"string","description":"Collection path under documents/, e.g. \"users\" or \"orders/123/items\"."},"pageSize":{"type":"integer","minimum":1,"maximum":1000},"pageToken":{"type":"string"}},"required":["projectId","collectionPath"]},"requiredScopes":["https://www.googleapis.com/auth/datastore"],"class":"read"},{"name":"documents.get","description":"Read a single Firestore document.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"documentPath":{"type":"string","description":"Document path under documents/, e.g. \"users/abc\"."}},"required":["projectId","documentPath"]},"requiredScopes":["https://www.googleapis.com/auth/datastore"],"class":"read"},{"name":"documents.runQuery","description":"Run a structured Firestore query (StructuredQuery RPC).","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"parent":{"type":"string","description":"Parent path under documents/, \"\" for root."},"structuredQuery":{"type":"object"}},"required":["projectId","structuredQuery"]},"requiredScopes":["https://www.googleapis.com/auth/datastore"],"class":"read"},{"name":"documents.create","description":"Create a Firestore document. `documentId` is optional; omit to let Firestore assign.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"collectionPath":{"type":"string"},"documentId":{"type":"string"},"fields":{"type":"object","description":"Firestore-typed field map, e.g. { name: { stringValue: \"Ada\" } }."}},"required":["projectId","collectionPath","fields"]},"requiredScopes":["https://www.googleapis.com/auth/datastore"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.patch","description":"Update or upsert a Firestore document via PATCH.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"documentPath":{"type":"string"},"fields":{"type":"object"},"updateMaskFieldPaths":{"type":"array","items":{"type":"string"},"description":"Field paths to update; omit to replace the whole document."}},"required":["projectId","documentPath","fields"]},"requiredScopes":["https://www.googleapis.com/auth/datastore"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"documents.delete","description":"Delete a Firestore document.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"documentPath":{"type":"string"}},"required":["projectId","documentPath"]},"requiredScopes":["https://www.googleapis.com/auth/datastore"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"auth.user.create","description":"Create a Firebase Auth user under the project. Body fields map to the Identity Toolkit Account resource (localId, email, password, displayName, phoneNumber, emailVerified, disabled). Idempotent on localId when supplied.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"localId":{"type":"string","description":"Optional caller-chosen uid; Identity Toolkit assigns one if omitted."},"email":{"type":"string"},"password":{"type":"string"},"displayName":{"type":"string"},"phoneNumber":{"type":"string"},"emailVerified":{"type":"boolean"},"disabled":{"type":"boolean"}},"required":["projectId"]},"requiredScopes":["https://www.googleapis.com/auth/firebase"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"auth.user.delete","description":"Delete a Firebase Auth user by localId via the Identity Toolkit accounts:delete RPC. Destructive; downstream Firestore documents are not cascaded.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"localId":{"type":"string","description":"Firebase Auth uid to delete."}},"required":["projectId","localId"]},"requiredScopes":["https://www.googleapis.com/auth/firebase"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"fireberry","displayName":"Fireberry","description":"Create, update, find, and delete Fireberry CRM records via the Fireberry REST API.","auth":{"kind":"api-key","hint":"Fireberry tokenid (sent as the tokenid request header)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.record","description":"Create a record in the specified Fireberry object type.","parameters":{"type":"object","properties":{"objectType":{"type":"string","description":"System name of the Fireberry object (e.g. account, contact, case)."},"data":{"type":"object","description":"Field values keyed by Fireberry system field names."}},"required":["objectType","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.record","description":"Update an existing record by id in the specified Fireberry object type.","parameters":{"type":"object","properties":{"objectType":{"type":"string","description":"System name of the Fireberry object (e.g. account, contact, case)."},"recordId":{"type":"string","description":"Fireberry record id (GUID) of the record to update."},"data":{"type":"object","description":"Field values keyed by Fireberry system field names."}},"required":["objectType","recordId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"delete.record","description":"Delete a record by id from the specified Fireberry object type. Destructive.","parameters":{"type":"object","properties":{"objectType":{"type":"string","description":"System name of the Fireberry object (e.g. account, contact, case)."},"recordId":{"type":"string","description":"Fireberry record id (GUID) of the record to delete."}},"required":["objectType","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"find.record","description":"Search Fireberry records using a query expression.","parameters":{"type":"object","properties":{"objectType":{"type":"string","description":"System name of the Fireberry object (e.g. account, contact, case)."},"query":{"type":"string","description":"Fireberry query expression (e.g. (firstname = 'John'))."},"fields":{"type":"string","description":"Comma separated list of fields to return."},"sortBy":{"type":"string","description":"System field name to sort results by."},"sortType":{"type":"string","description":"Sort direction, asc or desc."},"pageSize":{"type":"integer","description":"Number of records to return (max 50)."},"pageNumber":{"type":"integer","description":"Page number to retrieve (max 10)."}},"required":["objectType"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"firecrawl","displayName":"Firecrawl","description":"Extract structured data from websites using AI with natural language prompts.","auth":{"kind":"api-key","hint":"Firecrawl API key (sent as Bearer token)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"scrape","description":"Scrape a single URL and return its content in the requested formats.","parameters":{"type":"object","properties":{"url":{"type":"string"},"formats":{"type":"array","items":{"type":"string"}},"onlyMainContent":{"type":"boolean"},"timeout":{"type":"integer"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"extract","description":"Extract structured data from one or more URLs using a prompt and JSON schema.","parameters":{"type":"object","properties":{"urls":{"type":"array","items":{"type":"string"}},"prompt":{"type":"string"},"schema":{"type":"object"},"enableWebSearch":{"type":"boolean"}},"required":["urls"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"crawl","description":"Start a crawl job from a base URL, optionally bounded by a page limit and webhook.","parameters":{"type":"object","properties":{"url":{"type":"string"},"limit":{"type":"integer"},"includeSubdomains":{"type":"boolean"},"webhook":{"type":"object"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"crawl.results","description":"Fetch the current status and accumulated pages of a previously started crawl job.","parameters":{"type":"object","properties":{"crawlId":{"type":"string"}},"required":["crawlId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"map","description":"Return a map of URLs reachable from the given base URL.","parameters":{"type":"object","properties":{"url":{"type":"string"},"limit":{"type":"integer"},"includeSubdomains":{"type":"boolean"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"fireflies-ai","displayName":"Fireflies.ai","description":"Meeting assistant that automatically records, transcribes, and analyzes conversations via the Fireflies.ai GraphQL API.","auth":{"kind":"api-key","hint":"Fireflies.ai API key — sent as `Authorization: Bearer ` against https://api.fireflies.ai/graphql."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"meetings.findById","description":"Fetch a single Fireflies transcript by id. Pass `{ variables: { transcriptId } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"transcriptId":{"type":"string","description":"The Fireflies transcript / meeting id."}},"required":["transcriptId"]}},"required":["variables"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"meetings.findRecent","description":"List the most recent Fireflies transcripts. Pass `{ variables: { limit } }` where `limit` is the page size.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":50,"description":"Number of recent transcripts to return."}}}},"required":["variables"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"meetings.findByQuery","description":"Search Fireflies transcripts by title, host email, participant email, or date range. Pass `{ variables: { title?, hostEmail?, participantEmail?, fromDate?, toDate?, limit? } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"title":{"type":"string","description":"Substring match against the meeting title."},"hostEmail":{"type":"string","description":"Filter meetings by host email."},"participantEmail":{"type":"string","description":"Filter meetings by participant email."},"fromDate":{"type":"string","description":"Inclusive lower bound of the meeting date (ISO 8601)."},"toDate":{"type":"string","description":"Inclusive upper bound of the meeting date (ISO 8601)."},"limit":{"type":"integer","minimum":1,"maximum":50}}}},"required":["variables"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"audio.upload","description":"Upload an audio file by URL for Fireflies to transcribe. Pass `{ variables: { input: { url, title?, attendees? } } }`. Fireflies only accepts publicly fetchable URLs (mp3, mp4, wav, m4a, ogg).","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"input":{"type":"object","properties":{"url":{"type":"string","description":"Publicly accessible audio URL Fireflies will fetch."},"title":{"type":"string","description":"Optional title for the transcription."},"attendees":{"type":"array","description":"Optional attendees to associate with the meeting.","items":{"type":"object","properties":{"displayName":{"type":"string"},"email":{"type":"string"},"phoneNumber":{"type":"string"}}}},"webhook":{"type":"string","description":"Optional webhook URL Fireflies will call when transcription completes."},"saveVideo":{"type":"boolean"}},"required":["url"]}},"required":["input"]}},"required":["variables"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transcript.delete","description":"Delete a Fireflies transcript (meeting recording) by id. Pass `{ variables: { transcriptId } }`. Irreversible.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"transcriptId":{"type":"string","description":"The Fireflies transcript id to delete."}},"required":["transcriptId"]}},"required":["variables"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"user.getDetails","description":"Return Fireflies user details. Pass `{ variables: { userId } }` to fetch a specific user, or `{ variables: {} }` for the authenticated viewer.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"userId":{"type":"string","description":"The Fireflies user id; omit to return the authenticated viewer."}}}},"required":["variables"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"flipando","displayName":"Flipando AI","description":"Run configured Flipando AI apps over inputs, poll their async task results, list workspace apps, and scaffold new apps from a description.","auth":{"kind":"api-key","hint":"Flipando workspace API key (Settings → API). Sent as a bearer token on every request."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"apps.list","description":"List every Flipando app the API key has access to in the current workspace, including the inputs each app expects.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"apps.run","description":"Run a configured Flipando app against an input payload. Returns a task handle the caller polls with tasks.get. Each invocation is billed and side-effecting.","parameters":{"type":"object","properties":{"application_id":{"type":"number","description":"Numeric ID of the Flipando app to execute (from apps.list)."},"inputs_data":{"type":"object","description":"Key-value pairs matching the app input schema. Keys must match the variable names declared on the app in the Flipando UI."},"file":{"type":"string","description":"Optional base64-encoded document payload for apps that accept file inputs (PDF, DOCX, image, etc.). Omit for apps with no file input."},"file_description":{"type":"string","description":"Required when `file` is provided. Short caption describing the uploaded document."}},"required":["application_id","inputs_data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"apps.generate","description":"Scaffold a brand-new Flipando app from a high-level description. Creates a workspace-visible app the user can then refine in the UI. Billed and side-effecting.","parameters":{"type":"object","properties":{"inputs_data":{"type":"object","description":"Key-value description of the app the caller wants Flipando to generate — typically { name, description, inputs, output_format }."},"is_new_app_private":{"type":"boolean","description":"When true, the generated app is created as private to the workspace. When false, it is shared with the public Flipando directory."}},"required":["inputs_data","is_new_app_private"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"tasks.cancel","description":"Cancel an in-flight Flipando task (the async handle returned by apps.run or apps.generate). Reaches the task even after the worker has started; idempotent — cancelling an already-completed or already-cancelled task returns the terminal state.","parameters":{"type":"object","properties":{"task_id":{"type":"string","description":"Task ID returned by apps.run or apps.generate."}},"required":["task_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.get","description":"Poll a Flipando task by ID and return its status plus the final output once the underlying app run has finished.","parameters":{"type":"object","properties":{"task_id":{"type":"string","description":"Task ID returned by apps.run or apps.generate."}},"required":["task_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"flow-parser","displayName":"FlowParser","description":"Upload, process, and manage documents programmatically with FlowParser.","auth":{"kind":"api-key","hint":"FlowParser API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"documents.upload","description":"Upload a document for processing.","parameters":{"type":"object","properties":{"filename":{"type":"string"},"mimeType":{"type":"string"},"content":{"type":"string"}},"required":["filename","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.get","description":"Retrieve a parsed document by ID.","parameters":{"type":"object","properties":{"documentId":{"type":"string"}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.list","description":"List all documents.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.delete","description":"Delete a document.","parameters":{"type":"object","properties":{"documentId":{"type":"string"}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"flows.run","description":"Trigger a FlowParser parsing flow against an uploaded document, returning the async run handle. Each invocation is billed and side-effecting; FlowParser dedupes on (flowId, documentId, idempotencyKey).","parameters":{"type":"object","properties":{"flowId":{"type":"string","description":"FlowParser flow id to execute."},"documentId":{"type":"string","description":"Document id (from documents.upload) the flow should parse."}},"required":["flowId","documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"flowise","displayName":"Flowise","description":"Invoke a Flowise chatflow / prediction endpoint on a self-hosted Flowise instance.","auth":{"kind":"api-key","hint":"Flowise API key (sent as Bearer token)."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"prediction.invoke","description":"Run a Flowise chatflow prediction with a question, optional chat history, and optional overrideConfig.","parameters":{"type":"object","properties":{"chatflowId":{"type":"string","description":"Target chatflow id."},"question":{"type":"string","description":"User input / question to run through the chatflow."},"history":{"type":"array","description":"Prior chat turns to seed the prediction with.","items":{"type":"object"}},"overrideConfig":{"type":"object","description":"Per-call overrides forwarded to the chatflow runtime."}},"required":["chatflowId","question"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chatflows.list","description":"List chatflows configured on the Flowise instance.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"chatflows.get","description":"Fetch a single chatflow definition by id.","parameters":{"type":"object","properties":{"chatflowId":{"type":"string"}},"required":["chatflowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"flowlu","displayName":"Flowlu","description":"Manage Flowlu CRM contacts, organizations, opportunities, and tasks in the business management platform.","auth":{"kind":"api-key","hint":"Flowlu API key from Portal Settings → API. The connection must also store the per-account baseUrl (e.g. https://youraccount.flowlu.com/api/v1)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contact.create","description":"Create a contact (individual account) in Flowlu CRM.","parameters":{"type":"object","properties":{"first_name":{"type":"string"},"middle_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"web":{"type":"string"},"description":{"type":"string"},"active":{"type":"integer","enum":[0,1]}},"required":["first_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contact.update","description":"Update an existing contact by id.","parameters":{"type":"object","properties":{"id":{"type":"integer"},"first_name":{"type":"string"},"middle_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"web":{"type":"string"},"description":{"type":"string"},"active":{"type":"integer","enum":[0,1]}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contact.delete","description":"Delete a contact by id.","parameters":{"type":"object","properties":{"id":{"type":"integer"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"organization.create","description":"Create an organization (company account) in Flowlu CRM.","parameters":{"type":"object","properties":{"name":{"type":"string"},"name_legal_full":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"web":{"type":"string"},"description":{"type":"string"},"active":{"type":"integer","enum":[0,1]}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunity.create","description":"Create an opportunity (CRM lead) in Flowlu.","parameters":{"type":"object","properties":{"name":{"type":"string"},"customer_id":{"type":"integer"},"budget":{"type":"number"},"pipeline_id":{"type":"integer"},"pipeline_stage_id":{"type":"integer"},"source_id":{"type":"integer"},"description":{"type":"string"},"responsible_id":{"type":"integer"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunity.update","description":"Update an existing opportunity by id.","parameters":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"customer_id":{"type":"integer"},"budget":{"type":"number"},"pipeline_id":{"type":"integer"},"pipeline_stage_id":{"type":"integer"},"source_id":{"type":"integer"},"description":{"type":"string"},"responsible_id":{"type":"integer"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"opportunity.delete","description":"Delete an opportunity by id.","parameters":{"type":"object","properties":{"id":{"type":"integer"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"task.create","description":"Create a task in Flowlu.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"deadline":{"type":"string"},"priority":{"type":"integer"},"responsible_id":{"type":"integer"},"owner_id":{"type":"integer"},"workflow_id":{"type":"integer"},"workflow_stage_id":{"type":"integer"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"task.update","description":"Update an existing task by id.","parameters":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"description":{"type":"string"},"deadline":{"type":"string"},"priority":{"type":"integer"},"responsible_id":{"type":"integer"},"owner_id":{"type":"integer"},"workflow_id":{"type":"integer"},"workflow_stage_id":{"type":"integer"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"task.delete","description":"Delete a task by id.","parameters":{"type":"object","properties":{"id":{"type":"integer"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"task.get","description":"Read a single task by id.","parameters":{"type":"object","properties":{"id":{"type":"integer"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"folk","displayName":"Folk","description":"Folk CRM: manage companies and people for relationship-driven sales workflows.","auth":{"kind":"api-key","hint":"Folk personal API key (sent as a Bearer token)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.company","description":"Create a company record in Folk.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"The name of the company."},"description":{"type":"string","description":"A short description of the company."},"industry":{"type":"string","description":"The industry the company operates in."},"addresses":{"type":"array","items":{"type":"object"},"description":"Physical addresses for the company. The first address is primary."},"emails":{"type":"array","items":{"type":"object"},"description":"Email addresses for the company. The first email is primary."},"phones":{"type":"array","items":{"type":"object"},"description":"Phone numbers for the company. The first phone is primary."},"urls":{"type":"array","items":{"type":"object"},"description":"Website URLs for the company. The first URL is primary."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.company","description":"Update an existing company record in Folk by id.","parameters":{"type":"object","properties":{"companyId":{"type":"string","description":"Folk company id."},"name":{"type":"string","description":"The name of the company."},"description":{"type":"string","description":"A short description of the company."},"industry":{"type":"string","description":"The industry the company operates in."},"addresses":{"type":"array","items":{"type":"object"}},"emails":{"type":"array","items":{"type":"object"}},"phones":{"type":"array","items":{"type":"object"}},"urls":{"type":"array","items":{"type":"object"}}},"required":["companyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.person","description":"Create a person record in Folk.","parameters":{"type":"object","properties":{"firstName":{"type":"string","description":"The first name of the person."},"lastName":{"type":"string","description":"The last name of the person."},"fullName":{"type":"string","description":"The full name of the person (alternative to first/last)."},"birthday":{"type":"string","description":"The birthday in YYYY-MM-DD format."},"jobTitle":{"type":"string","description":"The job title of the person."},"emails":{"type":"array","items":{"type":"object"}},"phones":{"type":"array","items":{"type":"object"}},"urls":{"type":"array","items":{"type":"object"}},"addresses":{"type":"array","items":{"type":"object"}},"companyNames":{"type":"array","items":{"type":"string"},"description":"The names of companies to associate with the person. The first company is primary."}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.person","description":"Update an existing person record in Folk by id.","parameters":{"type":"object","properties":{"personId":{"type":"string","description":"Folk person id."},"firstName":{"type":"string"},"lastName":{"type":"string"},"fullName":{"type":"string"},"birthday":{"type":"string","description":"YYYY-MM-DD."},"jobTitle":{"type":"string"},"emails":{"type":"array","items":{"type":"object"}},"phones":{"type":"array","items":{"type":"object"}},"urls":{"type":"array","items":{"type":"object"}},"addresses":{"type":"array","items":{"type":"object"}},"companyNames":{"type":"array","items":{"type":"string"}}},"required":["personId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"find.company","description":"Search Folk companies by name or other filters.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Enter company name or email to search for."},"combinator":{"type":"string","description":"The logical operator to combine multiple filters (and, or)."},"nameFilter":{"type":"string","description":"Filter by company name (contains)."},"emailFilter":{"type":"string","description":"Filter by email address (contains)."},"limit":{"type":"integer","description":"The number of items to return (1-100)."},"cursor":{"type":"string","description":"A cursor for pagination. Use nextLink from a previous response."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.company","description":"Read a single Folk company by id.","parameters":{"type":"object","properties":{"companyId":{"type":"string","description":"Folk company id."}},"required":["companyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"find.person","description":"Search Folk people by name, email, or other filters.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Enter person name or email to search for."},"combinator":{"type":"string","description":"The logical operator to combine multiple filters (and, or)."},"nameFilter":{"type":"string","description":"Filter by person name (contains)."},"emailFilter":{"type":"string","description":"Filter by email address (contains)."},"limit":{"type":"integer","description":"The number of items to return (1-100)."},"cursor":{"type":"string","description":"A cursor for pagination. Use nextLink from a previous response."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.person","description":"Read a single Folk person by id.","parameters":{"type":"object","properties":{"personId":{"type":"string","description":"Folk person id."}},"required":["personId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"delete.person","description":"Delete a Folk person record by id. Irreversible; Folk returns 204 on success and 404 if the person was already removed, both treated as a committed terminal state by callers that rely on native idempotency.","parameters":{"type":"object","properties":{"personId":{"type":"string","description":"Folk person id."}},"required":["personId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"foreplay-co","displayName":"Foreplay","description":"Search the Foreplay creative ad library, fetch ad and brand detail, and manage swipe files and Spyder-tracked brands.","auth":{"kind":"api-key","hint":"Foreplay.co API key from Settings → API. Sent in the Authorization header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"discovery.search","description":"Search the global Foreplay Discovery ad library by query, network, niche, language, and other facets.","parameters":{"type":"object","properties":{"query":{"type":"string"},"publisher":{"type":"string"},"niches":{"type":"string"},"languages":{"type":"string"},"formats":{"type":"string"},"startDate":{"type":"string"},"endDate":{"type":"string"},"orderBy":{"type":"string"},"limit":{"type":"integer"},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"ads.get","description":"Fetch the full record for a single ad by its Foreplay ad id.","parameters":{"type":"object","properties":{"adId":{"type":"string"}},"required":["adId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"brands.search","description":"Search brands in the Foreplay Discovery library by name or domain.","parameters":{"type":"object","properties":{"query":{"type":"string"},"limit":{"type":"integer"},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"brands.get","description":"Fetch a single brand record by its Foreplay brand id.","parameters":{"type":"object","properties":{"brandId":{"type":"string"}},"required":["brandId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"brands.ads.list","description":"List ads from a single brand, optionally paged.","parameters":{"type":"object","properties":{"brandId":{"type":"string"},"publisher":{"type":"string"},"limit":{"type":"integer"},"cursor":{"type":"string"}},"required":["brandId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"swipeFiles.list","description":"List the authenticated user's swipe files (boards).","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"swipeFiles.get","description":"Fetch a single swipe file (board) by id.","parameters":{"type":"object","properties":{"swipeFileId":{"type":"string"}},"required":["swipeFileId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"swipeFiles.ads.list","description":"List ads saved inside a given swipe file.","parameters":{"type":"object","properties":{"swipeFileId":{"type":"string"},"limit":{"type":"integer"},"cursor":{"type":"string"}},"required":["swipeFileId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"swipeFiles.create","description":"Create a new swipe file (board).","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"swipeFiles.ads.add","description":"Save an ad into a swipe file.","parameters":{"type":"object","properties":{"swipeFileId":{"type":"string"},"adId":{"type":"string"},"note":{"type":"string"}},"required":["swipeFileId","adId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"swipeFiles.ads.remove","description":"Remove an ad from a swipe file.","parameters":{"type":"object","properties":{"swipeFileId":{"type":"string"},"adId":{"type":"string"}},"required":["swipeFileId","adId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"spyder.brands.list","description":"List the brands the workspace is tracking via Spyder.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"spyder.brands.add","description":"Start tracking a brand in Spyder by Foreplay brand id.","parameters":{"type":"object","properties":{"brandId":{"type":"string"}},"required":["brandId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"spyder.brands.remove","description":"Stop tracking a brand in Spyder.","parameters":{"type":"object","properties":{"brandId":{"type":"string"}},"required":["brandId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"spyder.ads.list","description":"List newly captured ads across all Spyder-tracked brands.","parameters":{"type":"object","properties":{"brandId":{"type":"string"},"startDate":{"type":"string"},"endDate":{"type":"string"},"limit":{"type":"integer"},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"formbricks","displayName":"Formbricks","description":"Read and mutate Formbricks surveys, responses, and contacts on the configured environment.","auth":{"kind":"api-key","hint":"Formbricks environment API key. Configure source metadata.appUrl with your instance origin."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"surveys.list","description":"List surveys in the environment the API key belongs to.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"skip":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"surveys.get","description":"Fetch a single survey by id.","parameters":{"type":"object","properties":{"surveyId":{"type":"string"}},"required":["surveyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"responses.list","description":"List responses, optionally filtered by survey id.","parameters":{"type":"object","properties":{"surveyId":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"skip":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"responses.get","description":"Fetch a single response by id.","parameters":{"type":"object","properties":{"responseId":{"type":"string"}},"required":["responseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.list","description":"List contacts in the environment the API key belongs to.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"skip":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.get","description":"Fetch a single contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create a contact with the supplied attributes payload.","parameters":{"type":"object","properties":{"attributes":{"type":"object"}},"required":["attributes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update a contact identified by id with the supplied attributes payload.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"attributes":{"type":"object"}},"required":["contactId","attributes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.delete","description":"Delete a contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"responses.delete","description":"Delete a survey response by id.","parameters":{"type":"object","properties":{"responseId":{"type":"string"}},"required":["responseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"responses.create","description":"Submit a survey response. The supplied data map keys must match the question ids on the target survey; the optional `finished`, `contactId`, and `language` fields can be folded into `data` by callers that need them.","parameters":{"type":"object","properties":{"surveyId":{"type":"string"},"data":{"type":"object","description":"Map of questionId → response value."}},"required":["surveyId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"surveys.create","description":"Create a survey in the environment the API key belongs to. The `questions` array must follow the Formbricks Management API schema for the chosen question types.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Survey display name."},"type":{"type":"string","description":"Survey type, e.g. \"link\" or \"app\"."},"questions":{"type":"array","items":{"type":"object"},"description":"Ordered question definitions for the survey."}},"required":["name","type","questions"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"formstack","displayName":"Formstack","description":"Create Formstack submissions and look up forms or submissions through the Formstack v2 REST API.","auth":{"kind":"oauth2","authorizationUrl":"https://www.formstack.com/api/v2/oauth2/authorize","tokenUrl":"https://www.formstack.com/api/v2/oauth2/request_token.json","scopes":["read","write"],"clientIdEnv":"FORMSTACK_OAUTH_CLIENT_ID","clientSecretEnv":"FORMSTACK_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"forms.find","description":"List Formstack forms, optionally filtered by a case-insensitive name substring (powers \"find form by name or id\").","parameters":{"type":"object","properties":{"folder":{"type":"string","description":"Folder id to scope the list to, if the workspace organises forms in folders."},"folders":{"type":"boolean","description":"When true, response includes the folder tree alongside forms."},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":["read"],"class":"read"},{"name":"forms.get","description":"Fetch a single Formstack form definition by id, including the field list needed to build a submission payload.","parameters":{"type":"object","properties":{"formId":{"type":"string","description":"Formstack form id."}},"required":["formId"]},"requiredScopes":["read"],"class":"read"},{"name":"submissions.create","description":"Create a new submission against a form. `fields` is keyed by Formstack field id; non-field metadata (read_only, payment_status, etc.) is passed at the top level.","parameters":{"type":"object","properties":{"formId":{"type":"string","description":"Form to submit to."},"fields":{"type":"object","description":"Map of Formstack field id → value (string, number, or field-specific object)."},"timestamp":{"type":"string","description":"Optional ISO-8601 timestamp; defaults to server-now when omitted."},"user_agent":{"type":"string"},"remote_addr":{"type":"string","description":"Originating IP recorded with the submission."},"payment_status":{"type":"string"},"read":{"type":"boolean","description":"Mark the submission read on create."}},"required":["formId","fields"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"submissions.get","description":"Fetch a submission by id with all field values resolved into their human-readable form (powers \"get submission details\").","parameters":{"type":"object","properties":{"submissionId":{"type":"string","description":"Formstack submission id."},"encryption_password":{"type":"string","description":"Required when the form uses field-level encryption — only then are encrypted fields decrypted in the response."}},"required":["submissionId"]},"requiredScopes":["read"],"class":"read"},{"name":"submissions.delete","description":"Delete a Formstack submission by id. Destructive; not idempotent on the same submission id after success.","parameters":{"type":"object","properties":{"submissionId":{"type":"string","description":"Formstack submission id to delete."}},"required":["submissionId"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.create","description":"Create a new Formstack form. `name` is required; `folder` and `language` are optional placement/locale hints. Fields can be added in follow-up calls via the field-management endpoints.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Form display name."},"folder":{"type":"string","description":"Folder id to place the form in."},"language":{"type":"string","description":"ISO 639-1 language code for built-in form copy (defaults to account default)."}},"required":["name"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"submissions.search","description":"Search submissions of a form by an indexed field value (powers \"find submission by field value\"). Returns submissions whose `fieldId` equals `value` within the form.","parameters":{"type":"object","properties":{"formId":{"type":"string","description":"Form id to search within."},"fieldId":{"type":"string","description":"Formstack field id that should equal `value`."},"value":{"type":"string","description":"Value to match against the indexed field — Formstack supports exact match for searchable field types."},"min_time":{"type":"string","description":"Earliest submission timestamp (UTC, \"YYYY-MM-DD HH:MM:SS\")."},"max_time":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100},"sort":{"type":"string","enum":["ASC","DESC"]},"data":{"type":"boolean","description":"When true, response includes full submission `data` blocks (otherwise only ids/timestamps)."},"expand_data":{"type":"boolean"}},"required":["formId","fieldId","value"]},"requiredScopes":["read"],"class":"read"}]},{"kind":"fountain","displayName":"Fountain","description":"Manage Fountain applicants, openings, stages, and interview sessions across the hiring + onboarding workflow.","auth":{"kind":"api-key","hint":"Fountain API key from Profile > Manage API Keys or Settings > Integrations & API Keys. Sent as X-ACCESS-TOKEN."},"category":"calendar","defaultConsistencyModel":"authoritative","capabilities":[{"name":"applicants.list","description":"List applicants with optional filters by funnel (opening), location, stage, labels, phone, and pagination cursor.","parameters":{"type":"object","properties":{"funnel_id":{"type":"string"},"location_id":{"type":"string"},"stage_id":{"type":"string"},"stage":{"type":"string"},"labels":{"type":"string"},"phone":{"type":"string"},"exclude_temporary":{"type":"boolean"},"per_page":{"type":"integer"},"cursor":{"type":"string"},"include_subaccounts":{"type":"boolean"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"applicants.get","description":"Fetch a single applicant by id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"applicants.create","description":"Create a Fountain applicant on an opening (funnel).","parameters":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"phone_number":{"type":"string"},"funnel_id":{"type":"string"},"check_if_applicant_is_duplicate":{"type":"boolean"},"data":{"type":"object"},"secure_data":{"type":"object"}},"required":["name","email","phone_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"applicants.update","description":"Update an existing applicant: custom data, secure data, and rejection reason.","parameters":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"phone_number":{"type":"string"},"data":{"type":"object"},"secure_data":{"type":"object"},"rejection_reason":{"type":"string"},"labels":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"applicants.delete","description":"Delete an applicant by id. Destructive; not idempotent on the same id after success.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"applicants.advance","description":"Advance an applicant to the next stage in their funnel. Optional `stage_id` jumps to a specific stage; omit it to move to the immediate next stage.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Applicant id."},"stage_id":{"type":"string","description":"Optional target stage id; defaults to the next stage in the funnel order."},"skip_automated_actions":{"type":"boolean","description":"When true, suppress any automated emails/SMS/webhooks wired to the destination stage."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"applicants.reject","description":"Reject an applicant. `rejection_reason` is the human-readable reason recorded on the applicant timeline; `send_rejection_email` triggers the funnel-configured rejection notification.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Applicant id."},"rejection_reason":{"type":"string","description":"Rejection reason recorded on the applicant."},"send_rejection_email":{"type":"boolean"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"applicants.interviewSessions","description":"List interview sessions scheduled for an applicant.","parameters":{"type":"object","properties":{"id":{"type":"string"},"per_page":{"type":"integer"},"cursor":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"openings.list","description":"List openings (funnels), with filters for active, private, owner, and hiring/sourcing funnel flags.","parameters":{"type":"object","properties":{"active":{"type":"boolean"},"is_hiring_funnel":{"type":"boolean"},"is_sourcing_funnel":{"type":"boolean"},"is_private":{"type":"boolean"},"owner_id":{"type":"string"},"per_page":{"type":"integer"},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"openings.get","description":"Fetch a single opening (funnel) by id.","parameters":{"type":"object","properties":{"funnel_id":{"type":"string"}},"required":["funnel_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"stages.list","description":"List stages for a given opening (funnel).","parameters":{"type":"object","properties":{"funnel_id":{"type":"string"},"per_page":{"type":"integer"},"cursor":{"type":"string"}},"required":["funnel_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"stages.get","description":"Fetch a single stage on an opening by stage id.","parameters":{"type":"object","properties":{"funnel_id":{"type":"string"},"stage_id":{"type":"string"}},"required":["funnel_id","stage_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"fragment","displayName":"Fragment","description":"Create, read, update, list, and delete tasks in Fragment (api.onfragment.com).","auth":{"kind":"api-key","hint":"Fragment API token from app.onfragment.com/settings/account/developers (sent as Bearer)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tasks.list","description":"List tasks, optionally filtered by status, assignee, and capped by limit.","parameters":{"type":"object","properties":{"status":{"type":"string","description":"Filter tasks by status (e.g. 'open', 'completed', 'cancelled')."},"assignee_uid":{"type":"string","description":"Filter tasks by assignee email or ID."},"limit":{"type":"integer","description":"Maximum number of tasks to return (default 50)."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.get","description":"Fetch a single task by its Fragment task UID.","parameters":{"type":"object","properties":{"task_uid":{"type":"string","description":"Unique identifier of the task."}},"required":["task_uid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.create","description":"Create a new task in Fragment.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"The title of the task."},"url":{"type":"string","description":"A URL associated with the task (e.g., link to a ticket or resource)."},"due_at":{"type":"string","description":"When the task is due (ISO-8601 timestamp)."},"assignee_email":{"type":"string","description":"Email of the person to assign this task to."},"tags":{"type":"array","items":{"type":"string"},"description":"Tags to categorize the task."},"fields":{"type":"object","description":"Additional custom fields for the task."}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update an existing Fragment task by UID.","parameters":{"type":"object","properties":{"task_uid":{"type":"string","description":"Unique identifier of the task to update."},"due_at":{"type":"string","description":"New due date (ISO-8601 timestamp)."},"status":{"type":"string","description":"New status (e.g. 'open', 'completed', 'cancelled')."},"assignee_email":{"type":"string","description":"Email of the person to assign this task to."},"tags":{"type":"array","items":{"type":"string"},"description":"Replacement tag list."},"fields":{"type":"object","description":"Replacement custom-field map (merged on the server)."}},"required":["task_uid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.delete","description":"Delete a Fragment task by UID.","parameters":{"type":"object","properties":{"task_uid":{"type":"string","description":"Unique identifier of the task to delete."}},"required":["task_uid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"frame","displayName":"Frame.io","description":"Navigate Frame.io accounts, teams, and projects; manage assets, comments, and review links on the collaborative video-review platform.","auth":{"kind":"api-key","hint":"Frame.io developer token (https://developer.frame.io). Sent as `Authorization: Bearer `."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"accounts.list","description":"List accounts the authenticated user can access.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"teams.list","description":"List teams within an account.","parameters":{"type":"object","properties":{"accountId":{"type":"string"}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.list","description":"List projects within a team.","parameters":{"type":"object","properties":{"teamId":{"type":"string"}},"required":["teamId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.get","description":"Fetch a single project by id.","parameters":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"assets.list","description":"List child assets within a folder (or project root folder).","parameters":{"type":"object","properties":{"folderId":{"type":"string"},"page":{"type":"integer"},"pageSize":{"type":"integer"}},"required":["folderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"assets.get","description":"Fetch a single asset (file, folder, or version-stack) by id.","parameters":{"type":"object","properties":{"assetId":{"type":"string"}},"required":["assetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"assets.create","description":"Create an asset (folder or file placeholder) under a parent folder. File uploads then PUT to the returned upload_urls.","parameters":{"type":"object","properties":{"parentAssetId":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["file","folder"]},"filetype":{"type":"string"},"filesize":{"type":"integer"},"description":{"type":"string"},"properties":{"type":"object"}},"required":["parentAssetId","name","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assets.update","description":"Update an asset (rename, move, edit description, etc.).","parameters":{"type":"object","properties":{"assetId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"properties":{"type":"object"}},"required":["assetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"assets.delete","description":"Delete an asset by id.","parameters":{"type":"object","properties":{"assetId":{"type":"string"}},"required":["assetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.list","description":"List comments on an asset.","parameters":{"type":"object","properties":{"assetId":{"type":"string"},"page":{"type":"integer"},"pageSize":{"type":"integer"}},"required":["assetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"comments.create","description":"Post a comment on an asset. Use `timestamp` (seconds) or `annotation` payloads for time-coded video review notes.","parameters":{"type":"object","properties":{"assetId":{"type":"string"},"text":{"type":"string"},"timestamp":{"type":"number"},"annotation":{"type":"string"},"pitched":{"type":"boolean"}},"required":["assetId","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.update","description":"Edit a comment by id.","parameters":{"type":"object","properties":{"commentId":{"type":"string"},"text":{"type":"string"},"completed":{"type":"boolean"}},"required":["commentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"reviewLinks.list","description":"List review links for a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reviewLinks.create","description":"Create a shareable review link inside a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"name":{"type":"string"},"password":{"type":"string"},"allowApproval":{"type":"boolean"},"enableDownloading":{"type":"boolean"},"expiresAt":{"type":"string"}},"required":["projectId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"free-agent","displayName":"FreeAgent","description":"Accounting and invoicing software for small businesses — contacts, projects, tasks, invoices, and users.","auth":{"kind":"oauth2","authorizationUrl":"https://api.freeagent.com/v2/approve_app","tokenUrl":"https://api.freeagent.com/v2/token_endpoint","scopes":[],"clientIdEnv":"FREE_AGENT_OAUTH_CLIENT_ID","clientSecretEnv":"FREE_AGENT_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.search","description":"List or search FreeAgent contacts.","parameters":{"type":"object","properties":{"view":{"type":"string","description":"Filter by view (e.g. \"active\", \"clients\", \"suppliers\", \"all\")."},"sort":{"type":"string","description":"Sort field (e.g. \"name\", \"updated_at\", \"-created_at\")."},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.get","description":"Get a single FreeAgent contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create a FreeAgent contact (client or supplier).","parameters":{"type":"object","properties":{"contact":{"type":"object","description":"FreeAgent contact attributes (organisation_name, first_name, last_name, email, address1, town, postcode, country, etc.)."}},"required":["contact"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update fields on an existing FreeAgent contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"contact":{"type":"object"}},"required":["contactId","contact"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.delete","description":"Delete a FreeAgent contact by id. Destructive; not idempotent after success on the same id.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"FreeAgent contact id."}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.search","description":"List or filter FreeAgent projects.","parameters":{"type":"object","properties":{"view":{"type":"string","description":"Filter by view (e.g. \"active\", \"completed\", \"all\")."},"contact":{"type":"string","description":"Restrict to a contact URL."},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.search","description":"List tasks, optionally scoped to a project.","parameters":{"type":"object","properties":{"project":{"type":"string","description":"Project URL to restrict tasks to."},"view":{"type":"string","description":"Task view filter (e.g. \"active\", \"completed\", \"all\")."},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.get","description":"Get a single FreeAgent task by id.","parameters":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.create","description":"Create a task under a FreeAgent project (mirrors the activepieces \"Free Agent Create Task\" action).","parameters":{"type":"object","properties":{"task":{"type":"object","description":"Task attributes (project URL, name, is_billable, billing_rate, billing_period, status, etc.)."}},"required":["task"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update an existing FreeAgent task.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"task":{"type":"object"}},"required":["taskId","task"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"invoices.search","description":"List or filter FreeAgent invoices (used to back the new-invoice polling trigger).","parameters":{"type":"object","properties":{"view":{"type":"string","description":"Invoice view (e.g. \"open\", \"draft\", \"scheduled_to_email\", \"all\")."},"contact":{"type":"string","description":"Contact URL filter."},"project":{"type":"string","description":"Project URL filter."},"updated_since":{"type":"string","description":"ISO-8601 timestamp; returns invoices updated on or after this moment."},"sort":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"invoices.get","description":"Get a single FreeAgent invoice by id.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"invoices.create","description":"Create a FreeAgent invoice. `invoice` accepts the FreeAgent invoice payload (contact URL, dated_on, payment_terms_in_days, invoice_items, etc.).","parameters":{"type":"object","properties":{"invoice":{"type":"object","description":"FreeAgent invoice attributes — `contact` URL is required; `dated_on`, `payment_terms_in_days`, `invoice_items`, `currency`, and `comments` are typical fields."}},"required":["invoice"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.send","description":"Send a FreeAgent invoice to the contact via email. Maps to the `send_email` action on an existing invoice; `email` overrides the contact default recipient list when provided.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string","description":"FreeAgent invoice id to send."},"email":{"type":"object","description":"Email override — accepts `recipient`, `subject`, `body`, `send_me_a_copy` per the FreeAgent send_email schema."}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.search","description":"List FreeAgent users on the company (backs the new-user polling trigger).","parameters":{"type":"object","properties":{"view":{"type":"string","description":"User view filter (e.g. \"all\", \"active\")."},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.get","description":"Get a single FreeAgent user by id.","parameters":{"type":"object","properties":{"userId":{"type":"string"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"freshdesk","displayName":"Freshdesk","description":"Search, read, create, and update Freshdesk support tickets, contacts, and conversations.","auth":{"kind":"oauth2","authorizationUrl":"https://{subdomain}.freshdesk.com/oauth/authorize","tokenUrl":"https://{subdomain}.freshdesk.com/oauth/token","scopes":["freshdesk.api"],"clientIdEnv":"FRESHDESK_OAUTH_CLIENT_ID","clientSecretEnv":"FRESHDESK_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tickets.search","description":"Search Freshdesk tickets using the documented filter query DSL (e.g. \"status:2 AND priority:3\"). Wrap the expression in double quotes per the Freshdesk API.","parameters":{"type":"object","properties":{"query":{"type":"string"},"page":{"type":"integer","minimum":1}},"required":["query"]},"requiredScopes":["freshdesk.api"],"class":"read"},{"name":"tickets.list","description":"List Freshdesk tickets with optional filter (new_and_my_open, watching, spam, deleted) and pagination.","parameters":{"type":"object","properties":{"filter":{"type":"string","enum":["new_and_my_open","watching","spam","deleted"]},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100},"updated_since":{"type":"string"}}},"requiredScopes":["freshdesk.api"],"class":"read"},{"name":"tickets.get","description":"Read a single Freshdesk ticket by id, with optional `include` expansions (conversations, requester, company, stats).","parameters":{"type":"object","properties":{"ticketId":{"type":"string"},"include":{"type":"string"}},"required":["ticketId"]},"requiredScopes":["freshdesk.api"],"class":"read"},{"name":"tickets.create","description":"Create a Freshdesk ticket. Pass the full Freshdesk ticket payload as the top-level args (subject, description, email/requester_id, priority, status, ...).","parameters":{"type":"object","properties":{"subject":{"type":"string"},"description":{"type":"string"},"email":{"type":"string"},"requester_id":{"type":"integer"},"phone":{"type":"string"},"priority":{"type":"integer","minimum":1,"maximum":4},"status":{"type":"integer","minimum":2,"maximum":5},"source":{"type":"integer"},"type":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"cc_emails":{"type":"array","items":{"type":"string"}},"custom_fields":{"type":"object"},"group_id":{"type":"integer"},"responder_id":{"type":"integer"}},"required":["subject","description","status","priority"]},"requiredScopes":["freshdesk.api"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.update","description":"Update a Freshdesk ticket (status, priority, assignee, tags, custom_fields, ...). Pass `ticketId` plus any updatable fields.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"},"subject":{"type":"string"},"priority":{"type":"integer","minimum":1,"maximum":4},"status":{"type":"integer","minimum":2,"maximum":5},"tags":{"type":"array","items":{"type":"string"}},"group_id":{"type":"integer"},"responder_id":{"type":"integer"},"type":{"type":"string"},"custom_fields":{"type":"object"}},"required":["ticketId"]},"requiredScopes":["freshdesk.api"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tickets.reply","description":"Post a public reply on a Freshdesk ticket. Body becomes a customer-visible response on the ticket thread.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"},"body":{"type":"string"},"from_email":{"type":"string"},"user_id":{"type":"integer"},"cc_emails":{"type":"array","items":{"type":"string"}},"bcc_emails":{"type":"array","items":{"type":"string"}},"attachments":{"type":"array","items":{"type":"object"}}},"required":["ticketId","body"]},"requiredScopes":["freshdesk.api"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.note","description":"Add a note (private by default, set `private: false` for public) to a Freshdesk ticket.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"},"body":{"type":"string"},"private":{"type":"boolean"},"incoming":{"type":"boolean"},"user_id":{"type":"integer"},"notify_emails":{"type":"array","items":{"type":"string"}}},"required":["ticketId","body"]},"requiredScopes":["freshdesk.api"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.search","description":"Search Freshdesk contacts using the documented filter query DSL (e.g. \"email:'ada@example.com'\").","parameters":{"type":"object","properties":{"query":{"type":"string"},"page":{"type":"integer","minimum":1}},"required":["query"]},"requiredScopes":["freshdesk.api"],"class":"read"},{"name":"contacts.create","description":"Create a Freshdesk contact. Requires `name` plus at least one of `email`, `phone`, `mobile`, `twitter_id`, or `unique_external_id`.","parameters":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"mobile":{"type":"string"},"twitter_id":{"type":"string"},"unique_external_id":{"type":"string"},"company_id":{"type":"integer"},"address":{"type":"string"},"description":{"type":"string"},"job_title":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"custom_fields":{"type":"object"}},"required":["name"]},"requiredScopes":["freshdesk.api"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"freshsales","displayName":"Freshsales","description":"Search, read, create, and update Freshsales (Freshworks CRM) contacts, accounts, leads, and deals.","auth":{"kind":"api-key","hint":"Freshsales API token from Settings > API Settings. Used as `Authorization: Token token=`."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.create","description":"Create a Freshsales contact. Maps to the activepieces `fresh.sales.create.contact` action. Pass any subset of contact fields (first_name, last_name, email, job_title, work_number, mobile_number, address, city, state, zipcode, country, territory_id, owner_id, subscription_status, medium, campaign_id, keyword, time_zone, facebook, twitter, linkedin, contact_status_id, sales_account_id).","parameters":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"job_title":{"type":"string"},"email":{"type":"string"},"work_number":{"type":"string"},"mobile_number":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zipcode":{"type":"string"},"country":{"type":"string"},"territory_id":{"type":"string"},"owner_id":{"type":"string"},"subscription_status":{"type":"string"},"medium":{"type":"string"},"campaign_id":{"type":"string"},"keyword":{"type":"string"},"time_zone":{"type":"string"},"facebook":{"type":"string"},"twitter":{"type":"string"},"linkedin":{"type":"string"},"contact_status_id":{"type":"string"},"sales_account_id":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.get","description":"Read a single Freshsales contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.update","description":"Update a Freshsales contact. Pass any subset of mutable contact fields plus contactId.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"job_title":{"type":"string"},"email":{"type":"string"},"work_number":{"type":"string"},"mobile_number":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zipcode":{"type":"string"},"country":{"type":"string"},"territory_id":{"type":"string"},"owner_id":{"type":"string"},"subscription_status":{"type":"string"},"medium":{"type":"string"},"campaign_id":{"type":"string"},"keyword":{"type":"string"},"time_zone":{"type":"string"},"facebook":{"type":"string"},"twitter":{"type":"string"},"linkedin":{"type":"string"},"contact_status_id":{"type":"string"},"sales_account_id":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.search","description":"Search Freshsales contacts using the lookup endpoint (typically by email, phone, or mobile_number).","parameters":{"type":"object","properties":{"q":{"type":"string"},"f":{"type":"string","description":"Field to lookup against (email, phone, mobile_number, etc.)."},"entities":{"type":"string","description":"Comma-separated entity types to search; defaults to contact."}},"required":["q","f"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.create","description":"Create a Freshsales sales account.","parameters":{"type":"object","properties":{"name":{"type":"string"},"website":{"type":"string"},"phone":{"type":"string"},"industry_type_id":{"type":"string"},"business_type_id":{"type":"string"},"number_of_employees":{"type":"integer"},"annual_revenue":{"type":"number"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zipcode":{"type":"string"},"country":{"type":"string"},"owner_id":{"type":"string"},"territory_id":{"type":"string"},"parent_sales_account_id":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"accounts.get","description":"Read a single Freshsales sales account by id.","parameters":{"type":"object","properties":{"accountId":{"type":"string"}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.update","description":"Update a Freshsales sales account.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"name":{"type":"string"},"website":{"type":"string"},"phone":{"type":"string"},"industry_type_id":{"type":"string"},"business_type_id":{"type":"string"},"number_of_employees":{"type":"integer"},"annual_revenue":{"type":"number"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zipcode":{"type":"string"},"country":{"type":"string"},"owner_id":{"type":"string"},"territory_id":{"type":"string"}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"leads.create","description":"Create a Freshsales lead.","parameters":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"},"job_title":{"type":"string"},"company":{"type":"string"},"work_number":{"type":"string"},"mobile_number":{"type":"string"},"owner_id":{"type":"string"},"source_id":{"type":"string"},"lead_stage_id":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.get","description":"Read a single Freshsales lead by id.","parameters":{"type":"object","properties":{"leadId":{"type":"string"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"deals.create","description":"Create a Freshsales deal.","parameters":{"type":"object","properties":{"name":{"type":"string"},"amount":{"type":"number"},"base_currency_amount":{"type":"number"},"expected_close":{"type":"string","description":"ISO date."},"closed_date":{"type":"string"},"probability":{"type":"integer"},"deal_stage_id":{"type":"string"},"deal_pipeline_id":{"type":"string"},"owner_id":{"type":"string"},"contacts_added_list":{"type":"array","items":{"type":"string"}},"sales_account_id":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deals.get","description":"Read a single Freshsales deal by id.","parameters":{"type":"object","properties":{"dealId":{"type":"string"}},"required":["dealId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"deals.update","description":"Update a Freshsales deal (stage, amount, expected_close, owner, etc.).","parameters":{"type":"object","properties":{"dealId":{"type":"string"},"name":{"type":"string"},"amount":{"type":"number"},"expected_close":{"type":"string"},"closed_date":{"type":"string"},"probability":{"type":"integer"},"deal_stage_id":{"type":"string"},"deal_pipeline_id":{"type":"string"},"owner_id":{"type":"string"},"sales_account_id":{"type":"string"}},"required":["dealId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"freshservice","displayName":"Freshservice","description":"Create and update Freshservice tickets, requesters, ticket notes, and approval requests.","auth":{"kind":"api-key","hint":"Freshservice API key from Profile Settings, combined with the per-tenant subdomain (e.g. `mycompany`). Sent as HTTP Basic `Authorization: Basic base64(:X)`."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tickets.list","description":"List Freshservice tickets, optionally filtered by predefined filter (new_and_my_open, watching, spam, deleted), requester, or updated_since timestamp.","parameters":{"type":"object","properties":{"filter":{"type":"string","enum":["new_and_my_open","watching","spam","deleted"]},"requester_id":{"type":"integer"},"email":{"type":"string"},"updated_since":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tickets.get","description":"Read a single Freshservice ticket by id with optional `include` expansions (conversations, requester, requested_for, stats, problem, assets, change, related_tickets).","parameters":{"type":"object","properties":{"ticketId":{"type":"string"},"include":{"type":"string"}},"required":["ticketId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"requesters.list","description":"List Freshservice requesters, optionally filtered by email, mobile_phone_number, work_phone_number, or include_agents.","parameters":{"type":"object","properties":{"email":{"type":"string"},"mobile_phone_number":{"type":"string"},"work_phone_number":{"type":"string"},"include_agents":{"type":"boolean"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tickets.create","description":"Create a Freshservice ticket. Maps to the activepieces `createTicket` action. Requires `subject`, `description`, and a requester identifier (email, requester_id, phone, or twitter_id). Optional fields drive triage (type, status, priority, category, sub_category, tags, custom_fields).","parameters":{"type":"object","properties":{"subject":{"type":"string"},"description":{"type":"string"},"email":{"type":"string"},"requester_id":{"type":"integer"},"phone":{"type":"string"},"name":{"type":"string"},"status":{"type":"integer","minimum":2,"maximum":5},"priority":{"type":"integer","minimum":1,"maximum":4},"source":{"type":"integer"},"type":{"type":"string"},"category":{"type":"string"},"sub_category":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"cc_emails":{"type":"array","items":{"type":"string"}},"custom_fields":{"type":"object"},"group_id":{"type":"integer"},"responder_id":{"type":"integer"},"department_id":{"type":"integer"},"urgency":{"type":"integer","minimum":1,"maximum":3},"impact":{"type":"integer","minimum":1,"maximum":3}},"required":["subject","description"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.update","description":"Update fields on an existing Freshservice ticket — subject/description/status/priority/assignment/tags/custom_fields. PUT semantics: only supplied fields are changed.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"},"subject":{"type":"string"},"description":{"type":"string"},"status":{"type":"integer","minimum":2,"maximum":5},"priority":{"type":"integer","minimum":1,"maximum":4},"source":{"type":"integer"},"type":{"type":"string"},"category":{"type":"string"},"sub_category":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"custom_fields":{"type":"object"},"group_id":{"type":"integer"},"responder_id":{"type":"integer"},"department_id":{"type":"integer"},"urgency":{"type":"integer","minimum":1,"maximum":3},"impact":{"type":"integer","minimum":1,"maximum":3}},"required":["ticketId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.delete","description":"Move a Freshservice ticket to the trash. Destructive; subsequent reads of the same ticket id return 404.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"}},"required":["ticketId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.close","description":"Close a resolved Freshservice ticket. Implemented as a status update to 5 (Closed) on the underlying ticket record; pair with `tickets.note` to record a closure comment.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"}},"required":["ticketId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.note","description":"Add a note to a Freshservice ticket. Maps to the activepieces `addNoteToTicket` action. Set `private: true` to make the note agent-only; otherwise the requester can see it. Body supports HTML.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"},"body":{"type":"string"},"private":{"type":"boolean"},"incoming":{"type":"boolean"},"user_id":{"type":"integer"},"notify_emails":{"type":"array","items":{"type":"string"}}},"required":["ticketId","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"requesters.create","description":"Create a Freshservice requester. Maps to the activepieces `createRequester` action. Requires `first_name` and `primary_email`. Optional contact, job, and custom fields are passed through.","parameters":{"type":"object","properties":{"first_name":{"type":"string"},"primary_email":{"type":"string"},"last_name":{"type":"string"},"job_title":{"type":"string"},"phone":{"type":"string"},"mobile_phone_number":{"type":"string"},"work_phone_number":{"type":"string"},"department_ids":{"type":"array","items":{"type":"integer"}},"location_id":{"type":"integer"},"time_zone":{"type":"string"},"language":{"type":"string"},"background_information":{"type":"string"},"address":{"type":"string"},"secondary_emails":{"type":"array","items":{"type":"string"}},"custom_fields":{"type":"object"}},"required":["first_name","primary_email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.requestApproval","description":"Request approval for a Freshservice ticket. Maps to the activepieces `requestTicketApproval` action. `approval_type` selects how multiple approvers are resolved (e.g. `anyone` / `everyone`).","parameters":{"type":"object","properties":{"ticketId":{"type":"string"},"approver_ids":{"type":"array","items":{"type":"integer"}},"approval_type":{"type":"string"},"email_content":{"type":"string"}},"required":["ticketId","approver_ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"front","displayName":"Front","description":"Search Front shared-inbox conversations, reply on behalf of a teammate, and triage contacts.","auth":{"kind":"oauth2","authorizationUrl":"https://app.frontapp.com/oauth/authorize","tokenUrl":"https://app.frontapp.com/oauth/token","scopes":["shared_resources","private_resources"],"clientIdEnv":"FRONT_OAUTH_CLIENT_ID","clientSecretEnv":"FRONT_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"conversations.search","description":"Search conversations in shared inboxes using Front query syntax.","parameters":{"type":"object","properties":{"q":{"type":"string","description":"Front search query, e.g. \"is:open tag:billing\"."},"limit":{"type":"integer","minimum":1,"maximum":100},"page_token":{"type":"string"}},"required":["q"]},"requiredScopes":["shared_resources"],"class":"read"},{"name":"conversations.get","description":"Read a single conversation including its current assignee, status, and tags.","parameters":{"type":"object","properties":{"conversation_id":{"type":"string"}},"required":["conversation_id"]},"requiredScopes":["shared_resources"],"class":"read"},{"name":"conversations.list_messages","description":"List messages on a conversation in chronological order.","parameters":{"type":"object","properties":{"conversation_id":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"page_token":{"type":"string"}},"required":["conversation_id"]},"requiredScopes":["shared_resources"],"class":"read"},{"name":"conversations.reply","description":"Reply to a conversation by sending an outbound message on the conversation thread.","parameters":{"type":"object","properties":{"conversation_id":{"type":"string"},"author_id":{"type":"string","description":"Front teammate id sending the reply."},"body":{"type":"string"},"text":{"type":"string"},"subject":{"type":"string"},"to":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"options":{"type":"object"}},"required":["conversation_id","body"]},"requiredScopes":["shared_resources"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.add_comment","description":"Add an internal comment to a conversation. Comments are visible to teammates only.","parameters":{"type":"object","properties":{"conversation_id":{"type":"string"},"author_id":{"type":"string"},"body":{"type":"string"}},"required":["conversation_id","author_id","body"]},"requiredScopes":["shared_resources"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.update","description":"Update a conversation. Reassign, archive, restore, set status, or add tags.","parameters":{"type":"object","properties":{"conversation_id":{"type":"string"},"assignee_id":{"type":"string","description":"Teammate id; pass null to unassign."},"status":{"type":"string","enum":["archived","open","deleted","spam"]},"inbox_id":{"type":"string"},"tag_ids":{"type":"array","items":{"type":"string"}}},"required":["conversation_id"]},"requiredScopes":["shared_resources"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"contacts.search","description":"List contacts in the Front account.","parameters":{"type":"object","properties":{"q":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"page_token":{"type":"string"}}},"requiredScopes":["shared_resources"],"class":"read"},{"name":"contacts.create","description":"Create a Front contact with handles, name, and metadata.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"handles":{"type":"array","items":{"type":"object","properties":{"handle":{"type":"string"},"source":{"type":"string","enum":["email","phone","twitter","facebook","intercom","front_chat","custom"]}},"required":["handle","source"]}},"links":{"type":"array","items":{"type":"string"}},"group_names":{"type":"array","items":{"type":"string"}},"custom_fields":{"type":"object"}},"required":["handles"]},"requiredScopes":["shared_resources"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update a Front contact.","parameters":{"type":"object","properties":{"contact_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"custom_fields":{"type":"object"}},"required":["contact_id"]},"requiredScopes":["shared_resources"],"class":"mutation","cas":"etag-if-match","externalEffect":true}]},{"kind":"fullenrich","displayName":"FullEnrich","description":"Waterfall B2B contact enrichment API that finds work emails and phone numbers for a contact from name, company, or LinkedIn URL.","auth":{"kind":"api-key","hint":"API key from the FullEnrich dashboard (app.fullenrich.com/app/api). Sent as the Authorization: Bearer header."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.credits","description":"Return the current credit balance for the account.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contact.enrich.start","description":"Start an async waterfall enrichment for up to 100 contacts; returns an enrichment id and bills per found data point.","parameters":{"type":"object","properties":{"name":{"type":"string"},"data":{"type":"array","items":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"domain":{"type":"string"},"company_name":{"type":"string"},"linkedin_url":{"type":"string"},"enrich_fields":{"type":"array","items":{"type":"string"}}}}},"webhook_url":{"type":"string"}},"required":["name","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"contact.enrich.result","description":"Retrieve the result of a previously started bulk enrichment by its id.","parameters":{"type":"object","properties":{"enrichment_id":{"type":"string"}},"required":["enrichment_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contact.reverse_email.start","description":"Start an async reverse-email lookup to find profiles/identities behind email addresses.","parameters":{"type":"object","properties":{"name":{"type":"string"},"data":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string"}}}},"webhook_url":{"type":"string"}},"required":["name","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false}]},{"kind":"gameball","displayName":"Gameball","description":"Send player events to the Gameball loyalty + gamification platform to trigger rewards, challenges, and behavioral rules.","auth":{"kind":"api-key","hint":"Gameball account API key — see help.gameball.co/en/articles/3467114."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"send.event","description":"Send one or more behavioral events for a player. Each entry in `events` is keyed by event name (as configured in the Gameball dashboard) and triggers any rewards, challenges, or segmentation rules wired to that event.","parameters":{"type":"object","properties":{"playerUniqueId":{"type":"string","description":"Stable customer identifier used to attribute the event to a player."},"events":{"type":"object","description":"Map of event name to event metadata object. Example: { \"purchase\": { \"amount\": 50, \"currency\": \"USD\" } }."},"playerAttributes":{"type":"object","description":"Optional player attributes (email, displayName, mobile, custom attrs) updated on the player record alongside the event."}},"required":["playerUniqueId","events"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"player.create","description":"Create or upsert a Gameball player. Idempotent on `playerUniqueId` — first call creates, subsequent calls update player attributes (email, displayName, mobile, gender, dateOfBirth, custom attributes).","parameters":{"type":"object","properties":{"playerUniqueId":{"type":"string","description":"Stable customer identifier; upserts the player record."},"playerAttributes":{"type":"object","description":"Player profile fields — email, displayName, firstName, lastName, mobile, gender, dateOfBirth, custom attributes."},"referrerCode":{"type":"string","description":"Optional referrer code that attributes this player to an existing referrer."}},"required":["playerUniqueId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"action.track","description":"Track a single gamification action for a player. Convenience over `send.event` for emitting one named action with metadata, body, and reward overrides — fires the loyalty rules wired to that action name.","parameters":{"type":"object","properties":{"playerUniqueId":{"type":"string","description":"Stable customer identifier."},"events":{"type":"object","description":"Map of action name to action metadata. Example: { \"review_left\": { \"rating\": 5 } }."},"playerAttributes":{"type":"object","description":"Optional player attribute updates applied alongside the action."}},"required":["playerUniqueId","events"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"reward.redeem","description":"Redeem a reward for a player. `rewardConstraints` selects the reward (rewardId or rewardType + amount); the call debits the appropriate balance and emits a redemption event.","parameters":{"type":"object","properties":{"playerUniqueId":{"type":"string","description":"Stable customer identifier."},"rewardConstraints":{"type":"object","description":"Reward selector — rewardId, rewardType, amount, currency per the Gameball redeem schema."},"transactionId":{"type":"string","description":"Caller-supplied transaction id for idempotency on the redemption record."}},"required":["playerUniqueId","rewardConstraints"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"gamma","displayName":"Gamma","description":"Generate and retrieve AI-powered presentations, documents, webpages, and social media posts.","auth":{"kind":"api-key","hint":"Gamma API key from your workspace settings."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"content.generate","description":"Generate a new Gamma (presentation, document, webpage, or social post) from text and optional configuration.","parameters":{"type":"object","properties":{"inputText":{"type":"string","description":"Text used to generate your gamma (1-750,000 characters)."},"format":{"type":"string","description":"The type of artifact: presentation, document, social, or webpage."},"numCards":{"type":"integer","description":"Number of cards to create (default 10, Pro: 1-50, Ultra: 1-75)."},"textMode":{"type":"string","description":"How to modify inputText: generate, condense, or preserve."},"themeName":{"type":"string","description":"Theme name to apply. Defaults to workspace default."},"cardSplit":{"type":"string","description":"How content is divided into cards: inputTextBreaks or auto."},"additionalInstructions":{"type":"string","description":"Extra specifications for content and layouts (1-500 characters)."},"textOptions":{"type":"object","description":"JSON object for text attributes (amount, tone, audience, language)."},"imageOptions":{"type":"object","description":"JSON object for image attributes (source, model, style)."},"cardOptions":{"type":"object","description":"JSON object for card attributes (dimensions, headerFooter)."},"sharingOptions":{"type":"object","description":"JSON object for sharing attributes (workspaceAccess, externalAccess)."},"exportAs":{"type":"string","description":"File format for export: pptx, pdf, or png."}},"required":["inputText"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"generation.status","description":"Retrieve the status and details of a generation job by ID.","parameters":{"type":"object","properties":{"generationId":{"type":"string","description":"The ID of the generation job."}},"required":["generationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"presentation.delete","description":"Delete a Gamma presentation by ID.","parameters":{"type":"object","properties":{"gammaId":{"type":"string","description":"The ID of the Gamma presentation to delete."}},"required":["gammaId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"presentation.update","description":"Update metadata for an existing Gamma presentation.","parameters":{"type":"object","properties":{"gammaId":{"type":"string","description":"The ID of the Gamma presentation to update."},"title":{"type":"string","description":"New title for the presentation."},"folderId":{"type":"string","description":"Folder to move the presentation into."},"sharingOptions":{"type":"object","description":"JSON object for sharing attributes (workspaceAccess, externalAccess)."}},"required":["gammaId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"folder.create","description":"Create a folder for organizing Gamma presentations.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Folder display name."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"gcloud-pubsub","displayName":"Google Cloud Pub/Sub","description":"Publish and pull Google Cloud Pub/Sub messages and manage topics and subscriptions with a customer-owned service account.","auth":{"kind":"api-key","hint":"Google Cloud service-account key JSON. Enable the Pub/Sub API and grant only the topic, subscription, publisher, or subscriber roles required by approved workflows."},"category":"webhook","defaultConsistencyModel":"advisory","rateLimit":{"requests":600,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"topics.list","class":"read","description":"List topics in the service account project.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer","minimum":1,"maximum":1000},"pageToken":{"type":"string"}}}},{"name":"topics.get","class":"read","description":"Get one topic and its server-side configuration.","parameters":{"type":"object","properties":{"topic":{"type":"string","description":"Topic ID in the service account project."}},"required":["topic"]}},{"name":"topics.create","class":"mutation","description":"Create a topic in the service account project.","parameters":{"type":"object","properties":{"topic":{"type":"string"},"labels":{"type":"object","additionalProperties":{"type":"string"}},"allowedPersistenceRegions":{"type":"array","items":{"type":"string"}},"kmsKeyName":{"type":"string"},"schema":{"type":"string","description":"Full Pub/Sub schema resource name."},"schemaEncoding":{"type":"string","enum":["JSON","BINARY"]}},"required":["topic"]},"cas":"none","externalEffect":true},{"name":"topics.delete","class":"mutation","description":"Delete a topic. Existing subscriptions remain but stop receiving messages.","parameters":{"type":"object","properties":{"topic":{"type":"string"}},"required":["topic"]},"cas":"none","externalEffect":true},{"name":"messages.publish","class":"mutation","description":"Publish up to 1,000 messages to a topic.","parameters":{"type":"object","properties":{"topic":{"type":"string"},"messages":{"type":"array","minItems":1,"maxItems":1000,"description":"Messages with either text (UTF-8) or data (base64), plus optional string attributes and orderingKey."}},"required":["topic","messages"]},"cas":"none","externalEffect":true},{"name":"subscriptions.list","class":"read","description":"List subscriptions in the service account project.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer","minimum":1,"maximum":1000},"pageToken":{"type":"string"}}}},{"name":"subscriptions.get","class":"read","description":"Get one subscription and its delivery configuration.","parameters":{"type":"object","properties":{"subscription":{"type":"string"}},"required":["subscription"]}},{"name":"subscriptions.create","class":"mutation","description":"Create a pull subscription for a topic.","parameters":{"type":"object","properties":{"subscription":{"type":"string"},"topic":{"type":"string"},"ackDeadlineSeconds":{"type":"integer","minimum":10,"maximum":600},"retainAckedMessages":{"type":"boolean"},"messageRetentionDuration":{"type":"string","description":"Protobuf duration such as 604800s."},"expirationTtl":{"type":"string","description":"Subscription expiry TTL such as 2678400s."},"filter":{"type":"string"},"deadLetterTopic":{"type":"string"},"maxDeliveryAttempts":{"type":"integer","minimum":5,"maximum":100},"minimumBackoff":{"type":"string"},"maximumBackoff":{"type":"string"},"enableMessageOrdering":{"type":"boolean"},"enableExactlyOnceDelivery":{"type":"boolean"},"labels":{"type":"object","additionalProperties":{"type":"string"}}},"required":["subscription","topic"]},"cas":"none","externalEffect":true},{"name":"subscriptions.delete","class":"mutation","description":"Delete a subscription and discard its retained messages.","parameters":{"type":"object","properties":{"subscription":{"type":"string"}},"required":["subscription"]},"cas":"none","externalEffect":true},{"name":"messages.pull","class":"mutation","description":"Pull messages and make them temporarily unavailable to other subscribers.","parameters":{"type":"object","properties":{"subscription":{"type":"string"},"maxMessages":{"type":"integer","minimum":1,"maximum":1000}},"required":["subscription","maxMessages"]},"cas":"none","externalEffect":true},{"name":"messages.acknowledge","class":"mutation","description":"Acknowledge delivered messages by ack ID.","parameters":{"type":"object","properties":{"subscription":{"type":"string"},"ackIds":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"string"}}},"required":["subscription","ackIds"]},"cas":"none","externalEffect":true},{"name":"messages.modifyAckDeadline","class":"mutation","description":"Change the acknowledgement deadline for delivered messages.","parameters":{"type":"object","properties":{"subscription":{"type":"string"},"ackIds":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"string"}},"ackDeadlineSeconds":{"type":"integer","minimum":0,"maximum":600}},"required":["subscription","ackIds","ackDeadlineSeconds"]},"cas":"none","externalEffect":true}]},{"kind":"gemini","displayName":"Google Gemini","description":"Google Gemini Generative Language API — text/multimodal generation, embeddings, token counting, file uploads, and context caching.","auth":{"kind":"api-key","hint":"Google AI Studio API key (https://aistudio.google.com/app/apikey). For Vertex AI / OAuth2-billed traffic, use a separate connector."},"category":"other","defaultConsistencyModel":"cache","capabilities":[{"name":"models.list","description":"List models available to the API key.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer","minimum":1,"maximum":1000},"pageToken":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"models.get","description":"Describe a single model (context window, supported methods, version).","parameters":{"type":"object","properties":{"model":{"type":"string","description":"e.g. \"gemini-2.0-flash\" or \"models/gemini-2.0-flash\"."}},"required":["model"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"models.countTokens","description":"Count input tokens for a prompt against a model (cheap; useful for budget gating).","parameters":{"type":"object","properties":{"model":{"type":"string"},"contents":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["user","model"]},"parts":{"type":"array","items":{"type":"object"}}},"required":["parts"]}},"generateContentRequest":{"type":"object"}},"required":["model"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"models.generateContent","description":"Generate content (text/multimodal). Modeled as a mutation because the call has billed external effect even though it does not write to a persistent resource.","parameters":{"type":"object","properties":{"model":{"type":"string"},"contents":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["user","model"]},"parts":{"type":"array","items":{"type":"object"}}},"required":["parts"]}},"systemInstruction":{"type":"object"},"generationConfig":{"type":"object","properties":{"temperature":{"type":"number"},"topP":{"type":"number"},"topK":{"type":"integer"},"candidateCount":{"type":"integer","minimum":1,"maximum":8},"maxOutputTokens":{"type":"integer"},"stopSequences":{"type":"array","items":{"type":"string"}},"responseMimeType":{"type":"string"},"responseSchema":{"type":"object"}}},"safetySettings":{"type":"array","items":{"type":"object"}},"tools":{"type":"array","items":{"type":"object"}},"toolConfig":{"type":"object"},"cachedContent":{"type":"string","description":"Name of a cachedContents resource to reuse a prefix."}},"required":["model","contents"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"models.streamGenerateContent","description":"Streamed generation. Google emits SSE; the declarative REST runtime returns the aggregated response body. Use Gemini directly via WebSocket/SSE for token-by-token streaming.","parameters":{"type":"object","properties":{"model":{"type":"string"},"contents":{"type":"array","items":{"type":"object"}},"systemInstruction":{"type":"object"},"generationConfig":{"type":"object"},"safetySettings":{"type":"array","items":{"type":"object"}},"tools":{"type":"array","items":{"type":"object"}},"toolConfig":{"type":"object"},"cachedContent":{"type":"string"}},"required":["model","contents"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"models.embedContent","description":"Embed a single content payload (billed; modeled as mutation w/ external effect).","parameters":{"type":"object","properties":{"model":{"type":"string","description":"e.g. \"text-embedding-004\" or \"models/text-embedding-004\"."},"content":{"type":"object","properties":{"parts":{"type":"array","items":{"type":"object"}}},"required":["parts"]},"taskType":{"type":"string","enum":["TASK_TYPE_UNSPECIFIED","RETRIEVAL_QUERY","RETRIEVAL_DOCUMENT","SEMANTIC_SIMILARITY","CLASSIFICATION","CLUSTERING","QUESTION_ANSWERING","FACT_VERIFICATION","CODE_RETRIEVAL_QUERY"]},"title":{"type":"string"},"outputDimensionality":{"type":"integer","minimum":1}},"required":["model","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"models.batchEmbedContents","description":"Embed multiple content payloads in a single billed call.","parameters":{"type":"object","properties":{"model":{"type":"string"},"requests":{"type":"array","items":{"type":"object","properties":{"model":{"type":"string"},"content":{"type":"object"},"taskType":{"type":"string"},"title":{"type":"string"},"outputDimensionality":{"type":"integer"}},"required":["model","content"]}}},"required":["model","requests"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"files.list","description":"List media uploaded via the File API (referenced from generateContent by URI).","parameters":{"type":"object","properties":{"pageSize":{"type":"integer","minimum":1,"maximum":100},"pageToken":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.get","description":"Get metadata for an uploaded file by name (e.g. \"files/abc123\").","parameters":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.delete","description":"Delete an uploaded file. Files auto-expire after 48 hours; explicit delete is for early reclaim.","parameters":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cachedContents.list","description":"List cached-content resources owned by the API key.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer","minimum":1,"maximum":1000},"pageToken":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cachedContents.get","description":"Describe a cached-content resource (e.g. \"cachedContents/abc\").","parameters":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cachedContents.create","description":"Create a cached-content resource so a prefix (system instruction, large file) is billed once and reused.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Fully qualified model, e.g. \"models/gemini-1.5-flash-001\"."},"contents":{"type":"array","items":{"type":"object"}},"systemInstruction":{"type":"object"},"tools":{"type":"array","items":{"type":"object"}},"toolConfig":{"type":"object"},"displayName":{"type":"string"},"ttl":{"type":"string","description":"Duration string, e.g. \"3600s\"."},"expireTime":{"type":"string","description":"RFC3339 timestamp; mutually exclusive with ttl."}},"required":["model","contents"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cachedContents.delete","description":"Delete a cached-content resource.","parameters":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"gender-api","displayName":"Gender API","description":"Predict the gender of a person based on their name using Gender-api service.","auth":{"kind":"api-key","hint":"Gender API key from https://gender-api.com. Store the API key in the auth config."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"gender.get.by.first.name","description":"Get gender prediction by first name.","parameters":{"type":"object","properties":{"firstName":{"type":"string","description":"The first name to query"},"countryCode":{"type":"string","description":"ISO 3166-1 alpha-2 country code to improve accuracy (e.g. US, GB, DE)"},"locale":{"type":"string","description":"Browser locale for localization (e.g. en, de, fr)"}},"required":["firstName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"gender.get.by.full.name","description":"Get gender prediction by full name (first and last name).","parameters":{"type":"object","properties":{"fullName":{"type":"string","description":"The full name (first and last name) to query"},"countryCode":{"type":"string","description":"ISO 3166-1 alpha-2 country code to improve accuracy (e.g. US, GB, DE)"},"locale":{"type":"string","description":"Browser locale for localization (e.g. en, de, fr)"}},"required":["fullName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"statistics.get","description":"Get statistics about account usage.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"generatebanners","displayName":"GenerateBanners","description":"Generate custom banners and social media images from templates.","auth":{"kind":"api-key","hint":"GenerateBanners API key."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"templates.render","description":"Render a template to generate a banner or social media image.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"The ID of the template to render"},"fileType":{"type":"string","enum":["jpg","png","webp"],"description":"Output file format"},"variables":{"type":"object","description":"Template variables as key-value pairs"}},"required":["templateId","fileType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"banner.delete","description":"Delete a generated banner asset by ID.","parameters":{"type":"object","properties":{"bannerId":{"type":"string","description":"The ID of the rendered banner asset to delete"}},"required":["bannerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"template.create","description":"Create a banner template.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Template display name"},"width":{"type":"integer","description":"Banner width in pixels"},"height":{"type":"integer","description":"Banner height in pixels"},"layers":{"type":"array","description":"Template layers (text, image, shape, etc.)"}},"required":["name","width","height"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"batch.render","description":"Render multiple banners from a template in a single call.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"The ID of the template to render"},"fileType":{"type":"string","enum":["jpg","png","webp"],"description":"Output file format"},"items":{"type":"array","description":"Array of variable sets — one rendered output per entry","items":{"type":"object"}}},"required":["templateId","fileType","items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"getresponse","displayName":"GetResponse","description":"Email marketing platform for managing contacts, lists (campaigns), and sending newsletters.","auth":{"kind":"api-key","hint":"Generate an API key at app.getresponse.com/api. Sent as the X-Auth-Token header with the 'api-key ' prefix (X-Auth-Token: api-key )."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.list","description":"List or search contacts, optionally filtered by email or campaign (list).","parameters":{"type":"object","properties":{"email":{"type":"string"},"campaignId":{"type":"string"},"page":{"type":"integer"},"perPage":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.list","description":"List campaigns (contact lists). The campaignId returned here is used when adding contacts or sending newsletters.","parameters":{"type":"object","properties":{"name":{"type":"string"},"page":{"type":"integer"},"perPage":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Add (import) a contact to a campaign (list). Only email and campaign id are required.","parameters":{"type":"object","properties":{"email":{"type":"string"},"campaign_id":{"type":"string"},"name":{"type":"string"},"dayOfCycle":{"type":"integer"}},"required":["email","campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"newsletters.create","description":"Create and send a newsletter (broadcast email) to a campaign. Requires subject, fromFieldId, HTML content, and a target campaign.","parameters":{"type":"object","properties":{"subject":{"type":"string"},"fromFieldId":{"type":"string"},"html":{"type":"string"},"campaign_id":{"type":"string"},"name":{"type":"string"}},"required":["subject","fromFieldId","html","campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"ghostcms","displayName":"Ghost CMS","description":"Create or update Ghost members, posts, and look up users via the Ghost Admin API.","auth":{"kind":"api-key","hint":"Ghost Admin API key in the form \":\"; the publication URL is supplied as connection metadata (baseUrl)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"members.create","description":"Create a Ghost member.","parameters":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"},"note":{"type":"string"},"labels":{"type":"array","items":{"type":"string"}}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"members.update","description":"Update a Ghost member by id.","parameters":{"type":"object","properties":{"memberId":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"note":{"type":"string"},"labels":{"type":"array","items":{"type":"string"}}},"required":["memberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"members.find","description":"Search Ghost members by email or NQL filter.","parameters":{"type":"object","properties":{"email":{"type":"string"},"filter":{"type":"string"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"posts.create","description":"Create a Ghost post.","parameters":{"type":"object","properties":{"title":{"type":"string"},"slug":{"type":"string"},"status":{"type":"string","enum":["draft","published","scheduled"]},"publishedAt":{"type":"string"},"html":{"type":"string"},"customExcerpt":{"type":"string"},"featured":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"}}},"required":["title","status","html"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.find","description":"List or search Ghost staff users.","parameters":{"type":"object","properties":{"filter":{"type":"string"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"posts.update","description":"Update a Ghost post by id.","parameters":{"type":"object","properties":{"postId":{"type":"string"},"title":{"type":"string"},"slug":{"type":"string"},"status":{"type":"string","enum":["draft","published","scheduled"]},"publishedAt":{"type":"string"},"html":{"type":"string"},"customExcerpt":{"type":"string"},"featured":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"}}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.delete","description":"Delete a Ghost post by id.","parameters":{"type":"object","properties":{"postId":{"type":"string"}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"members.delete","description":"Delete a Ghost member by id.","parameters":{"type":"object","properties":{"memberId":{"type":"string"}},"required":["memberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"giftbit","displayName":"Giftbit","description":"Send digital gift cards and rewards to recipients via email.","auth":{"kind":"api-key","hint":"Giftbit API key from your merchant account settings."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"rewards.send","description":"Send a digital gift card or reward to one or more recipients via email.","parameters":{"type":"object","properties":{"orderId":{"type":"string","description":"Unique identifier for this order"},"priceInCents":{"type":"integer","description":"Reward value in cents (e.g., 2500 = $25.00)"},"email":{"type":"string","description":"Recipient email address"},"firstName":{"type":"string","description":"Recipient first name"},"lastName":{"type":"string","description":"Recipient last name"},"subject":{"type":"string","description":"Email subject line"},"message":{"type":"string","description":"Email body message"},"giftTemplate":{"type":"string","description":"Gift template ID from Giftbit account"},"expiryDate":{"type":"string","description":"ISO date for reward claim deadline"},"brandCodes":{"type":"array","items":{"type":"string"},"description":"Brand codes to restrict reward to specific merchants"},"region":{"type":"string","description":"Region code for full catalog rewards"},"useFullCatalog":{"type":"boolean","description":"Let recipient choose from all brands in region"},"useTestbed":{"type":"boolean","description":"Send test reward (does not charge)"}},"required":["orderId","priceInCents","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rewards.get","description":"Retrieve details of a sent reward by reward ID.","parameters":{"type":"object","properties":{"rewardId":{"type":"string","description":"Unique reward identifier"}},"required":["rewardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rewards.list","description":"List sent rewards with optional filtering by order ID or status.","parameters":{"type":"object","properties":{"orderId":{"type":"string","description":"Filter by order ID"},"status":{"type":"string","description":"Filter by reward status (e.g., pending, claimed, expired)"},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum results to return"},"offset":{"type":"integer","minimum":0,"description":"Pagination offset"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"brands.list","description":"List available brands for the account and region.","parameters":{"type":"object","properties":{"region":{"type":"string","description":"Region code (e.g., US, CA, UK)"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.create","description":"Create a gift campaign that bundles a reward template, brand selection, and contact list.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for this campaign"},"priceInCents":{"type":"integer","description":"Reward value in cents (e.g., 2500 = $25.00)"},"subject":{"type":"string","description":"Email subject line"},"message":{"type":"string","description":"Email body message"},"giftTemplate":{"type":"string","description":"Gift template ID from Giftbit account"},"contacts":{"type":"array","description":"Recipient contacts as { email, firstName, lastName } objects","items":{"type":"object"}},"brandCodes":{"type":"array","items":{"type":"string"},"description":"Brand codes to restrict campaign to specific merchants"},"expiryDate":{"type":"string","description":"ISO date for reward claim deadline"}},"required":["id","priceInCents"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.send","description":"Send a previously created gift campaign to its recipients.","parameters":{"type":"object","properties":{"campaignId":{"type":"string","description":"Unique campaign identifier created via campaigns.create"}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"giftcard.resend","description":"Resend the claim email for an outstanding gift card.","parameters":{"type":"object","properties":{"giftId":{"type":"string","description":"The unique gift card / reward identifier"}},"required":["giftId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"giftcard.cancel","description":"Cancel an undelivered or unclaimed gift card.","parameters":{"type":"object","properties":{"giftId":{"type":"string","description":"The unique gift card / reward identifier"}},"required":["giftId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"gistly","displayName":"Gistly","description":"Fetch YouTube video transcripts from the Gistly API as timestamped chunks or merged text.","auth":{"kind":"api-key","hint":"Gistly API key from https://api-portal.gist.ly/. Sent as the `x-api-key` header."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"transcripts.get","description":"Fetch the transcript of a YouTube video by URL. When `text` is true the transcript is collapsed into a single merged string instead of timestamped chunks.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"A public YouTube video URL (e.g. https://www.youtube.com/watch?v=...)."},"text":{"type":"boolean","description":"If true, return the transcript as a single merged string instead of timestamped chunks."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"gitea","displayName":"Gitea","description":"Self-hosted Git service for creating and managing repositories, issues, and pull requests.","auth":{"kind":"oauth2","authorizationUrl":"{instanceUrl}/login/oauth/authorize","tokenUrl":"{instanceUrl}/login/oauth/access_token","scopes":["read:user","write:user","read:issue","write:issue","read:repository","write:repository"],"clientIdEnv":"GITEA_OAUTH_CLIENT_ID","clientSecretEnv":"GITEA_OAUTH_CLIENT_SECRET","pkce":"supported","urlTemplateMetadata":{"instanceUrl":{"kind":"base-url","requirePublicHttps":true}}},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"repos.list","description":"List repositories.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"limit":{"type":"integer"}},"required":["owner"]},"requiredScopes":["read:user"],"class":"read"},{"name":"issues.create","description":"Create an issue in a repository.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"title":{"type":"string"},"body":{"type":"string"},"assignee":{"type":"string"},"labels":{"type":"array"}},"required":["owner","repo","title"]},"requiredScopes":["write:issue"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.update","description":"Update an issue in a repository.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"index":{"type":"integer"},"title":{"type":"string"},"body":{"type":"string"},"state":{"type":"string"}},"required":["owner","repo","index"]},"requiredScopes":["write:issue"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"comments.create","description":"Create a comment on an issue or pull request.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"index":{"type":"integer"},"body":{"type":"string"}},"required":["owner","repo","index","body"]},"requiredScopes":["write:issue"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pull-requests.list","description":"List pull requests in a repository.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"state":{"type":"string"},"limit":{"type":"integer"}},"required":["owner","repo"]},"requiredScopes":["read:repository"],"class":"read"},{"name":"pull-requests.create","description":"Create a pull request in a repository.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"title":{"type":"string"},"body":{"type":"string"},"head":{"type":"string"},"base":{"type":"string"}},"required":["owner","repo","title","head","base"]},"requiredScopes":["write:repository"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"branches.list","description":"List branches in a repository.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"}},"required":["owner","repo"]},"requiredScopes":["read:repository"],"class":"read"},{"name":"repos.create","description":"Create a repository owned by the authenticated user.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"private":{"type":"boolean"},"auto_init":{"type":"boolean"},"default_branch":{"type":"string"}},"required":["name"]},"requiredScopes":["write:user"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"repos.delete","description":"Delete a repository.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"}},"required":["owner","repo"]},"requiredScopes":["write:repository"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pull-requests.merge","description":"Merge a pull request.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"index":{"type":"integer"},"Do":{"type":"string","enum":["merge","rebase","rebase-merge","squash"]},"MergeTitleField":{"type":"string"},"MergeMessageField":{"type":"string"}},"required":["owner","repo","index"]},"requiredScopes":["write:repository"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"github","displayName":"GitHub","description":"Search repositories/issues and create or update GitHub issues through a user-scoped token.","auth":{"kind":"api-key","hint":"GitHub fine-grained personal access token or installation token."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"repositories.get","description":"Read repository metadata.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"}},"required":["owner","repo"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"issues.search","description":"Search GitHub issues and pull requests.","parameters":{"type":"object","properties":{"q":{"type":"string"},"per_page":{"type":"integer","minimum":1,"maximum":100}},"required":["q"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.getAuthenticated","description":"Resolve the authenticated user (the token owner). Quest verification anchors author:/owner: filters to this login, so it must be resolved first.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"activity.checkStarred","description":"Check whether the authenticated user has starred a repository. Returns { exists: true } when starred, { exists: false } when not.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"}},"required":["owner","repo"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.checkFollowing","description":"Check whether the authenticated user follows another user. Returns { exists: true } when following, { exists: false } when not.","parameters":{"type":"object","properties":{"target":{"type":"string","description":"Login of the user to check the follow against."}},"required":["target"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"repos.listCommits","description":"List commits on a repository, optionally filtered to a single author login/email. Used to verify a user contributed to the repo.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"author":{"type":"string","description":"Restrict to commits authored by this GitHub login or email."},"per_page":{"type":"integer","minimum":1,"maximum":100}},"required":["owner","repo"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"repos.getReadme","description":"Read a repository's README (returns base64-encoded content). Used to verify README mentions.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"}},"required":["owner","repo"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.code","description":"Search code across GitHub. Used to verify code usage of a symbol or string.","parameters":{"type":"object","properties":{"q":{"type":"string"},"per_page":{"type":"integer","minimum":1,"maximum":100}},"required":["q"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orgs.checkMembership","description":"Check whether a user is a member of an organization. Returns { exists: true } when a member, { exists: false } when not.","parameters":{"type":"object","properties":{"org":{"type":"string"},"user":{"type":"string","description":"Login of the user to check membership for."}},"required":["org","user"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pulls.get","description":"Read a single pull request, including its head/base refs and the repository it targets.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"pull_number":{"type":"integer","description":"The pull request number within the repository."}},"required":["owner","repo","pull_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pulls.list","description":"List pull requests in a repository, newest first by default.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"state":{"type":"string","enum":["open","closed","all"],"description":"Defaults to open."},"sort":{"type":"string","enum":["created","updated","popularity","long-running"]},"direction":{"type":"string","enum":["asc","desc"]},"per_page":{"type":"integer","minimum":1,"maximum":100}},"required":["owner","repo"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pulls.listFiles","description":"List the files a pull request changes, with per-file patches. Page with per_page — a large PR exceeds a single response budget.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"pull_number":{"type":"integer"},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}},"required":["owner","repo","pull_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pulls.listReviews","description":"List the reviews already submitted on a pull request, so a reviewer does not repeat existing findings.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"pull_number":{"type":"integer"},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}},"required":["owner","repo","pull_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pulls.listReviewComments","description":"List the inline review comments on a pull request.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"pull_number":{"type":"integer"},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}},"required":["owner","repo","pull_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"issues.get","description":"Read a single issue by number.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"issue_number":{"type":"integer"}},"required":["owner","repo","issue_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"issues.list","description":"List issues in a repository. GitHub includes pull requests here; filter on the `pull_request` key when that matters.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"state":{"type":"string","enum":["open","closed","all"]},"labels":{"type":"string","description":"Comma-separated label names."},"sort":{"type":"string","enum":["created","updated","comments"]},"direction":{"type":"string","enum":["asc","desc"]},"per_page":{"type":"integer","minimum":1,"maximum":100}},"required":["owner","repo"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"issues.listComments","description":"Read the comment thread on an issue or pull request before replying to it.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"issue_number":{"type":"integer"},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}},"required":["owner","repo","issue_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"repos.listLabels","description":"List the labels a repository defines, so an automation applies one that exists rather than inventing it.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}},"required":["owner","repo"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"repos.listBranches","description":"List a repository's branches. Used to resolve the default branch to diff against.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}},"required":["owner","repo"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"issues.create","description":"Create an issue in a repository.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"title":{"type":"string"},"body":{"type":"string"},"labels":{"type":"array","items":{"type":"string"}}},"required":["owner","repo","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.update","description":"Update an issue by number.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"issue_number":{"type":"integer"},"title":{"type":"string"},"body":{"type":"string"},"state":{"type":"string","enum":["open","closed"]}},"required":["owner","repo","issue_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"pulls.create","description":"Open a pull request from `head` into `base` on the target repository.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"title":{"type":"string"},"head":{"type":"string","description":"Branch (or cross-fork ref like `octocat:feature-x`) containing the changes."},"base":{"type":"string","description":"Branch in the target repo to merge into (e.g. `main`)."},"body":{"type":"string","description":"PR description body (markdown)."},"draft":{"type":"boolean","description":"When true, open the PR as a draft."}},"required":["owner","repo","title","head","base"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pulls.merge","description":"Merge a pull request by number. `merge_method` selects merge | squash | rebase.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"pull_number":{"type":"integer"},"commit_title":{"type":"string","description":"Optional commit title for the merge commit."},"merge_method":{"type":"string","enum":["merge","squash","rebase"],"description":"Merge strategy. Defaults to `merge` on GitHub."}},"required":["owner","repo","pull_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.createComment","description":"Add a comment to an existing issue or pull request.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"issue_number":{"type":"integer"},"body":{"type":"string","description":"Comment body (markdown)."}},"required":["owner","repo","issue_number","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pulls.reviews.create","description":"Submit a review on a pull request: approve, request changes, or comment.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"pull_number":{"type":"integer"},"event":{"type":"string","enum":["APPROVE","REQUEST_CHANGES","COMMENT"],"description":"Review action to submit."},"body":{"type":"string","description":"Optional review body. Required by GitHub when `event` is REQUEST_CHANGES or COMMENT."}},"required":["owner","repo","pull_number","event"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"gitlab","displayName":"GitLab","description":"Search GitLab projects/issues and create or update issues through a personal, project, or group token.","auth":{"kind":"api-key","hint":"GitLab access token with api/read_api scope."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"projects.search","description":"Search projects visible to the token.","parameters":{"type":"object","properties":{"search":{"type":"string"},"per_page":{"type":"integer","minimum":1,"maximum":100}},"required":["search"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"issues.search","description":"Search issues in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"search":{"type":"string"},"per_page":{"type":"integer"}},"required":["projectId","search"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"issues.create","description":"Create a GitLab project issue.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"}},"required":["projectId","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.update","description":"Update a GitLab issue.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"issueIid":{"type":"integer"},"title":{"type":"string"},"description":{"type":"string"},"state_event":{"type":"string"}},"required":["projectId","issueIid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"merge_requests.create","description":"Open a new merge request in a GitLab project.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Project id or URL-encoded path."},"source_branch":{"type":"string","description":"Branch the MR is opened from."},"target_branch":{"type":"string","description":"Branch the MR is opened against."},"title":{"type":"string"},"description":{"type":"string"}},"required":["id","source_branch","target_branch","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"merge_requests.accept","description":"Merge an open merge request (the GitLab \"accept\" endpoint).","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Project id or URL-encoded path."},"merge_request_iid":{"type":"integer","description":"Project-scoped MR IID."},"merge_commit_message":{"type":"string"}},"required":["id","merge_request_iid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"notes.create","description":"Add a note (comment) to a GitLab issue.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Project id or URL-encoded path."},"issue_iid":{"type":"integer","description":"Project-scoped issue IID."},"body":{"type":"string","description":"Comment body (Markdown)."}},"required":["id","issue_iid","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"glide","displayName":"Glide","description":"Manage Glide Big Tables and rows with Glide API.","auth":{"kind":"api-key","hint":"Glide API key."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tables.list","description":"List all Glide Big Tables.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rows.get","description":"Get rows from a Glide table.","parameters":{"type":"object","properties":{"tableId":{"type":"string","description":"The Glide table ID."},"limit":{"type":"integer","description":"Maximum number of rows to return."}},"required":["tableId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rows.add","description":"Add rows to a Glide table.","parameters":{"type":"object","properties":{"tableId":{"type":"string","description":"The Glide table ID."},"rows":{"type":"array","description":"Array of JSON objects matching the table columns."}},"required":["tableId","rows"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rows.update","description":"Update a row in a Glide table.","parameters":{"type":"object","properties":{"tableId":{"type":"string","description":"The Glide table ID."},"rowId":{"type":"string","description":"The Glide row ID to update."},"row":{"type":"object","description":"JSON object containing columns to update."}},"required":["tableId","rowId","row"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"rows.delete","description":"Delete a row from a Glide table.","parameters":{"type":"object","properties":{"tableId":{"type":"string","description":"The Glide table ID."},"rowId":{"type":"string","description":"The Glide row ID to delete."}},"required":["tableId","rowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"gmail","displayName":"Gmail","description":"Read inbox messages by label or query, fetch a single message including MIME bodies and attachment manifests, reply on a thread, and watch a label for new mail (Cloud Pub/Sub push).","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/gmail.readonly","https://www.googleapis.com/auth/gmail.send","https://www.googleapis.com/auth/gmail.modify"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"comms","defaultConsistencyModel":"authoritative","rateLimit":{"requests":250,"windowMs":1000,"scope":"oauth-client"},"capabilities":[{"name":"list_messages","class":"read","description":"List inbox messages. Filter by labelIds (default INBOX) and/or a Gmail query (e.g., 'from:billing@stripe.com newer_than:7d'). Returns headers (from/to/subject/date) not bodies.","requiredScopes":["https://www.googleapis.com/auth/gmail.readonly"],"parameters":{"type":"object","properties":{"labelIds":{"type":"array","items":{"type":"string"},"description":"Default: [\"INBOX\"]"},"query":{"type":"string","description":"Gmail query syntax."},"maxResults":{"type":"integer","minimum":1,"maximum":500,"default":25},"pageToken":{"type":"string"}}}},{"name":"read_message","class":"read","description":"Read a single Gmail message including parsed text and html bodies and a flat manifest of attachments. Bodies are inlined; attachment bytes are not.","requiredScopes":["https://www.googleapis.com/auth/gmail.readonly"],"parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},{"name":"send","class":"mutation","description":"Send a new email to arbitrary recipients (not tied to an existing thread). Body is text/plain unless `html` is provided. Use send_reply for in-thread replies.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/gmail.send"],"parameters":{"type":"object","properties":{"to":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Recipient address(es). String OR array of strings."},"subject":{"type":"string"},"body":{"type":"string","description":"text/plain body (unless html set)"},"cc":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"replyTo":{"type":"string","description":"Optional Reply-To header."},"html":{"type":"boolean","default":false,"description":"When true, send body as text/html instead of text/plain. Gmail does NOT auto-derive a plain alternative — set html only when the body is HTML."}},"required":["to","subject","body"]}},{"name":"send_reply","class":"mutation","description":"Send a reply on a thread. Pulls In-Reply-To/References from the latest message in the thread. Body is text/plain.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/gmail.send","https://www.googleapis.com/auth/gmail.readonly"],"parameters":{"type":"object","properties":{"threadId":{"type":"string"},"body":{"type":"string","description":"text/plain body"},"replyAll":{"type":"boolean","default":false},"cc":{"type":"array","items":{"type":"string"}}},"required":["threadId","body"]}},{"name":"watch_label","class":"mutation","description":"Register a Cloud Pub/Sub topic to receive push notifications when a label changes. Returns the upstream historyId + expiration. Re-issue every 7 days.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/gmail.modify"],"parameters":{"type":"object","properties":{"labelIds":{"type":"array","items":{"type":"string"},"description":"Default: [\"INBOX\"]"},"topicName":{"type":"string","description":"projects//topics/"},"labelFilterAction":{"type":"string","enum":["include","exclude"],"default":"include"}},"required":["topicName"]}}]},{"kind":"gong","displayName":"Gong","description":"Read Gong calls, transcripts, and users, ingest external calls, and assign prospects to Engage flows through the v2 API.","auth":{"kind":"oauth2","authorizationUrl":"https://app.gong.io/oauth2/authorize","tokenUrl":"https://app.gong.io/oauth2/generate-customer-token","scopes":["api:calls:read:basic","api:calls:read:extensive","api:calls:read:transcript","api:calls:create","api:users:read","api:flows:write"],"clientIdEnv":"GONG_OAUTH_CLIENT_ID","clientSecretEnv":"GONG_OAUTH_CLIENT_SECRET","tokenMetadata":{"apiBaseUrlForCustomer":{"field":"api_base_url_for_customer","required":true}}},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.list","description":"List calls in a time window. fromDateTime is required (ISO-8601); paginate with cursor.","parameters":{"type":"object","properties":{"fromDateTime":{"type":"string","description":"ISO-8601 start datetime for calls to retrieve."},"toDateTime":{"type":"string","description":"ISO-8601 end datetime for calls to retrieve."},"workspaceId":{"type":"string","description":"Filter calls by a specific workspace id."},"cursor":{"type":"string","description":"Pagination cursor from a previous response."}},"required":["fromDateTime"]},"requiredScopes":["api:calls:read:basic"],"class":"read"},{"name":"calls.getTranscripts","description":"Retrieve call transcripts. Pass a `filter` object (fromDateTime/toDateTime and/or callIds); paginate with cursor.","parameters":{"type":"object","properties":{"filter":{"type":"object","description":"Filter object, e.g. { fromDateTime, toDateTime, callIds: [\"...\"] }.","additionalProperties":true},"cursor":{"type":"string","description":"Pagination cursor for the next page."}},"required":["filter"]},"requiredScopes":["api:calls:read:transcript"],"class":"read"},{"name":"calls.getExtensive","description":"Retrieve extensive call data. Pass a `filter` object and an optional `contentSelector` controlling which enrichment fields/context to include.","parameters":{"type":"object","properties":{"filter":{"type":"object","description":"Filter object: fromDateTime, toDateTime, callIds, primaryUserIds, or workspaceId.","additionalProperties":true},"contentSelector":{"type":"object","description":"Controls included enrichment data (exposedFields, context objects).","additionalProperties":true},"cursor":{"type":"string","description":"Pagination cursor from a prior response."}},"required":["filter"]},"requiredScopes":["api:calls:read:extensive"],"class":"read"},{"name":"users.list","description":"List Gong users (max 100 per page). Paginate with cursor.","parameters":{"type":"object","properties":{"cursor":{"type":"string","description":"Pagination cursor; omit for the first page."},"includeAvatars":{"type":"boolean","description":"Include avatar image URLs in the response (default false)."}}},"requiredScopes":["api:users:read"],"class":"read"},{"name":"calls.create","description":"Ingest an external call into Gong. Required: clientUniqueId, actualStart (ISO-8601), direction (Inbound/Outbound/Conference/Unknown), parties (array of participant objects).","parameters":{"type":"object","properties":{"clientUniqueId":{"type":"string","description":"Unique identifier for the call in the source system."},"actualStart":{"type":"string","description":"ISO-8601 datetime when the call started."},"direction":{"type":"string","enum":["Inbound","Outbound","Conference","Unknown"],"description":"Call direction."},"title":{"type":"string","description":"Title or subject of the call."},"parties":{"type":"array","description":"Participant objects with emailAddress, name, phoneNumber, speakerId.","items":{"type":"object","additionalProperties":true}},"mediaChannels":{"type":"object","description":"Media channel configuration.","additionalProperties":true},"workspaceId":{"type":"string","description":"Workspace to associate the call with."}},"required":["clientUniqueId","actualStart","direction","parties"]},"requiredScopes":["api:calls:create"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"flows.assignProspects","description":"Assign prospects to a Gong Engage flow. Provide flowId and a prospects array (up to 100).","parameters":{"type":"object","properties":{"flowId":{"type":"string","description":"Id of the Engage flow to assign prospects to."},"prospects":{"type":"array","description":"Prospect objects (up to 100); each with crmProspectId and optional fields.","items":{"type":"object","additionalProperties":true}},"actionSource":{"type":"string","description":"Identifier of the integration making the assignment."}},"required":["flowId","prospects"]},"requiredScopes":["api:flows:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"google-analytics","displayName":"Google Analytics","description":"Run reports, pivot reports, realtime reports, and batch reports against connected GA4 properties. Read-only: GA4 ingest happens through gtag / Measurement Protocol, not the management API.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/analytics.readonly"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"database","defaultConsistencyModel":"cache","capabilities":[{"name":"accountSummaries.list","description":"List GA4 account summaries reachable by the connected identity. Each summary nests its properties so the agent can discover propertyId values without a second round-trip (GET analyticsadmin.googleapis.com/v1beta/accountSummaries).","parameters":{"type":"object","properties":{"pageSize":{"type":"integer","minimum":1,"maximum":200,"description":"Max account summaries per page; server caps at 200."},"pageToken":{"type":"string","description":"Continuation token returned by a prior call."}}},"requiredScopes":["https://www.googleapis.com/auth/analytics.readonly"],"class":"read"},{"name":"properties.get","description":"Fetch GA4 property settings (display name, timezone, currency, industry) by numeric property id (GET analyticsadmin.googleapis.com/v1beta/properties/{propertyId}).","parameters":{"type":"object","properties":{"propertyId":{"type":"string","description":"Numeric GA4 property id, e.g. \"123456789\"."}},"required":["propertyId"]},"requiredScopes":["https://www.googleapis.com/auth/analytics.readonly"],"class":"read"},{"name":"properties.metadata.get","description":"List every dimension and metric available on a GA4 property, including custom dimensions/metrics defined by the customer. Use this before runReport to discover valid dimension/metric names (GET /v1beta/properties/{propertyId}/metadata).","parameters":{"type":"object","properties":{"propertyId":{"type":"string","description":"Numeric GA4 property id."}},"required":["propertyId"]},"requiredScopes":["https://www.googleapis.com/auth/analytics.readonly"],"class":"read"},{"name":"properties.runReport","description":"Run a core report against a GA4 property. Pass dimensions, metrics, dateRanges (e.g. {startDate:\"7daysAgo\",endDate:\"today\"}), optional filters, ordering, and a row limit. Returns the rows, totals, and metadata GA4 emits in the standard runReport response (POST /v1beta/properties/{propertyId}:runReport).","parameters":{"type":"object","properties":{"propertyId":{"type":"string","description":"Numeric GA4 property id."},"dimensions":{"type":"array","description":"Dimension specs, e.g. [{ \"name\": \"country\" }, { \"name\": \"deviceCategory\" }].","items":{"type":"object","properties":{"name":{"type":"string"},"dimensionExpression":{"type":"object","description":"Composite/lower-case/concatenate expression (optional)."}},"required":["name"]}},"metrics":{"type":"array","description":"Metric specs, e.g. [{ \"name\": \"activeUsers\" }, { \"name\": \"sessions\" }].","items":{"type":"object","properties":{"name":{"type":"string"},"expression":{"type":"string","description":"Derived metric expression (optional)."},"invisible":{"type":"boolean"}},"required":["name"]}},"dateRanges":{"type":"array","description":"One or two date ranges; GA4 accepts ISO dates (\"2026-05-01\"), \"today\", \"yesterday\", or \"NdaysAgo\".","items":{"type":"object","properties":{"startDate":{"type":"string"},"endDate":{"type":"string"},"name":{"type":"string","description":"Optional label included in the response row keys when comparing two ranges."}},"required":["startDate","endDate"]}},"dimensionFilter":{"type":"object","description":"GA4 FilterExpression (and/or/not) applied to dimensions."},"metricFilter":{"type":"object","description":"GA4 FilterExpression applied to metrics after aggregation."},"orderBys":{"type":"array","items":{"type":"object"}},"limit":{"type":"integer","minimum":1,"maximum":250000,"description":"Max rows per page; GA4 caps at 250000."},"offset":{"type":"integer","minimum":0},"keepEmptyRows":{"type":"boolean"},"returnPropertyQuota":{"type":"boolean","description":"Include per-property quota consumption in the response — useful for back-pressure decisions."},"currencyCode":{"type":"string","description":"ISO-4217 currency, overrides the property default for monetary metrics."},"cohortSpec":{"type":"object","description":"CohortSpec for cohort analysis (optional)."}},"required":["propertyId","metrics","dateRanges"]},"requiredScopes":["https://www.googleapis.com/auth/analytics.readonly"],"class":"read"},{"name":"properties.batchRunReports","description":"Run up to 5 reports against the same GA4 property in a single request — cheaper than 5 round-trips and counted as fewer quota tokens (POST /v1beta/properties/{propertyId}:batchRunReports).","parameters":{"type":"object","properties":{"propertyId":{"type":"string","description":"Numeric GA4 property id."},"requests":{"type":"array","description":"Up to 5 report requests; each takes the same shape as runReport (dimensions/metrics/dateRanges/etc.).","items":{"type":"object"},"maxItems":5}},"required":["propertyId","requests"]},"requiredScopes":["https://www.googleapis.com/auth/analytics.readonly"],"class":"read"},{"name":"properties.runPivotReport","description":"Run a pivot report — like runReport but with one or more pivot specifications that rotate dimensions into columns (POST /v1beta/properties/{propertyId}:runPivotReport).","parameters":{"type":"object","properties":{"propertyId":{"type":"string","description":"Numeric GA4 property id."},"dimensions":{"type":"array","items":{"type":"object"}},"metrics":{"type":"array","items":{"type":"object"}},"dateRanges":{"type":"array","items":{"type":"object"}},"pivots":{"type":"array","description":"Pivot specifications — each names the dimensions to pivot, an order, a limit, and optional offset.","items":{"type":"object","properties":{"fieldNames":{"type":"array","items":{"type":"string"}},"orderBys":{"type":"array","items":{"type":"object"}},"offset":{"type":"string","description":"String-encoded long."},"limit":{"type":"string","description":"String-encoded long."},"metricAggregations":{"type":"array","items":{"type":"string"}}},"required":["fieldNames"]}},"dimensionFilter":{"type":"object"},"metricFilter":{"type":"object"},"currencyCode":{"type":"string"},"cohortSpec":{"type":"object"},"keepEmptyRows":{"type":"boolean"},"returnPropertyQuota":{"type":"boolean"}},"required":["propertyId","metrics","dateRanges","pivots"]},"requiredScopes":["https://www.googleapis.com/auth/analytics.readonly"],"class":"read"},{"name":"properties.runRealtimeReport","description":"Run a realtime report — surfaces events that happened in the last 30 minutes. No dateRanges; the realtime window is implicit (POST /v1beta/properties/{propertyId}:runRealtimeReport).","parameters":{"type":"object","properties":{"propertyId":{"type":"string","description":"Numeric GA4 property id."},"dimensions":{"type":"array","items":{"type":"object"}},"metrics":{"type":"array","items":{"type":"object"}},"dimensionFilter":{"type":"object"},"metricFilter":{"type":"object"},"limit":{"type":"integer","minimum":1,"maximum":250000},"metricAggregations":{"type":"array","items":{"type":"string"}},"orderBys":{"type":"array","items":{"type":"object"}},"returnPropertyQuota":{"type":"boolean"},"minuteRanges":{"type":"array","description":"Optional minute-window specifications, e.g. [{ \"name\": \"last5\", \"startMinutesAgo\": 5, \"endMinutesAgo\": 0 }]. Defaults to the last 30 minutes.","items":{"type":"object","properties":{"name":{"type":"string"},"startMinutesAgo":{"type":"integer","minimum":0,"maximum":29},"endMinutesAgo":{"type":"integer","minimum":0,"maximum":29}}}}},"required":["propertyId","metrics"]},"requiredScopes":["https://www.googleapis.com/auth/analytics.readonly"],"class":"read"},{"name":"properties.checkCompatibility","description":"Check whether a given dimension/metric combination is compatible before issuing a full runReport — GA4 rejects incompatible combos (e.g. cohort dimensions with non-cohort metrics) with a hard error (POST /v1beta/properties/{propertyId}:checkCompatibility).","parameters":{"type":"object","properties":{"propertyId":{"type":"string","description":"Numeric GA4 property id."},"dimensions":{"type":"array","items":{"type":"object"}},"metrics":{"type":"array","items":{"type":"object"}},"dimensionFilter":{"type":"object"},"metricFilter":{"type":"object"},"compatibilityFilter":{"type":"string","enum":["COMPATIBILITY_UNSPECIFIED","COMPATIBLE","INCOMPATIBLE"],"description":"Restrict the response to compatible or incompatible entries only."}},"required":["propertyId"]},"requiredScopes":["https://www.googleapis.com/auth/analytics.readonly"],"class":"read"}]},{"kind":"google-bigquery","displayName":"Google BigQuery","description":"Query, analyze, and stream data into Google BigQuery — the fully managed, serverless data warehouse.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/bigquery"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"query.run","description":"Run a synchronous SQL query against BigQuery via jobs.query. Returns rows and the underlying jobReference for follow-up paging.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project to bill the query to."},"query":{"type":"string","description":"Standard SQL (or legacy SQL when useLegacySql=true)."},"useLegacySql":{"type":"boolean"},"maxResults":{"type":"integer","minimum":1,"maximum":100000},"location":{"type":"string"},"timeoutMs":{"type":"integer","minimum":0},"dryRun":{"type":"boolean"},"parameterMode":{"type":"string","enum":["POSITIONAL","NAMED"]},"queryParameters":{"type":"array"},"defaultDataset":{"type":"object"}},"required":["projectId","query"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"read"},{"name":"jobs.getQueryResults","description":"Get rows for a previously-submitted query job (paged). Maps to activepieces `get.rows.for.job`.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"jobId":{"type":"string"},"location":{"type":"string"},"pageToken":{"type":"string"},"maxResults":{"type":"integer","minimum":1,"maximum":100000},"startIndex":{"type":"string"},"timeoutMs":{"type":"integer"}},"required":["projectId","jobId"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"read"},{"name":"jobs.get","description":"Look up a BigQuery job (status, statistics, errorResult).","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"jobId":{"type":"string"},"location":{"type":"string"}},"required":["projectId","jobId"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"read"},{"name":"rows.insert.one","description":"Stream a single row into a BigQuery table via tabledata.insertAll. Maps to activepieces `create.row`.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"datasetId":{"type":"string"},"tableId":{"type":"string"},"row":{"type":"object","description":"Column→value map for the row."},"insertId":{"type":"string","description":"Client-side dedup key honored by the streaming buffer."},"skipInvalidRows":{"type":"boolean"},"ignoreUnknownValues":{"type":"boolean"},"templateSuffix":{"type":"string"}},"required":["projectId","datasetId","tableId","row"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rows.insert.many","description":"Stream a batch of rows into a BigQuery table via tabledata.insertAll. Maps to activepieces `create.rows`.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"datasetId":{"type":"string"},"tableId":{"type":"string"},"rows":{"type":"array","description":"Array of {insertId?, json} entries. Each entry is one row.","items":{"type":"object"}},"skipInvalidRows":{"type":"boolean"},"ignoreUnknownValues":{"type":"boolean"},"templateSuffix":{"type":"string"}},"required":["projectId","datasetId","tableId","rows"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rows.findOne","description":"Find a single row matching a SQL predicate. Maps to activepieces `find.one.row`; executes via jobs.query with LIMIT 1.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"query":{"type":"string","description":"A SELECT ... LIMIT 1 SQL statement."},"useLegacySql":{"type":"boolean"},"location":{"type":"string"},"queryParameters":{"type":"array"},"parameterMode":{"type":"string","enum":["POSITIONAL","NAMED"]}},"required":["projectId","query"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"read"},{"name":"rows.findOrCreate","description":"Find a row by predicate, otherwise stream-insert it. Maps to activepieces `find.or.create.row`. Implemented as a MERGE statement via jobs.query so the find + insert run as a single BigQuery job.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"datasetId":{"type":"string"},"tableId":{"type":"string"},"mergeSql":{"type":"string","description":"A full MERGE statement of the form: MERGE `dataset.table` T USING (SELECT @v1 AS col1, ...) S ON T.key = S.key WHEN NOT MATCHED THEN INSERT (...) VALUES (...)."},"queryParameters":{"type":"array"},"parameterMode":{"type":"string","enum":["POSITIONAL","NAMED"]},"location":{"type":"string"}},"required":["projectId","datasetId","tableId","mergeSql"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rows.update","description":"Update rows in a BigQuery table by running a DML UPDATE through jobs.query. Maps to activepieces `update.rows`.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"updateSql":{"type":"string","description":"A full UPDATE `dataset.table` SET ... WHERE ... statement."},"queryParameters":{"type":"array"},"parameterMode":{"type":"string","enum":["POSITIONAL","NAMED"]},"location":{"type":"string"}},"required":["projectId","updateSql"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"rows.delete","description":"Delete rows from a BigQuery table by running a DML DELETE through jobs.query. Maps to activepieces `delete.rows`.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"deleteSql":{"type":"string","description":"A full DELETE FROM `dataset.table` WHERE ... statement."},"queryParameters":{"type":"array"},"parameterMode":{"type":"string","enum":["POSITIONAL","NAMED"]},"location":{"type":"string"}},"required":["projectId","deleteSql"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"data.import","description":"Submit a load job that imports data from GCS (or inline source URIs) into a BigQuery table. Maps to activepieces `import.data`.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"datasetId":{"type":"string"},"tableId":{"type":"string"},"sourceUris":{"type":"array","items":{"type":"string"}},"sourceFormat":{"type":"string","enum":["CSV","NEWLINE_DELIMITED_JSON","AVRO","PARQUET","ORC"]},"writeDisposition":{"type":"string","enum":["WRITE_APPEND","WRITE_TRUNCATE","WRITE_EMPTY"]},"createDisposition":{"type":"string","enum":["CREATE_IF_NEEDED","CREATE_NEVER"]},"schema":{"type":"object"},"autodetect":{"type":"boolean"},"skipLeadingRows":{"type":"integer"},"location":{"type":"string"}},"required":["projectId","datasetId","tableId","sourceUris","sourceFormat"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"datasets.list","description":"List datasets in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"pageToken":{"type":"string"},"maxResults":{"type":"integer"},"all":{"type":"boolean"}},"required":["projectId"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"read"},{"name":"tables.list","description":"List tables in a dataset.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"datasetId":{"type":"string"},"pageToken":{"type":"string"},"maxResults":{"type":"integer"}},"required":["projectId","datasetId"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"read"},{"name":"tables.get","description":"Read a table resource (schema, partitioning, row counts).","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"datasetId":{"type":"string"},"tableId":{"type":"string"}},"required":["projectId","datasetId","tableId"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"read"}]},{"kind":"google-calendar","displayName":"Google Calendar","description":"Let your agent check availability and book against a Google Calendar. Conflict-resolved: two callers can't grab the same slot — the second one is offered the next free time.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/calendar","https://www.googleapis.com/auth/calendar.events"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"calendar","defaultConsistencyModel":"authoritative","rateLimit":{"requests":600,"windowMs":60000,"scope":"oauth-client"},"capabilities":[{"name":"list_availability","class":"read","description":"Look up busy/free times on the connected calendar between timeMin and timeMax (RFC3339 timestamps).","parameters":{"type":"object","properties":{"timeMin":{"type":"string","description":"RFC3339 lower bound (inclusive)"},"timeMax":{"type":"string","description":"RFC3339 upper bound (exclusive)"}},"required":["timeMin","timeMax"]}},{"name":"book_slot","class":"mutation","description":"Reserve a time window on the connected calendar. Returns conflict + alternatives if the slot is no longer free.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"start":{"type":"string","description":"RFC3339 start time"},"end":{"type":"string","description":"RFC3339 end time"},"summary":{"type":"string","description":"Event title shown on the calendar"},"description":{"type":"string","description":"Optional event description"},"attendees":{"type":"array","items":{"type":"string","description":"email"}}},"required":["start","end","summary"]}},{"name":"create_event","class":"mutation","description":"Create an event on the connected calendar without freebusy pre-flight. Use book_slot when the caller wants conflict-detection; use create_event when the caller already owns the slot decision (e.g. user-driven booking flows).","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/calendar.events"],"parameters":{"type":"object","properties":{"start":{"type":"string","description":"RFC3339 start time"},"end":{"type":"string","description":"RFC3339 end time"},"summary":{"type":"string","description":"Event title shown on the calendar"},"description":{"type":"string","description":"Optional event description"},"location":{"type":"string","description":"Optional event location"},"attendees":{"type":"array","items":{"type":"string","description":"email"}},"sendUpdates":{"type":"string","enum":["all","externalOnly","none"],"default":"none","description":"Whether Google sends invite emails to attendees."}},"required":["start","end","summary"]}},{"name":"update_event","class":"mutation","description":"Patch an existing event by id. Only the supplied fields are updated (PATCH semantics).","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/calendar.events"],"parameters":{"type":"object","properties":{"eventId":{"type":"string"},"start":{"type":"string","description":"RFC3339 start time"},"end":{"type":"string","description":"RFC3339 end time"},"summary":{"type":"string"},"description":{"type":"string"},"location":{"type":"string"},"attendees":{"type":"array","items":{"type":"string","description":"email"}},"sendUpdates":{"type":"string","enum":["all","externalOnly","none"],"default":"none"}},"required":["eventId"]}},{"name":"delete_event","class":"mutation","description":"Delete an event by id. Returns {ok:true} on success; treats 404 and 410 (already-deleted) as idempotent success.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/calendar.events"],"parameters":{"type":"object","properties":{"eventId":{"type":"string"},"sendUpdates":{"type":"string","enum":["all","externalOnly","none"],"default":"none"}},"required":["eventId"]}},{"name":"get_event","class":"read","description":"Fetch a single event by id, including iCal-style fields (htmlLink, hangoutLink, attendees, status, etag).","requiredScopes":["https://www.googleapis.com/auth/calendar.events"],"parameters":{"type":"object","properties":{"eventId":{"type":"string"}},"required":["eventId"]}},{"name":"list_events","class":"read","description":"List events between timeMin and timeMax (RFC3339). Optional free-text search (`q`) and maxResults paging. Returns ordered items + nextPageToken.","requiredScopes":["https://www.googleapis.com/auth/calendar.events"],"parameters":{"type":"object","properties":{"timeMin":{"type":"string","description":"RFC3339 lower bound (inclusive)"},"timeMax":{"type":"string","description":"RFC3339 upper bound (exclusive)"},"q":{"type":"string","description":"Free-text search query (summary, description, location, attendees)."},"maxResults":{"type":"integer","minimum":1,"maximum":2500,"default":50},"pageToken":{"type":"string"},"singleEvents":{"type":"boolean","default":true,"description":"Expand recurring events."},"orderBy":{"type":"string","enum":["startTime","updated"],"default":"startTime"}}}}]},{"kind":"google-cloud-storage","displayName":"Google Cloud Storage","description":"Manage buckets, objects, and ACLs in Google Cloud Storage via the JSON API at storage.googleapis.com/storage/v1.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/devstorage.full_control"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET"},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"buckets.search","description":"List buckets in a Google Cloud project.","parameters":{"type":"object","properties":{"project":{"type":"string","description":"Google Cloud project id that owns the buckets."},"prefix":{"type":"string","description":"Optional name prefix to filter results."},"maxResults":{"type":"integer","description":"Max buckets per page (1..1000)."},"pageToken":{"type":"string","description":"Continuation token from a prior page response."}},"required":["project"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"buckets.create","description":"Insert a new bucket in the given project. Bucket names are globally unique.","parameters":{"type":"object","properties":{"project":{"type":"string","description":"Project id that will own the bucket."},"name":{"type":"string","description":"Globally-unique bucket name."},"location":{"type":"string","description":"Bucket location (e.g. \"US\", \"EU\", \"us-central1\"). Defaults to \"US\" when omitted."},"storageClass":{"type":"string","enum":["STANDARD","NEARLINE","COLDLINE","ARCHIVE"],"description":"Default storage class for newly-created objects."}},"required":["project","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"buckets.delete_empty","description":"Delete an empty bucket. Fails with 409 if the bucket still contains objects.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name."},"ifMetagenerationMatch":{"type":"string","description":"Optimistic-concurrency precondition on bucket metageneration."}},"required":["bucket"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"objects.search","description":"List objects in a bucket. Supports prefix + delimiter for folder-style enumeration.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name."},"prefix":{"type":"string","description":"Object name prefix to filter on (folder-style listing)."},"delimiter":{"type":"string","description":"Path delimiter (typically \"/\") to roll up sub-prefixes."},"maxResults":{"type":"integer","description":"Max objects per page (1..1000)."},"pageToken":{"type":"string","description":"Continuation token from a prior page response."},"versions":{"type":"boolean","description":"Include non-current object versions in the response."}},"required":["bucket"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"objects.clone","description":"Server-side copy an object to a new bucket + name. Source and destination may live in different buckets.","parameters":{"type":"object","properties":{"sourceBucket":{"type":"string","description":"Source bucket name."},"sourceObject":{"type":"string","description":"Source object name (URL-encoded if it contains \"/\")."},"destinationBucket":{"type":"string","description":"Destination bucket name."},"destinationObject":{"type":"string","description":"Destination object name."},"sourceGeneration":{"type":"string","description":"Pin the copy to a specific source generation (object version)."}},"required":["sourceBucket","sourceObject","destinationBucket","destinationObject"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"objects.delete","description":"Delete an object. When the bucket has versioning enabled, pass `generation` to delete a specific version.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name."},"object":{"type":"string","description":"Object name."},"generation":{"type":"string","description":"Specific object version to delete."},"ifGenerationMatch":{"type":"string","description":"Optimistic-concurrency precondition on object generation."}},"required":["bucket","object"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"bucket_acl.create","description":"Grant a role to an entity on the bucket-level ACL collection.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name."},"entity":{"type":"string","description":"ACL entity (e.g. \"user-alice@example.com\", \"group-eng@example.com\", \"allUsers\")."},"role":{"type":"string","enum":["READER","WRITER","OWNER"],"description":"Role granted to the entity."}},"required":["bucket","entity","role"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bucket_acl.delete","description":"Revoke a bucket-level ACL grant from an entity.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name."},"entity":{"type":"string","description":"ACL entity to remove."}},"required":["bucket","entity"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"bucket_default_object_acl.create","description":"Add an entry to the bucket default object ACL. New objects created in the bucket inherit this grant unless overridden at insert time.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name."},"entity":{"type":"string","description":"ACL entity (e.g. \"user-alice@example.com\")."},"role":{"type":"string","enum":["READER","OWNER"],"description":"Role granted to the entity on newly-created objects."}},"required":["bucket","entity","role"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bucket_default_object_acl.delete","description":"Remove an entry from the bucket default object ACL.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name."},"entity":{"type":"string","description":"ACL entity to remove."}},"required":["bucket","entity"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"object_acl.create","description":"Grant a role to an entity on a specific object's ACL collection.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name."},"object":{"type":"string","description":"Object name."},"entity":{"type":"string","description":"ACL entity (e.g. \"user-alice@example.com\", \"allUsers\")."},"role":{"type":"string","enum":["READER","OWNER"],"description":"Role granted to the entity on this object."},"generation":{"type":"string","description":"Specific object version to grant on; defaults to the current generation."}},"required":["bucket","object","entity","role"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"object_acl.delete","description":"Revoke a per-object ACL grant from an entity.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name."},"object":{"type":"string","description":"Object name."},"entity":{"type":"string","description":"ACL entity to remove."},"generation":{"type":"string","description":"Specific object version to revoke from; defaults to the current generation."}},"required":["bucket","object","entity"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true}]},{"kind":"google-contacts","displayName":"Google Contacts","description":"Read, search, create, update, and delete personal Google contacts via the Google People API v1 (people.googleapis.com), including \"Other contacts\" and Workspace directory entries.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/contacts","https://www.googleapis.com/auth/contacts.readonly","https://www.googleapis.com/auth/contacts.other.readonly","https://www.googleapis.com/auth/directory.readonly","https://www.googleapis.com/auth/userinfo.email"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"people.get","description":"Read a single Person by resource name (e.g. \"people/c12345678901234567\"). `personFields` is required and selects which fields the response should populate.","parameters":{"type":"object","properties":{"resourceName":{"type":"string","description":"Person resource name like \"people/{contact_id}\" or \"people/me\" for the authenticated user."},"personFields":{"type":"string","description":"Comma-separated list of person fields to return, e.g. \"names,emailAddresses,phoneNumbers,organizations,addresses,biographies\"."}},"required":["resourceName","personFields"]},"requiredScopes":["https://www.googleapis.com/auth/contacts.readonly"],"class":"read"},{"name":"people.list","description":"List the authenticated user's personal contacts (\"people/me/connections\"). Supports pagination and a sync token for incremental fetches.","parameters":{"type":"object","properties":{"personFields":{"type":"string","description":"Comma-separated list of person fields to return."},"pageSize":{"type":"integer","minimum":1,"maximum":1000},"pageToken":{"type":"string"},"syncToken":{"type":"string","description":"Token from a previous response used to fetch only changes since that response."},"requestSyncToken":{"type":"boolean","description":"Set true to request a syncToken in the response for later incremental sync."},"sortOrder":{"type":"string","description":"LAST_MODIFIED_ASCENDING | LAST_MODIFIED_DESCENDING | FIRST_NAME_ASCENDING | LAST_NAME_ASCENDING."}},"required":["personFields"]},"requiredScopes":["https://www.googleapis.com/auth/contacts.readonly"],"class":"read"},{"name":"people.search","description":"Server-side prefix search over the user's contacts using \"people:searchContacts\". Returns ranked matches by name, email, phone, or organization.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Prefix to match against name, email, phone, or org fields."},"readMask":{"type":"string","description":"Comma-separated field mask, e.g. \"names,emailAddresses,phoneNumbers\"."},"pageSize":{"type":"integer","minimum":1,"maximum":30}},"required":["query","readMask"]},"requiredScopes":["https://www.googleapis.com/auth/contacts.readonly"],"class":"read"},{"name":"otherContacts.list","description":"\"Other contacts\" — addresses Google auto-imports from Gmail/Calendar interactions. Read-only and exposed under a separate scope.","parameters":{"type":"object","properties":{"readMask":{"type":"string","description":"Comma-separated field mask (names, emailAddresses, phoneNumbers)."},"pageSize":{"type":"integer","minimum":1,"maximum":1000},"pageToken":{"type":"string"},"syncToken":{"type":"string"},"requestSyncToken":{"type":"boolean"}},"required":["readMask"]},"requiredScopes":["https://www.googleapis.com/auth/contacts.other.readonly"],"class":"read"},{"name":"otherContacts.search","description":"Prefix search across \"Other contacts\".","parameters":{"type":"object","properties":{"query":{"type":"string"},"readMask":{"type":"string"},"pageSize":{"type":"integer","minimum":1,"maximum":30}},"required":["query","readMask"]},"requiredScopes":["https://www.googleapis.com/auth/contacts.other.readonly"],"class":"read"},{"name":"directory.list","description":"List Workspace directory people (org users + shared contacts). Available only on Google Workspace tenants where the admin enabled directory sharing.","parameters":{"type":"object","properties":{"readMask":{"type":"string"},"sources":{"type":"array","items":{"type":"string"},"description":"DIRECTORY_SOURCE_TYPE_DOMAIN_CONTACT and/or DIRECTORY_SOURCE_TYPE_DOMAIN_PROFILE."},"mergeSources":{"type":"array","items":{"type":"string"},"description":"DIRECTORY_MERGE_SOURCE_TYPE_CONTACT to merge personal contact data when available."},"pageSize":{"type":"integer","minimum":1,"maximum":1000},"pageToken":{"type":"string"},"syncToken":{"type":"string"},"requestSyncToken":{"type":"boolean"}},"required":["readMask","sources"]},"requiredScopes":["https://www.googleapis.com/auth/directory.readonly"],"class":"read"},{"name":"directory.search","description":"Prefix search across the Workspace directory.","parameters":{"type":"object","properties":{"query":{"type":"string"},"readMask":{"type":"string"},"sources":{"type":"array","items":{"type":"string"}},"mergeSources":{"type":"array","items":{"type":"string"}},"pageSize":{"type":"integer","minimum":1,"maximum":500}},"required":["query","readMask","sources"]},"requiredScopes":["https://www.googleapis.com/auth/directory.readonly"],"class":"read"},{"name":"people.create","description":"Create a new personal contact. The body is a full Person resource (names, emailAddresses, phoneNumbers, organizations, etc.). `personFields` selects which fields to return on the populated response.","parameters":{"type":"object","properties":{"person":{"type":"object","description":"Person resource body, e.g. { names: [{ givenName, familyName }], emailAddresses: [...] }."},"personFields":{"type":"string"}},"required":["person"]},"requiredScopes":["https://www.googleapis.com/auth/contacts"],"class":"mutation","cas":"none","externalEffect":true},{"name":"people.update","description":"Update a personal contact. `updatePersonFields` is required and is a comma-separated FieldMask of the mutated top-level fields. The Person body must include the current `etag` for optimistic concurrency.","parameters":{"type":"object","properties":{"resourceName":{"type":"string","description":"Resource name like \"people/{contact_id}\"."},"updatePersonFields":{"type":"string","description":"Comma-separated FieldMask of mutated top-level fields, e.g. \"names,emailAddresses\"."},"personFields":{"type":"string","description":"Field mask selecting which fields the response should re-populate."},"person":{"type":"object","description":"Person body with `etag` from the prior read and the new field values."}},"required":["resourceName","updatePersonFields","person"]},"requiredScopes":["https://www.googleapis.com/auth/contacts"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"people.delete","description":"Delete a personal contact by resource name.","parameters":{"type":"object","properties":{"resourceName":{"type":"string","description":"Resource name like \"people/{contact_id}\"."}},"required":["resourceName"]},"requiredScopes":["https://www.googleapis.com/auth/contacts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"groups.create","description":"Create a user-owned contact group (label) via \"contactGroups:create\". `contactGroup.name` is the human-readable label. The People API has no Idempotency-Key on this endpoint; consecutive POSTs produce duplicate groups, so the MutationGuard layer must dedupe.","parameters":{"type":"object","properties":{"contactGroup":{"type":"object","description":"ContactGroup body, e.g. { name: \"Customers\" }."},"readGroupFields":{"type":"string","description":"Comma-separated FieldMask selecting which group fields the response should populate, e.g. \"name,clientData\"."}},"required":["contactGroup"]},"requiredScopes":["https://www.googleapis.com/auth/contacts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"people.batchGet","description":"Read up to 200 contacts in one round trip. `resourceNames` is a repeated query parameter.","parameters":{"type":"object","properties":{"resourceNames":{"type":"array","items":{"type":"string"},"description":"Up to 200 \"people/{contact_id}\" resource names."},"personFields":{"type":"string"}},"required":["resourceNames","personFields"]},"requiredScopes":["https://www.googleapis.com/auth/contacts.readonly"],"class":"read"}]},{"kind":"google-docs","displayName":"Google Docs","description":"Read and draft into the user's Google Docs. Fetch a document's plaintext body, create a new doc from a title + initial body, and append text with optional revision-id CAS guarding concurrent edits.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/documents","https://www.googleapis.com/auth/drive.file"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"doc","defaultConsistencyModel":"authoritative","rateLimit":{"requests":300,"windowMs":60000,"scope":"oauth-client"},"capabilities":[{"name":"get_document","class":"read","description":"Fetch a Google Doc by id. Returns the title, the plaintext body (paragraph + textRun blocks collapsed), the underlying structured content for callers that need it, and the current revisionId for use as CAS on subsequent writes.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"Docs document id (the slug after /document/d/ in the URL)."}},"required":["documentId"]}},{"name":"create_document","class":"mutation","description":"Create a new Google Doc with the given title. When `body` is supplied the text is inserted at the start of the doc via a follow-up batchUpdate. Returns the new documentId + revisionId.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"title":{"type":"string","description":"Title shown in Drive and the Docs tab."},"body":{"type":"string","description":"Optional plaintext body to insert at index 1 immediately after create."}},"required":["title"]}},{"name":"append_text","class":"mutation","description":"Append plaintext to the end of an existing Doc via a single insertText batchUpdate. When `requiredRevisionId` is supplied the request is rejected by Docs if any other writer has committed between read and write — surfaced as ResourceContention.","cas":"etag-if-match","externalEffect":true,"parameters":{"type":"object","properties":{"documentId":{"type":"string"},"text":{"type":"string","description":"Plaintext to append (a leading newline is added if the doc is non-empty)."},"requiredRevisionId":{"type":"string","description":"Optional revisionId from a prior get_document; when present, request fails fast on a concurrent edit."}},"required":["documentId","text"]}},{"name":"delete_document","class":"mutation","description":"Trash a Google Doc via the Drive API (PATCH /drive/v3/files/{id} with trashed=true). Trashing is idempotent: repeating the call leaves the file in the trash and yields the same response. Requires drive.file scope on a file this app created or opened.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"Docs document id (also the Drive file id)."}},"required":["documentId"]}},{"name":"export_document","class":"read","description":"Export a Google Doc to PDF, HTML, plaintext, DOCX, ODT, RTF, EPUB, or Markdown via the Drive API export endpoint. Returns the exported bytes as a base64 string + the resolved mime type. `format` is a friendly alias (pdf|html|text|docx|odt|rtf|epub|markdown); pass `mimeType` to use any other Drive-supported export mime.","parameters":{"type":"object","properties":{"documentId":{"type":"string"},"format":{"type":"string","description":"Friendly format alias: pdf, html, text, docx, odt, rtf, epub, markdown."},"mimeType":{"type":"string","description":"Explicit export mime type (overrides `format`)."}},"required":["documentId"]}}]},{"kind":"google-drive","displayName":"Google Drive","description":"Read and watch files in the user's Google Drive. List a folder, fetch a document's contents (Docs/Sheets/PDFs/.docx), and subscribe to folder changes via push notifications.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/drive.readonly","https://www.googleapis.com/auth/drive.file"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"storage","defaultConsistencyModel":"authoritative","rateLimit":{"requests":1000,"windowMs":60000,"scope":"oauth-client"},"capabilities":[{"name":"list_files","class":"read","description":"List files visible to the connected Drive account. Optionally scope to a folder by id and/or pass a Drive query string (e.g., \"mimeType='application/pdf' and modifiedTime > '2025-01-01T00:00:00Z'\").","parameters":{"type":"object","properties":{"folderId":{"type":"string","description":"Drive folder id; when present, restricts to direct children."},"query":{"type":"string","description":"Optional Drive query expression; appended with AND if folderId is set."},"pageSize":{"type":"integer","minimum":1,"maximum":1000,"default":100},"pageToken":{"type":"string","description":"Continuation token returned by a previous call."}}}},{"name":"read_file","class":"read","description":"Read a file's contents. Google-native types are exported (Docs → text/plain by default, Sheets → text/csv, Slides → application/pdf); binary types are returned as base64.","parameters":{"type":"object","properties":{"fileId":{"type":"string"},"exportMime":{"type":"string","description":"Export mime override for Google-native types. Defaults: Docs=text/plain, Sheets=text/csv, Slides=application/pdf."}},"required":["fileId"]}},{"name":"watch_folder","class":"mutation","description":"Create a push-notification channel for a folder. Drive POSTs change notifications to `address`; the channel expires at `expiration` (max 7 days). Pass the same channelId on retry to replay the existing channel.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/drive"],"parameters":{"type":"object","properties":{"folderId":{"type":"string"},"channelId":{"type":"string","description":"Caller-controlled UUID; also used as idempotency key."},"address":{"type":"string","description":"HTTPS URL Drive will POST change notifications to."},"ttlMs":{"type":"integer","minimum":60000,"description":"Channel lifetime in ms. Drive caps at 7 days."}},"required":["folderId","channelId","address"]}},{"name":"upload_file","class":"mutation","description":"Upload a file to Drive via multipart upload. `content` is the file body; set `encoding='base64'` for binary payloads. Optional `parents` places the file in a specific folder.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/drive.file"],"parameters":{"type":"object","properties":{"name":{"type":"string","description":"File name including extension."},"mimeType":{"type":"string","description":"MIME type. Defaults to 'application/octet-stream'."},"parents":{"type":"array","items":{"type":"string"},"description":"Parent folder ids."},"content":{"type":"string","description":"File contents. Decoded per `encoding`."},"encoding":{"type":"string","enum":["utf-8","base64"],"default":"utf-8"}},"required":["name","content"]}},{"name":"create_folder","class":"mutation","description":"Create a folder in Drive. Optionally nest under `parents`. Returns the new folder's id.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/drive.file"],"parameters":{"type":"object","properties":{"name":{"type":"string"},"parents":{"type":"array","items":{"type":"string"},"description":"Parent folder ids."}},"required":["name"]}},{"name":"delete_file","class":"mutation","description":"Permanently delete a file or folder by id. Bypasses trash — the operation is irreversible.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/drive.file"],"parameters":{"type":"object","properties":{"fileId":{"type":"string"}},"required":["fileId"]}},{"name":"move_file","class":"mutation","description":"Move a file/folder by changing its parents. Removes `removeParents` and adds `addParents` in a single PATCH. At least one of removeParents/addParents is required.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/drive.file"],"parameters":{"type":"object","properties":{"fileId":{"type":"string"},"addParents":{"type":"array","items":{"type":"string"}},"removeParents":{"type":"array","items":{"type":"string"}}},"required":["fileId"]}}]},{"kind":"google-forms","displayName":"Google Forms","description":"Read a Google Form's schema and paginate its responses for KB ingest, lead routing, or analytics. Returns answers keyed by questionId with the original item tree available for question→title joins.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/forms.body.readonly","https://www.googleapis.com/auth/forms.responses.readonly","https://www.googleapis.com/auth/forms.body"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"other","defaultConsistencyModel":"cache","rateLimit":{"requests":300,"windowMs":60000,"scope":"oauth-client"},"capabilities":[{"name":"get_form","class":"read","description":"Fetch the full Form resource by id. Returns info (title/description), the item tree (questions + sections), the current revisionId, and the public responderUri. Use the item tree to map answer questionIds back to human-readable question titles.","parameters":{"type":"object","properties":{"formId":{"type":"string","description":"Forms form id (the slug after /forms/d/ in the editor URL)."}},"required":["formId"]}},{"name":"list_responses","class":"read","description":"List form responses with pagination. `filter` accepts the Forms timestamp grammar (e.g. `timestamp > \"2026-01-01T00:00:00Z\"`) for incremental ingest. Each response carries flattened `answers: {questionId: {value: string[]}}` plus the original payload at `raw`.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"pageSize":{"type":"integer","minimum":1,"maximum":5000,"default":100,"description":"Max responses to return in this page. Forms API caps at 5000."},"pageToken":{"type":"string","description":"nextPageToken from a prior call to continue the same page sequence."},"filter":{"type":"string","description":"Optional Forms responses filter (timestamp grammar)."}},"required":["formId"]}},{"name":"get_response","class":"read","description":"Fetch a single response by id — the common path when a Forms watch notification delivers only the responseId.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"responseId":{"type":"string"}},"required":["formId","responseId"]}},{"name":"create_form","class":"mutation","description":"Create a new Google Form. Returns the freshly-created Form resource (formId, info, revisionId, responderUri). Only info.title/documentTitle are accepted at creation time per Forms API; use batch_update afterwards to add items.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/forms.body"],"parameters":{"type":"object","properties":{"title":{"type":"string","description":"Form title shown above the questions (info.title)."},"documentTitle":{"type":"string","description":"Drive document title (info.documentTitle). Defaults to `title` when omitted."}},"required":["title"]}},{"name":"batch_update","class":"mutation","description":"Apply a batch of Forms `Request` objects to an existing form (add items, update info, move/delete items, etc.). The `requests` array is passed through unchanged to the Forms API — see Google's Forms batchUpdate request reference.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/forms.body"],"parameters":{"type":"object","properties":{"formId":{"type":"string"},"requests":{"type":"array","description":"Array of Forms `Request` objects passed through to the batchUpdate endpoint.","items":{"type":"object"}},"includeFormInResponse":{"type":"boolean","default":false,"description":"When true, the response body includes the updated Form resource at `form`."},"writeControl":{"type":"object","description":"Optional Forms WriteControl object (e.g. `{requiredRevisionId: 'rev_1'}`) to guard against concurrent edits."}},"required":["formId","requests"]}}]},{"kind":"google-gemini","displayName":"Google Gemini","description":"Generate content, chat, create videos, and perform AI tasks with Google Gemini models.","auth":{"kind":"api-key","hint":"Google Gemini API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"models.list","description":"List available Gemini models.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"chat.generate","description":"Chat with Gemini and generate text responses.","parameters":{"type":"object","properties":{"model":{"type":"string"},"prompt":{"type":"string"},"temperature":{"type":"number"},"maxTokens":{"type":"integer"}},"required":["model","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"content.generate","description":"Generate content using Gemini with advanced options.","parameters":{"type":"object","properties":{"model":{"type":"string"},"prompt":{"type":"string"},"safetySettings":{"type":"object"}},"required":["model","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"video.generate","description":"Generate videos using Gemini video generation models.","parameters":{"type":"object","properties":{"model":{"type":"string"},"prompt":{"type":"string"},"duration":{"type":"integer"},"aspectRatio":{"type":"string"}},"required":["model","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"image.generateFromImage","description":"Generate content from an input image.","parameters":{"type":"object","properties":{"model":{"type":"string"},"prompt":{"type":"string"},"imageData":{"type":"string"}},"required":["model","prompt","imageData"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"search.generateWithFile","description":"Generate content with file search capabilities.","parameters":{"type":"object","properties":{"model":{"type":"string"},"query":{"type":"string"},"fileUri":{"type":"string"}},"required":["model","query","fileUri"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"audio.textToSpeech","description":"Convert text to speech using Gemini.","parameters":{"type":"object","properties":{"model":{"type":"string"},"text":{"type":"string"},"voice":{"type":"string"},"languageCode":{"type":"string"}},"required":["model","text","voice"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"google-meet","displayName":"Google Meet","description":"Create Google Meet spaces, fetch post-meeting conference records, and read participants, recordings, and transcripts via the Google Meet REST API v2.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/meetings.space.created","https://www.googleapis.com/auth/meetings.space.readonly","https://www.googleapis.com/auth/meetings.space.settings","https://www.googleapis.com/auth/drive.readonly"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"calendar","defaultConsistencyModel":"authoritative","capabilities":[{"name":"spaces.create","description":"Create a Meet space and return its meet.google.com URL. The space lives until the calling user deletes it or it expires per Google retention rules.","parameters":{"type":"object","properties":{"config":{"type":"object","description":"Optional SpaceConfig: accessType (OPEN | TRUSTED | RESTRICTED), entryPointAccess (ALL | CREATOR_APP_ONLY), moderation, attendanceReport, artifactConfig, chatRestriction, presentRestriction, defaultJoinAsViewerType."}}},"requiredScopes":["https://www.googleapis.com/auth/meetings.space.created"],"class":"mutation","cas":"none","externalEffect":true},{"name":"spaces.get","description":"Read a Meet space by resource name (e.g. \"spaces/abc-defg-hij\") or by short meeting code.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Resource name like \"spaces/{space_id}\" or \"spaces/{meeting_code}\"."}},"required":["name"]},"requiredScopes":["https://www.googleapis.com/auth/meetings.space.readonly"],"class":"read"},{"name":"spaces.update","description":"Patch a Meet space (accessType, entryPointAccess, moderation toggles, artifactConfig, chat/present restrictions). Caller supplies updateMask to specify mutated fields.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Resource name like \"spaces/{space_id}\"."},"updateMask":{"type":"string","description":"Comma-separated FieldMask of mutated fields, e.g. \"config.accessType,config.moderation\"."},"config":{"type":"object","description":"New SpaceConfig values."}},"required":["name"]},"requiredScopes":["https://www.googleapis.com/auth/meetings.space.settings"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"spaces.endActiveConference","description":"Terminate the currently active conference inside a Meet space. No-op (HTTP 200) if no conference is active.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Resource name like \"spaces/{space_id}\"."}},"required":["name"]},"requiredScopes":["https://www.googleapis.com/auth/meetings.space.created"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conferenceRecords.list","description":"List conference records for meetings the calling user attended or hosted. Supports server-side filtering by space.name and end_time.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer","minimum":1,"maximum":100},"pageToken":{"type":"string"},"filter":{"type":"string","description":"EBNF filter, e.g. 'space.name=\"spaces/abc\"' or 'end_time>=\"2024-01-01T00:00:00Z\"'."}}},"requiredScopes":["https://www.googleapis.com/auth/meetings.space.readonly"],"class":"read"},{"name":"conferenceRecords.get","description":"Read a conference record by resource name (e.g. \"conferenceRecords/abc123\").","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Resource name like \"conferenceRecords/{conference_record_id}\"."}},"required":["name"]},"requiredScopes":["https://www.googleapis.com/auth/meetings.space.readonly"],"class":"read"},{"name":"conferenceRecords.participants.list","description":"List participants for a finished conference, including anonymous and phone-dial-in attendees.","parameters":{"type":"object","properties":{"parent":{"type":"string","description":"Parent conferenceRecords/{conference_record_id}."},"pageSize":{"type":"integer","minimum":1,"maximum":250},"pageToken":{"type":"string"},"filter":{"type":"string","description":"EBNF filter, e.g. 'earliest_start_time<=\"2024-01-01T00:00:00Z\"'."}},"required":["parent"]},"requiredScopes":["https://www.googleapis.com/auth/meetings.space.readonly"],"class":"read"},{"name":"conferenceRecords.recordings.list","description":"List recordings for a conference record. Each entry includes the Drive file id and DriveFileExportUri for downstream Drive fetches.","parameters":{"type":"object","properties":{"parent":{"type":"string","description":"Parent conferenceRecords/{conference_record_id}."},"pageSize":{"type":"integer","minimum":1,"maximum":100},"pageToken":{"type":"string"}},"required":["parent"]},"requiredScopes":["https://www.googleapis.com/auth/meetings.space.readonly"],"class":"read"},{"name":"conferenceRecords.recordings.get","description":"Read a single recording by resource name.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Resource name like \"conferenceRecords/{conference_record_id}/recordings/{recording_id}\"."}},"required":["name"]},"requiredScopes":["https://www.googleapis.com/auth/meetings.space.readonly"],"class":"read"},{"name":"conferenceRecords.transcripts.list","description":"List transcripts (auto-generated captions exports) for a conference record.","parameters":{"type":"object","properties":{"parent":{"type":"string","description":"Parent conferenceRecords/{conference_record_id}."},"pageSize":{"type":"integer","minimum":1,"maximum":100},"pageToken":{"type":"string"}},"required":["parent"]},"requiredScopes":["https://www.googleapis.com/auth/meetings.space.readonly"],"class":"read"},{"name":"conferenceRecords.transcripts.get","description":"Read a transcript by resource name; payload links to the Drive Doc holding the transcript text.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Resource name like \"conferenceRecords/{conference_record_id}/transcripts/{transcript_id}\"."}},"required":["name"]},"requiredScopes":["https://www.googleapis.com/auth/meetings.space.readonly"],"class":"read"}]},{"kind":"google-my-business","displayName":"Google My Business","description":"Manage Google Business Profile (formerly Google My Business): list accounts and locations, read customer reviews, and post owner replies.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/business.manage"],"clientIdEnv":"GOOGLE_MY_BUSINESS_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_MY_BUSINESS_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"accounts.list","description":"List Business Profile accounts the authenticated user owns or co-manages.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer","minimum":1,"maximum":50},"pageToken":{"type":"string"},"filter":{"type":"string"}},"required":[]},"requiredScopes":["https://www.googleapis.com/auth/business.manage"],"class":"read"},{"name":"locations.list","description":"List locations under a Business Profile account (Business Information API).","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Bare account id (the trailing segment of `accounts/{accountId}`)."},"pageSize":{"type":"integer","minimum":1,"maximum":100},"pageToken":{"type":"string"},"filter":{"type":"string"},"readMask":{"type":"string","description":"Field mask selecting which Location fields to return, e.g. `name,title,storefrontAddress`."}},"required":["accountId","readMask"]},"requiredScopes":["https://www.googleapis.com/auth/business.manage"],"class":"read"},{"name":"reviews.list","description":"List customer reviews for a location (legacy v4 endpoint — Google never migrated reviews onto the v1 split APIs).","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"locationId":{"type":"string"},"pageSize":{"type":"integer","minimum":1,"maximum":50},"pageToken":{"type":"string"},"orderBy":{"type":"string","description":"Sort order, e.g. `updateTime desc` or `rating desc`."}},"required":["accountId","locationId"]},"requiredScopes":["https://www.googleapis.com/auth/business.manage"],"class":"read"},{"name":"reviews.get","description":"Get a single customer review by id.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"locationId":{"type":"string"},"reviewId":{"type":"string"}},"required":["accountId","locationId","reviewId"]},"requiredScopes":["https://www.googleapis.com/auth/business.manage"],"class":"read"},{"name":"reviews.reply.create","description":"Create or replace the owner reply on a customer review (idempotent upsert on the review name).","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"locationId":{"type":"string"},"reviewId":{"type":"string"},"comment":{"type":"string","description":"Reply text, up to 4096 characters.","maxLength":4096}},"required":["accountId","locationId","reviewId","comment"]},"requiredScopes":["https://www.googleapis.com/auth/business.manage"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"reviews.reply.delete","description":"Delete the owner reply on a customer review.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"locationId":{"type":"string"},"reviewId":{"type":"string"}},"required":["accountId","locationId","reviewId"]},"requiredScopes":["https://www.googleapis.com/auth/business.manage"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"localPosts.create","description":"Publish a Google Business Profile local post (status update, offer, event, or call-to-action) on a location.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"locationId":{"type":"string"},"languageCode":{"type":"string","description":"BCP-47 language code, e.g. \"en\"."},"summary":{"type":"string","description":"Post body text (up to 1,500 characters).","maxLength":1500},"topicType":{"type":"string","description":"STANDARD | EVENT | OFFER | ALERT."},"callToAction":{"type":"object","description":"Optional { actionType, url } block, e.g. { actionType: \"LEARN_MORE\", url: \"https://...\" }."},"event":{"type":"object","description":"For topicType=EVENT: { title, schedule: { startDate, endDate, ... } }."},"offer":{"type":"object","description":"For topicType=OFFER: { couponCode, redeemOnlineUrl, termsConditions }."},"media":{"type":"array","description":"Optional MediaItem list to attach images/video to the post."}},"required":["accountId","locationId","languageCode","summary"]},"requiredScopes":["https://www.googleapis.com/auth/business.manage"],"class":"mutation","cas":"none","externalEffect":true},{"name":"localPosts.delete","description":"Delete a local post from a location. Repeating the call on an already-deleted post yields 404 but is idempotent in effect.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"locationId":{"type":"string"},"localPostId":{"type":"string"}},"required":["accountId","locationId","localPostId"]},"requiredScopes":["https://www.googleapis.com/auth/business.manage"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.create","description":"Upload a photo or video to a Google Business Profile location via the v4 /media endpoint. Pass a sourceUrl Google can fetch (HTTPS, publicly reachable). For bytestream uploads use the /media:startUpload + PUT bytestream flow instead.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"locationId":{"type":"string"},"mediaFormat":{"type":"string","description":"PHOTO | VIDEO."},"locationAssociation":{"type":"object","description":"Where the media attaches, e.g. { category: \"EXTERIOR\" } or { priceListItemId: \"...\" }."},"sourceUrl":{"type":"string","description":"Public HTTPS URL Google should fetch the media from."},"description":{"type":"string","description":"Optional caption shown alongside the media."}},"required":["accountId","locationId","mediaFormat","sourceUrl"]},"requiredScopes":["https://www.googleapis.com/auth/business.manage"],"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"google-search","displayName":"Google Search","description":"Search using Vertex AI Search (Discovery Engine).","auth":{"kind":"api-key","hint":"Google Cloud API key with Vertex AI Search access. Provide project ID and Vertex AI Search app (engine) ID per request."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"search","description":"Run a Vertex AI Search (Discovery Engine) query against a configured search app/engine.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Google Cloud project ID hosting the Vertex AI Search engine."},"appId":{"type":"string","description":"Vertex AI Search app (engine) ID."},"query":{"type":"string","description":"The query text to search."},"userPseudoId":{"type":"string","description":"Pseudonymized identifier for the user (max 128 chars). Improves personalization."}},"required":["projectId","appId","query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"google-search-console","displayName":"Google Search Console","description":"Inspect URLs against the Google index, run Search Analytics queries, and manage verified sites and sitemaps for properties the connected identity owns in Google Search Console.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/webmasters"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"other","defaultConsistencyModel":"cache","capabilities":[{"name":"urlInspection.index","description":"Inspect a URL against the Google index for a property in Search Console. Returns the indexing status, last crawl time, canonical URL, mobile usability, rich results status, and AMP analysis (POST /v1/urlInspection/index:inspect).","parameters":{"type":"object","properties":{"inspectionUrl":{"type":"string","description":"Fully-qualified URL to inspect. Must belong to the verified `siteUrl` property below."},"siteUrl":{"type":"string","description":"Verified property the inspectionUrl belongs to. URL-prefix property (e.g. \"https://example.com/\") or domain property (\"sc-domain:example.com\")."},"languageCode":{"type":"string","description":"BCP-47 language code (e.g. \"en-US\") that controls the locale of human-readable strings in the response."}},"required":["inspectionUrl","siteUrl"]},"requiredScopes":["https://www.googleapis.com/auth/webmasters"],"class":"read"},{"name":"searchAnalytics.query","description":"Run a Search Analytics query against a verified property. Pass startDate/endDate (ISO yyyy-MM-dd), optional dimensions (query, page, country, device, searchAppearance, date), filter groups, row limit, and aggregation type. Returns the rows Search Console emits with clicks, impressions, CTR, and average position (POST /webmasters/v3/sites/{siteUrl}/searchAnalytics/query).","parameters":{"type":"object","properties":{"siteUrl":{"type":"string","description":"Verified property identifier — URL-prefix or \"sc-domain:\" form."},"startDate":{"type":"string","description":"Inclusive start date, ISO yyyy-MM-dd. Search Console data lags 2–3 days."},"endDate":{"type":"string","description":"Inclusive end date, ISO yyyy-MM-dd."},"dimensions":{"type":"array","description":"Group-by dimensions, e.g. [\"query\",\"page\"]. Omit for a single totals row.","items":{"type":"string","enum":["query","page","country","device","searchAppearance","date"]}},"type":{"type":"string","description":"Search type filter: \"web\" (default), \"image\", \"video\", \"news\", \"discover\", \"googleNews\".","enum":["web","image","video","news","discover","googleNews"]},"dimensionFilterGroups":{"type":"array","description":"OR-grouped filters; each group is an AND of dimension/expression/operator filters.","items":{"type":"object"}},"aggregationType":{"type":"string","description":"\"auto\" (default) chooses byPage/byProperty per dimension set; \"byPage\" forces per-page aggregation.","enum":["auto","byPage","byProperty","byNewsShowcasePanel"]},"rowLimit":{"type":"integer","minimum":1,"maximum":25000,"description":"Max rows per page; Search Console caps at 25000."},"startRow":{"type":"integer","minimum":0,"description":"Zero-based offset for pagination."},"dataState":{"type":"string","description":"\"final\" (default, fully processed) or \"all\" (includes fresh-but-incomplete data from the last 1–2 days).","enum":["final","all"]}},"required":["siteUrl","startDate","endDate"]},"requiredScopes":["https://www.googleapis.com/auth/webmasters"],"class":"read"},{"name":"sites.list","description":"List every site the connected identity has at least read access to in Search Console. Returns the siteUrl identifiers other capabilities consume, plus the permissionLevel per site (GET /webmasters/v3/sites).","parameters":{"type":"object","properties":{}},"requiredScopes":["https://www.googleapis.com/auth/webmasters"],"class":"read"},{"name":"sites.add","description":"Add a site to the connected identity's Search Console account. The site will be unverified until ownership is proven through one of Search Console's verification methods (PUT /webmasters/v3/sites/{siteUrl}).","parameters":{"type":"object","properties":{"siteUrl":{"type":"string","description":"URL-prefix property (\"https://example.com/\") or domain property (\"sc-domain:example.com\") to add."}},"required":["siteUrl"]},"requiredScopes":["https://www.googleapis.com/auth/webmasters"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sites.delete","description":"Remove a site from the connected identity's Search Console account. The site itself is not affected; only the connected identity's access is revoked (DELETE /webmasters/v3/sites/{siteUrl}).","parameters":{"type":"object","properties":{"siteUrl":{"type":"string","description":"Property identifier to remove — URL-prefix or \"sc-domain:\" form."}},"required":["siteUrl"]},"requiredScopes":["https://www.googleapis.com/auth/webmasters"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sitemaps.list","description":"List every sitemap registered against a verified property in Search Console. Returns each sitemap's path, last-submitted time, last-downloaded time, type (sitemap/sitemapsIndex), and any errors/warnings (GET /webmasters/v3/sites/{siteUrl}/sitemaps).","parameters":{"type":"object","properties":{"siteUrl":{"type":"string","description":"Verified property identifier."},"sitemapIndex":{"type":"string","description":"Optional sitemap-index URL; if set, only sitemaps contained within that index are returned."}},"required":["siteUrl"]},"requiredScopes":["https://www.googleapis.com/auth/webmasters"],"class":"read"},{"name":"sitemaps.submit","description":"Submit a sitemap to Search Console for a verified property. The feedPath must be a fully-qualified URL hosted on the site; Search Console fetches it asynchronously after the call returns (PUT /webmasters/v3/sites/{siteUrl}/sitemaps/{feedpath}).","parameters":{"type":"object","properties":{"siteUrl":{"type":"string","description":"Verified property identifier the sitemap belongs to."},"feedpath":{"type":"string","description":"Fully-qualified sitemap URL, e.g. \"https://example.com/sitemap.xml\". The runtime URL-encodes this when substituting into the path."}},"required":["siteUrl","feedpath"]},"requiredScopes":["https://www.googleapis.com/auth/webmasters"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sitemaps.delete","description":"Remove a submitted sitemap from a verified property in Search Console. The sitemap file at feedpath is not touched — only Search Console's record of the submission is dropped (DELETE /webmasters/v3/sites/{siteUrl}/sitemaps/{feedpath}).","parameters":{"type":"object","properties":{"siteUrl":{"type":"string","description":"Verified property identifier the sitemap belongs to."},"feedpath":{"type":"string","description":"Fully-qualified sitemap URL previously submitted, e.g. \"https://example.com/sitemap.xml\". The runtime URL-encodes this when substituting into the path."}},"required":["siteUrl","feedpath"]},"requiredScopes":["https://www.googleapis.com/auth/webmasters"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"google-sheets","displayName":"Google Sheets","description":"Bind your agent's knowledge base or pricing/availability lookup to a live Google Sheet. Edit the sheet, and the agent picks up changes — no redeploys.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/spreadsheets"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"spreadsheet","defaultConsistencyModel":"cache","rateLimit":{"requests":300,"windowMs":60000,"scope":"oauth-client"},"capabilities":[{"name":"list_rows","class":"read","description":"Return rows from the connected sheet. Each row is keyed by the header cells declared at connect time.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":500,"default":100}}}},{"name":"query_rows","class":"read","description":"Return rows matching every key=value pair in `predicate` (string equality, case-insensitive).","parameters":{"type":"object","properties":{"predicate":{"type":"object","additionalProperties":{"type":"string"}},"limit":{"type":"integer","minimum":1,"maximum":500,"default":100}},"required":["predicate"]}},{"name":"update_row","class":"mutation","description":"Update a row identified by `rowKey` (the value in the configured key column). Patch is a {column: newValue} map. Returns conflict if the row changed since the agent last read it.","cas":"optimistic-read-verify","externalEffect":true,"parameters":{"type":"object","properties":{"rowKey":{"type":"string","description":"Value in the key column identifying the row to update."},"patch":{"type":"object","additionalProperties":{"type":"string"}},"expectedFingerprint":{"type":"string","description":"Optional. The fingerprint the agent read on its last list_rows/query_rows call. If supplied and stale, the update is rejected with conflict."}},"required":["rowKey","patch"]}},{"name":"append_row","class":"mutation","description":"Append rows to the end of `range` in `spreadsheetId`. `values` is a 2D array (rows × cells). `valueInputOption` defaults to USER_ENTERED so formulas + dates are parsed like a human-typed entry.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"spreadsheetId":{"type":"string"},"range":{"type":"string","description":"A1 notation, e.g. \"Sheet1!A1:C1\"."},"values":{"type":"array","items":{"type":"array","items":{"type":"string"}},"description":"2D array of cells; one inner array per appended row."},"valueInputOption":{"type":"string","enum":["RAW","USER_ENTERED"],"default":"USER_ENTERED"}},"required":["spreadsheetId","range","values"]}},{"name":"clear_range","class":"mutation","description":"Clear all cell values in `range` (formatting is preserved).","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"spreadsheetId":{"type":"string"},"range":{"type":"string","description":"A1 notation of the range to clear."}},"required":["spreadsheetId","range"]}},{"name":"create_sheet","class":"mutation","description":"Create a brand-new spreadsheet (workbook). Returns the new spreadsheetId. To add an additional tab inside an existing spreadsheet use the batchUpdate addSheet request (not modeled here).","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"title":{"type":"string","description":"Workbook title shown in Drive."}},"required":["title"]}}]},{"kind":"google-slides","displayName":"Google Slides","description":"Create presentations, refresh charts, and read Google Slides presentations.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/presentations"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"presentation.get","description":"Get a Google Slides presentation by ID.","parameters":{"type":"object","properties":{"presentationId":{"type":"string"}},"required":["presentationId"]},"requiredScopes":["https://www.googleapis.com/auth/presentations"],"class":"read"},{"name":"presentation.create","description":"Create a new Google Slides presentation.","parameters":{"type":"object","properties":{"title":{"type":"string"}},"required":["title"]},"requiredScopes":["https://www.googleapis.com/auth/presentations"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"charts.refresh","description":"Refresh Sheets charts embedded in a presentation.","parameters":{"type":"object","properties":{"presentationId":{"type":"string"},"objectIds":{"type":"array","items":{"type":"string"}}},"required":["presentationId"]},"requiredScopes":["https://www.googleapis.com/auth/presentations"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"presentation.update","description":"Apply a batch of Slides API edit requests (insertText, deleteObject, updateShapeProperties, etc.) to an existing presentation. Pass `requests` as an array of Slides batchUpdate Request objects; the API applies them atomically (POST /presentations/{presentationId}:batchUpdate).","parameters":{"type":"object","properties":{"presentationId":{"type":"string","description":"Presentation resource ID."},"requests":{"type":"array","description":"Array of Slides batchUpdate Request objects, e.g. [{ insertText: { objectId, text } }].","items":{"type":"object"}},"writeControl":{"type":"object","description":"Optional WriteControl object with required_revision_id for optimistic locking."}},"required":["presentationId","requests"]},"requiredScopes":["https://www.googleapis.com/auth/presentations"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"slides.duplicate","description":"Duplicate an existing slide within a presentation. Issues a Slides batchUpdate with a `duplicateObject` request keyed by the slide's objectId (POST /presentations/{presentationId}:batchUpdate).","parameters":{"type":"object","properties":{"presentationId":{"type":"string","description":"Presentation resource ID."},"objectId":{"type":"string","description":"Object ID of the slide to duplicate (slides are page-level objects)."},"objectIds":{"type":"object","description":"Optional map of source-objectId -> desired-objectId for the duplicated children, letting callers pin stable IDs."}},"required":["presentationId","objectId"]},"requiredScopes":["https://www.googleapis.com/auth/presentations"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"google-tasks","displayName":"Google Tasks","description":"Manage tasks in Google Tasks task lists.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/tasks"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tasklists.list","description":"List all task lists.","parameters":{"type":"object","properties":{"maxResults":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasklists.get","description":"Get a specific task list.","parameters":{"type":"object","properties":{"tasklistId":{"type":"string"}},"required":["tasklistId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.list","description":"List tasks in a task list.","parameters":{"type":"object","properties":{"tasklistId":{"type":"string"},"maxResults":{"type":"integer"},"pageToken":{"type":"string"},"showCompleted":{"type":"boolean"},"showDeleted":{"type":"boolean"},"showHidden":{"type":"boolean"},"showAssigned":{"type":"boolean"},"updatedMin":{"type":"string"},"dueMin":{"type":"string"},"dueMax":{"type":"string"},"completedMin":{"type":"string"},"completedMax":{"type":"string"}},"required":["tasklistId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.get","description":"Get a specific task.","parameters":{"type":"object","properties":{"tasklistId":{"type":"string"},"taskId":{"type":"string"}},"required":["tasklistId","taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.create","description":"Create a new task in a task list.","parameters":{"type":"object","properties":{"tasklistId":{"type":"string"},"title":{"type":"string"},"notes":{"type":"string"},"dueDate":{"type":"string"},"parent":{"type":"string"},"previous":{"type":"string"}},"required":["tasklistId","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update an existing task.","parameters":{"type":"object","properties":{"tasklistId":{"type":"string"},"taskId":{"type":"string"},"title":{"type":"string"},"notes":{"type":"string"},"dueDate":{"type":"string"},"status":{"type":"string"}},"required":["tasklistId","taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"tasks.delete","description":"Delete a task.","parameters":{"type":"object","properties":{"tasklistId":{"type":"string"},"taskId":{"type":"string"}},"required":["tasklistId","taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.complete","description":"Mark a task as completed. Issues a PATCH against the task with status=\"completed\"; Google records `completed` as the current time. To uncomplete, use tasks.update with status=\"needsAction\".","parameters":{"type":"object","properties":{"tasklistId":{"type":"string","description":"Containing task list ID."},"taskId":{"type":"string","description":"Task ID to mark complete."}},"required":["tasklistId","taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.create","description":"Create a new task list owned by the authenticated user.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"Display title of the new task list."}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"google-vertexai","displayName":"Google Vertex AI","description":"Generate content and images using Gemini and Imagen models on Google Vertex AI.","auth":{"kind":"api-key","hint":"Google Cloud API key with Vertex AI permissions."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"content.generate","description":"Generate content using Gemini model.","parameters":{"type":"object","properties":{"model":{"type":"string"},"userMessage":{"type":"string"},"systemMessage":{"type":"string"},"temperature":{"type":"number"},"maxOutputTokens":{"type":"integer"},"thinkingLevel":{"type":"string"}},"required":["model","userMessage"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"content.generateWithFiles","description":"Generate content with file attachments (images, PDFs, text, audio, video).","parameters":{"type":"object","properties":{"model":{"type":"string"},"userMessage":{"type":"string"},"files":{"type":"object"},"temperature":{"type":"number"},"maxOutputTokens":{"type":"integer"}},"required":["model","userMessage","files"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"image.generate","description":"Generate images using Imagen model.","parameters":{"type":"object","properties":{"prompt":{"type":"string"},"numberOfImages":{"type":"integer"},"sampleCount":{"type":"integer"}},"required":["prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"models.list","description":"List available models in the location.","parameters":{"type":"object","properties":{"filter":{"type":"string"},"pageSize":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"content.countTokens","description":"Count tokens for a given prompt.","parameters":{"type":"object","properties":{"model":{"type":"string"},"userMessage":{"type":"string"}},"required":["model","userMessage"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"googlechat","displayName":"Google Chat","description":"Send messages to Google Chat spaces and direct messages, fetch message details, add members to spaces, list/search messages, and locate space members.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/chat.messages","https://www.googleapis.com/auth/chat.spaces","https://www.googleapis.com/auth/chat.memberships","https://www.googleapis.com/auth/chat.messages.readonly"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"send.amessage","description":"Send a message to a Google Chat space or DM. Pass the parent space (e.g. \"spaces/AAAA1234\") and a Chat message payload (text or cardsV2).","parameters":{"type":"object","properties":{"space":{"type":"string","description":"Space resource name, e.g. \"spaces/AAAA1234\"."},"message":{"type":"object","description":"A Chat Message resource. Most callers set { text } or { cardsV2 }."},"threadKey":{"type":"string","description":"Optional thread key for grouping replies under a synthetic thread."},"messageReplyOption":{"type":"string","enum":["MESSAGE_REPLY_OPTION_UNSPECIFIED","REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD","REPLY_MESSAGE_OR_FAIL"],"description":"Controls thread reply behavior when message.thread is set."}},"required":["space","message"]},"requiredScopes":["https://www.googleapis.com/auth/chat.messages"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.direct.message.details","description":"Read a direct message by resource name. Direct messages live under the DM space (\"spaces/{dmId}/messages/{messageId}\").","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Full message resource name, e.g. \"spaces/AAAA/messages/BBBB\"."}},"required":["name"]},"requiredScopes":["https://www.googleapis.com/auth/chat.messages.readonly"],"class":"read"},{"name":"add.aspace.member","description":"Add a human user or Chat app as a member to a space. Provide the parent space and a Membership resource (member.name = \"users/{userId}\").","parameters":{"type":"object","properties":{"space":{"type":"string","description":"Parent space resource name, e.g. \"spaces/AAAA1234\"."},"membership":{"type":"object","description":"Membership resource. Typically { member: { name: \"users/123\", type: \"HUMAN\" } } or { groupMember: { name: \"groups/xyz\" } }."}},"required":["space","membership"]},"requiredScopes":["https://www.googleapis.com/auth/chat.memberships"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.message.details","description":"Read a Chat message by full resource name (\"spaces/{space}/messages/{message}\"). Returns the Message resource including text, sender, thread, and any cardsV2 payload.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Full message resource name, e.g. \"spaces/AAAA/messages/BBBB\"."}},"required":["name"]},"requiredScopes":["https://www.googleapis.com/auth/chat.messages.readonly"],"class":"read"},{"name":"search.messages","description":"List messages in a space, optionally filtered with the Chat API filter syntax (e.g. \"createTime > \\\"2024-01-01T00:00:00Z\\\"\") and ordered by createTime.","parameters":{"type":"object","properties":{"space":{"type":"string","description":"Parent space resource name, e.g. \"spaces/AAAA1234\"."},"filter":{"type":"string","description":"Chat API list filter expression."},"orderBy":{"type":"string","description":"e.g. \"createTime desc\"."},"pageSize":{"type":"integer","minimum":1,"maximum":1000},"pageToken":{"type":"string"},"showDeleted":{"type":"boolean"}},"required":["space"]},"requiredScopes":["https://www.googleapis.com/auth/chat.messages.readonly"],"class":"read"},{"name":"find.member","description":"List or filter memberships of a space to locate a specific user, group, or app. Use filter (e.g. \"member.type = \\\"HUMAN\\\"\") to narrow results.","parameters":{"type":"object","properties":{"space":{"type":"string","description":"Parent space resource name, e.g. \"spaces/AAAA1234\"."},"filter":{"type":"string","description":"Chat API membership filter expression."},"pageSize":{"type":"integer","minimum":1,"maximum":1000},"pageToken":{"type":"string"},"showGroups":{"type":"boolean"},"showInvited":{"type":"boolean"}},"required":["space"]},"requiredScopes":["https://www.googleapis.com/auth/chat.memberships"],"class":"read"},{"name":"message.update","description":"Edit a previously sent message in a Google Chat space. Pass the full message resource name and an updateMask listing the fields being modified (e.g. \"text\" or \"cardsV2\"). Body is the partial Message resource holding the new values.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Full message resource name, e.g. \"spaces/AAAA/messages/BBBB\"."},"updateMask":{"type":"string","description":"Comma-separated list of fields to update, e.g. \"text\" or \"cardsV2,attachment\"."},"message":{"type":"object","description":"Partial Message resource carrying the new field values referenced by updateMask."}},"required":["name","updateMask","message"]},"requiredScopes":["https://www.googleapis.com/auth/chat.messages"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"message.delete","description":"Delete a message from a Google Chat space. Only the authenticated user's own messages can be deleted with user-token credentials; Chat apps can delete their own messages.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Full message resource name, e.g. \"spaces/AAAA/messages/BBBB\"."},"force":{"type":"boolean","description":"When true, also delete threaded replies; defaults to false."}},"required":["name"]},"requiredScopes":["https://www.googleapis.com/auth/chat.messages"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"space.create","description":"Create a named Google Chat space. Pass a Space resource with displayName and spaceType (e.g. \"SPACE\" for a named group space). For DM creation use spaces.setup; this capability covers the spaces.create endpoint for human-named spaces.","parameters":{"type":"object","properties":{"space":{"type":"object","description":"Space resource. Typically { displayName: \"Engineering\", spaceType: \"SPACE\" } or { spaceType: \"GROUP_CHAT\" }."},"requestId":{"type":"string","description":"Optional client-supplied request ID; Chat uses it to deduplicate retries server-side."}},"required":["space"]},"requiredScopes":["https://www.googleapis.com/auth/chat.spaces"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"gorgias","displayName":"Gorgias","description":"Search, read, create, and update Gorgias support tickets, messages, and customers for ecommerce help desks.","auth":{"kind":"oauth2","authorizationUrl":"https://{subdomain}.gorgias.com/oauth2/authorize","tokenUrl":"https://{subdomain}.gorgias.com/oauth2/token","scopes":["openid","profile","offline","tickets:read","tickets:write","customers:read","customers:write","messages:read","messages:write"],"clientIdEnv":"GORGIAS_OAUTH_CLIENT_ID","clientSecretEnv":"GORGIAS_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tickets.search","description":"List tickets, optionally filtered by status/channel/assignee/customer. Pass any Gorgias ticket-list query parameter.","parameters":{"type":"object","properties":{"status":{"type":"string"},"channel":{"type":"string"},"assignee_user":{"type":"integer"},"customer_id":{"type":"integer"},"order_by":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"}}},"requiredScopes":["tickets:read"],"class":"read"},{"name":"tickets.get","description":"Read a single Gorgias ticket by id.","parameters":{"type":"object","properties":{"ticketId":{"type":"integer"}},"required":["ticketId"]},"requiredScopes":["tickets:read"],"class":"read"},{"name":"tickets.create","description":"Create a Gorgias ticket. Pass the full ticket payload as defined by Gorgias (channel, customer, messages, etc.).","parameters":{"type":"object","properties":{"channel":{"type":"string"},"via":{"type":"string"},"subject":{"type":"string"},"customer":{"type":"object"},"messages":{"type":"array","items":{"type":"object"}},"status":{"type":"string"},"priority":{"type":"string"},"tags":{"type":"array","items":{"type":"object"}},"assignee_user":{"type":"object"},"assignee_team":{"type":"object"}},"required":["channel","via","customer","messages"]},"requiredScopes":["tickets:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.update","description":"Update a Gorgias ticket. Pass any subset of mutable ticket fields (status, priority, assignee_user, tags, etc.).","parameters":{"type":"object","properties":{"ticketId":{"type":"integer"},"status":{"type":"string"},"priority":{"type":"string"},"assignee_user":{"type":"object"},"assignee_team":{"type":"object"},"tags":{"type":"array","items":{"type":"object"}},"subject":{"type":"string"},"meta":{"type":"object"}},"required":["ticketId"]},"requiredScopes":["tickets:write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"messages.create","description":"Append a message (agent reply or internal note) to an existing Gorgias ticket.","parameters":{"type":"object","properties":{"ticketId":{"type":"integer"},"channel":{"type":"string"},"via":{"type":"string"},"sender":{"type":"object"},"receiver":{"type":"object"},"body_text":{"type":"string"},"body_html":{"type":"string"},"public":{"type":"boolean"},"source":{"type":"object"}},"required":["ticketId","channel","via","sender"]},"requiredScopes":["messages:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.search","description":"List customers, optionally filtered by email or external_id. Pass any Gorgias customer-list query parameter.","parameters":{"type":"object","properties":{"email":{"type":"string"},"external_id":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"}}},"requiredScopes":["customers:read"],"class":"read"},{"name":"customers.create","description":"Create a Gorgias customer. Pass the customer payload (name, email, channels, etc.).","parameters":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"firstname":{"type":"string"},"lastname":{"type":"string"},"language":{"type":"string"},"channels":{"type":"array","items":{"type":"object"}},"external_id":{"type":"string"},"data":{"type":"object"},"meta":{"type":"object"}},"required":["email"]},"requiredScopes":["customers:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.close","description":"Close a Gorgias ticket. Issues PUT /api/tickets/{ticketId} with status=\"closed\"; idempotent — already-closed tickets stay closed. Use tickets.update to set status to a different value (open, pending, resolved).","parameters":{"type":"object","properties":{"ticketId":{"type":"integer","description":"Gorgias ticket ID to close."}},"required":["ticketId"]},"requiredScopes":["tickets:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"gotify","displayName":"Gotify","description":"Send push notifications to a self-hosted Gotify instance.","auth":{"kind":"api-key","hint":"Gotify app token."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"notification.send","description":"Send a notification to Gotify.","parameters":{"type":"object","properties":{"title":{"type":"string"},"message":{"type":"string"},"priority":{"type":"integer"}},"required":["title","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"message.send","description":"Send a Gotify push notification (alias of notification.send for catalog discovery).","parameters":{"type":"object","properties":{"title":{"type":"string"},"message":{"type":"string"},"priority":{"type":"integer"}},"required":["title","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"message.delete","description":"Delete a previously sent Gotify message by id. Requires a Gotify client token in the {client_token} arg.","parameters":{"type":"object","properties":{"messageId":{"type":"integer","description":"Numeric Gotify message id to delete."},"client_token":{"type":"string","description":"Gotify client token (not an app token) authorised to manage messages."}},"required":["messageId","client_token"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"application.create","description":"Create a Gotify application and return the new application token. Requires a Gotify client token in the {client_token} arg.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Display name of the new application."},"description":{"type":"string","description":"Optional human-readable description."},"client_token":{"type":"string","description":"Gotify client token (not an app token) authorised to manage applications."}},"required":["name","client_token"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"gptzero-detect-ai","displayName":"GPTZero","description":"Detect AI-generated text with GPTZero API.","auth":{"kind":"api-key","hint":"GPTZero API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"scan.text","description":"Scan text content for AI-generated content.","parameters":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"scan.file","description":"Scan file for AI-generated content.","parameters":{"type":"object","properties":{"file":{"type":"string"}},"required":["file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"granola","displayName":"Granola","description":"Retrieve meeting notes, search for notes, and access note transcripts.","auth":{"kind":"api-key","hint":"Granola API key from Settings > API."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"notes.list","description":"List all notes with optional filtering by creation/update date and pagination.","parameters":{"type":"object","properties":{"created_after":{"type":"string","description":"ISO 8601 date to filter notes created after this date."},"created_before":{"type":"string","description":"ISO 8601 date to filter notes created before this date."},"updated_after":{"type":"string","description":"ISO 8601 date to filter notes updated after this date."},"page_size":{"type":"integer","description":"Number of notes per page (1–30), default 10."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"notes.get","description":"Retrieve a specific note by ID, with optional transcript inclusion.","parameters":{"type":"object","properties":{"note_id":{"type":"string","description":"The unique identifier of the note."},"include_transcript":{"type":"boolean","description":"Include the full meeting transcript showing who said what and when."}},"required":["note_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"greenhouse","displayName":"Greenhouse","description":"Search, advance, and update Greenhouse candidates, applications, jobs, offers, and scorecards through the Harvest API.","auth":{"kind":"api-key","hint":"Greenhouse Harvest API key. In Greenhouse: Configure → Dev Center → API Credential Management → Create New API Key → \"Harvest\". Persist the base64 of `:` (note the trailing colon — Basic auth requires it even with an empty password)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"candidates.search","description":"List or search Greenhouse candidates. Filter by email, updated_after, created_after, or job_id; paginate with page+per_page (max 500).","parameters":{"type":"object","properties":{"email":{"type":"string"},"updated_after":{"type":"string","format":"date-time"},"updated_before":{"type":"string","format":"date-time"},"created_after":{"type":"string","format":"date-time"},"created_before":{"type":"string","format":"date-time"},"job_id":{"type":"integer"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":500}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"candidates.get","description":"Fetch a single Greenhouse candidate by id (includes nested applications, attachments, custom fields).","parameters":{"type":"object","properties":{"candidateId":{"type":"integer"}},"required":["candidateId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"candidates.create","description":"Create a Greenhouse candidate. Body is the Harvest candidate payload (first_name, last_name, emails[], phone_numbers[], addresses[], social_media_addresses[], applications[], …). On-Behalf-Of is required.","parameters":{"type":"object","properties":{"onBehalfOf":{"type":"string","description":"Greenhouse user id to attribute the action to (audit log + permission check)."},"first_name":{"type":"string"},"last_name":{"type":"string"},"company":{"type":"string"},"title":{"type":"string"},"phone_numbers":{"type":"array","items":{"type":"object"}},"addresses":{"type":"array","items":{"type":"object"}},"email_addresses":{"type":"array","items":{"type":"object"}},"website_addresses":{"type":"array","items":{"type":"object"}},"social_media_addresses":{"type":"array","items":{"type":"object"}},"educations":{"type":"array","items":{"type":"object"}},"employments":{"type":"array","items":{"type":"object"}},"tags":{"type":"array","items":{"type":"string"}},"custom_fields":{"type":"object"},"applications":{"type":"array","items":{"type":"object"}},"activity_feed_notes":{"type":"array","items":{"type":"object"}}},"required":["onBehalfOf","first_name","last_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"candidates.update","description":"Patch a Greenhouse candidate. Body is a partial Harvest candidate payload — only the fields you send are touched; arrays replace wholesale.","parameters":{"type":"object","properties":{"candidateId":{"type":"integer"},"onBehalfOf":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"company":{"type":"string"},"title":{"type":"string"},"phone_numbers":{"type":"array","items":{"type":"object"}},"addresses":{"type":"array","items":{"type":"object"}},"email_addresses":{"type":"array","items":{"type":"object"}},"website_addresses":{"type":"array","items":{"type":"object"}},"social_media_addresses":{"type":"array","items":{"type":"object"}},"tags":{"type":"array","items":{"type":"string"}},"custom_fields":{"type":"object"}},"required":["candidateId","onBehalfOf"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"candidates.anonymize","description":"GDPR/CCPA anonymize a candidate. Greenhouse permanently scrubs PII from the record; the action is irreversible.","parameters":{"type":"object","properties":{"candidateId":{"type":"integer"},"onBehalfOf":{"type":"string"},"fields":{"type":"string","description":"Comma-separated list of categories to scrub: `personal`, `application`, `referrer`. Defaults to all."}},"required":["candidateId","onBehalfOf"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"applications.list","description":"List applications across the tenant. Filter by status (active, hired, rejected), job_id, candidate_id, or last_activity windows.","parameters":{"type":"object","properties":{"status":{"type":"string","enum":["active","hired","rejected","converted"]},"job_id":{"type":"integer"},"candidate_id":{"type":"integer"},"last_activity_after":{"type":"string","format":"date-time"},"last_activity_before":{"type":"string","format":"date-time"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":500}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"applications.get","description":"Fetch a single Greenhouse application by id (includes current_stage, jobs[], rejection_reason, scorecards[]).","parameters":{"type":"object","properties":{"applicationId":{"type":"integer"}},"required":["applicationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"applications.advance","description":"Advance an application to the next interview stage in its job kit. Body may carry `from_stage_id` for a safety check (Greenhouse rejects if the application has already moved).","parameters":{"type":"object","properties":{"applicationId":{"type":"integer"},"onBehalfOf":{"type":"string"},"from_stage_id":{"type":"integer"}},"required":["applicationId","onBehalfOf"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"applications.reject","description":"Reject an application. Body carries rejection_reason (id) and optional rejection_email (subject, body, send_email_at).","parameters":{"type":"object","properties":{"applicationId":{"type":"integer"},"onBehalfOf":{"type":"string"},"rejection_reason":{"type":"object","description":"{ id: }"},"notes":{"type":"string"},"rejection_email":{"type":"object"}},"required":["applicationId","onBehalfOf"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"applications.hire","description":"Hire an application. Body carries start_date (ISO date) and opening_id (the job opening being filled). Greenhouse closes the opening on success.","parameters":{"type":"object","properties":{"applicationId":{"type":"integer"},"onBehalfOf":{"type":"string"},"start_date":{"type":"string","format":"date"},"opening_id":{"type":"integer"},"close_reason_id":{"type":"integer"}},"required":["applicationId","onBehalfOf","start_date","opening_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"jobs.list","description":"List jobs in the tenant. Filter by status (open, closed, draft), department_id, office_id, or created/updated windows.","parameters":{"type":"object","properties":{"status":{"type":"string","enum":["open","closed","draft"]},"department_id":{"type":"integer"},"office_id":{"type":"integer"},"requisition_id":{"type":"string"},"created_after":{"type":"string","format":"date-time"},"updated_after":{"type":"string","format":"date-time"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":500}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobs.get","description":"Fetch a single job by id (includes hiring_team, departments[], offices[], openings[], custom_fields).","parameters":{"type":"object","properties":{"jobId":{"type":"integer"}},"required":["jobId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobs.openings.list","description":"List openings (requisitions) on a job. Each opening can be filled by exactly one application.","parameters":{"type":"object","properties":{"jobId":{"type":"integer"},"status":{"type":"string","enum":["open","closed"]},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":500}},"required":["jobId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.list","description":"List Greenhouse users. Filter by email or updated_after. Use this to resolve the `onBehalfOf` id by email before mutations.","parameters":{"type":"object","properties":{"email":{"type":"string"},"updated_after":{"type":"string","format":"date-time"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":500}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.get","description":"Fetch a Greenhouse user by id (includes site_admin, employee_id, linked_candidate_ids).","parameters":{"type":"object","properties":{"userId":{"type":"integer"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"offers.list","description":"List offers, optionally scoped to an application or filtered by status (drafted, approved, sent, accepted, rejected).","parameters":{"type":"object","properties":{"application_id":{"type":"integer"},"status":{"type":"string","enum":["drafted","approval-sent","approved","sent","sent-manually","accepted","rejected","deprecated"]},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":500}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"offers.get","description":"Fetch a single offer by id (includes custom_fields, sent_at, resolved_at, opening, status).","parameters":{"type":"object","properties":{"offerId":{"type":"integer"}},"required":["offerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scorecards.list","description":"List scorecards, optionally scoped to an application. Includes interviewer, ratings, attributes, submitted_at.","parameters":{"type":"object","properties":{"application_id":{"type":"integer"},"updated_after":{"type":"string","format":"date-time"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":500}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scorecards.get","description":"Fetch a single scorecard by id.","parameters":{"type":"object","properties":{"scorecardId":{"type":"integer"}},"required":["scorecardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"prospects.create","description":"Create a prospect (a candidate not yet attached to a specific application/job stage). Body is the Harvest prospect payload; same field set as candidates plus `prospect_pool` and `prospect_owner`.","parameters":{"type":"object","properties":{"onBehalfOf":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"company":{"type":"string"},"title":{"type":"string"},"email_addresses":{"type":"array","items":{"type":"object"}},"phone_numbers":{"type":"array","items":{"type":"object"}},"social_media_addresses":{"type":"array","items":{"type":"object"}},"prospect_pool":{"type":"object","description":"{ id: }"},"prospect_stage":{"type":"object","description":"{ id: }"},"prospect_owner":{"type":"object","description":"{ id: }"},"custom_fields":{"type":"object"},"applications":{"type":"array","items":{"type":"object"}}},"required":["onBehalfOf","first_name","last_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"greenpt","displayName":"GreenPT","description":"Privacy-friendly GPT chat, embeddings, and audio transcription via the GreenPT API.","auth":{"kind":"api-key","hint":"GreenPT API key, sent as `Authorization: Bearer `."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"chat.completion","description":"Run a chat completion against a GreenPT model (green-l, green-l-raw, green-r, …).","parameters":{"type":"object","properties":{"model":{"type":"string","description":"GreenPT model id, e.g. green-l, green-l-raw, green-r."},"messages":{"type":"array","description":"OpenAI-shaped chat messages.","items":{"type":"object","properties":{"role":{"type":"string","enum":["system","user","assistant"]},"content":{"type":"string"}},"required":["role","content"]}},"stream":{"type":"boolean","description":"Server-sent streaming. Defaults to false."}},"required":["model","messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.embeddings","description":"Generate embeddings for one or more text inputs using the green-embedding model.","parameters":{"type":"object","properties":{"input":{"description":"Text to embed. Either a single string or an array of strings.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"model":{"type":"string","description":"Embedding model id. Defaults to green-embedding when omitted."},"encoding_format":{"type":"string","enum":["float","base64"],"description":"Return floats or base64-encoded vectors."}},"required":["input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transcribe.audio","description":"Transcribe an audio recording. Accepts a publicly reachable audio URL plus Deepgram-style flags (diarize, punctuate, smart_format, filler_words, numerals, sentiment, topics, intents).","parameters":{"type":"object","properties":{"audioUrl":{"type":"string","description":"URL of the audio file to transcribe (WAV, MP3, FLAC, …)."},"model":{"type":"string","description":"Speech-to-text model id."},"language":{"type":"string","description":"BCP-47 language code (en, fr, de, …). Auto-detected when omitted."},"diarize":{"type":"boolean","description":"Identify distinct speakers."},"punctuate":{"type":"boolean","description":"Add punctuation and capitalisation."},"smart_format":{"type":"boolean","description":"Apply formatting for readability."},"filler_words":{"type":"boolean","description":"Preserve filler words."},"numerals":{"type":"boolean","description":"Convert spelled-out numbers to numerals."},"sentiment":{"type":"boolean","description":"Run sentiment analysis on the transcript."},"topics":{"type":"boolean","description":"Detect topics throughout the transcript."},"intents":{"type":"boolean","description":"Recognise speaker intents throughout the transcript."}},"required":["audioUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"greip","displayName":"Greip","description":"Detect and prevent fraud with Greip IP, BIN, ASN, email, phone, and profanity lookups.","auth":{"kind":"api-key","hint":"Greip API token (passed via the `key` query parameter)."},"category":"other","defaultConsistencyModel":"cache","capabilities":[{"name":"asn.lookup","description":"Look up an Autonomous System Number (AS Number) and return ownership + routing metadata.","parameters":{"type":"object","properties":{"asn":{"type":"string","description":"AS Number (e.g., AS6167 or 6167)."},"format":{"type":"string","enum":["JSON","XML","CSV","Newline"]},"mode":{"type":"string","enum":["live","test"]},"lang":{"type":"string"}},"required":["asn"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bin.lookup","description":"Look up a payment card BIN/IIN to retrieve issuer, brand, scheme, and country.","parameters":{"type":"object","properties":{"bin":{"type":"string","description":"Card BIN/IIN, minimum 6 digits."},"format":{"type":"string","enum":["JSON","XML","CSV","Newline"]},"mode":{"type":"string","enum":["live","test"]},"lang":{"type":"string"},"userID":{"type":"string"}},"required":["bin"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"ip.lookup","description":"Look up an IPv4 or IPv6 address for geolocation, security risk, currency, and timezone.","parameters":{"type":"object","properties":{"ip":{"type":"string","description":"IPv4 or IPv6 address to look up."},"params":{"type":"string","description":"Comma-separated module list (e.g., security,currency,timezone,location)."},"format":{"type":"string","enum":["JSON","XML","CSV","Newline"]},"mode":{"type":"string","enum":["live","test"]},"lang":{"type":"string"},"userID":{"type":"string"}},"required":["ip"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"email.validation","description":"Validate an email address for syntax, deliverability, and disposable / spam signals.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address to validate."},"format":{"type":"string","enum":["JSON","XML","CSV","Newline"]},"mode":{"type":"string","enum":["live","test"]},"userID":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"phone.validation","description":"Validate a phone number against its ISO country code for line type and reachability.","parameters":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number in international or local format."},"countryCode":{"type":"string","description":"ISO 3166-1 alpha-2 country code (e.g., US, GB)."},"format":{"type":"string","enum":["JSON","XML","CSV","Newline"]},"mode":{"type":"string","enum":["live","test"]},"userID":{"type":"string"}},"required":["phone","countryCode"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"profanity.detection","description":"Score arbitrary text for profanity; optionally return matched words and safety score.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"Text to scan for profanity."},"scoreOnly":{"type":"string","enum":["yes","no"]},"listBadWords":{"type":"string","enum":["yes","no"]},"format":{"type":"string","enum":["JSON","XML","CSV","Newline"]},"mode":{"type":"string","enum":["live","test"]},"userID":{"type":"string"}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"griptape","displayName":"Griptape Cloud","description":"Create and run AI agents and structures. Execute assistant runs, structure runs, and manage automated workflows with Griptape Cloud.","auth":{"kind":"api-key","hint":"Griptape Cloud API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"assistants.run.create","description":"Create an assistant run with input and optional thread settings.","parameters":{"type":"object","properties":{"assistantId":{"type":"string","description":"ID of the assistant to run"},"input":{"type":"string","description":"Input to provide to the assistant"},"createNewThread":{"type":"boolean","description":"Create a new thread for this run"},"threadId":{"type":"string","description":"Optional thread ID to use for the run"}},"required":["assistantId","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assistants.run.get","description":"Retrieve the status and results of an assistant run.","parameters":{"type":"object","properties":{"assistantId":{"type":"string","description":"ID of the assistant"},"runId":{"type":"string","description":"ID of the run to retrieve"}},"required":["assistantId","runId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"structures.run.create","description":"Create a structure run with input and input arguments.","parameters":{"type":"object","properties":{"structureId":{"type":"string","description":"ID of the structure to run"},"input":{"type":"string","description":"Input to provide to the structure"},"inputArgs":{"type":"object","description":"Input arguments for the structure run"}},"required":["structureId","input","inputArgs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"structures.run.get","description":"Retrieve the status and results of a structure run.","parameters":{"type":"object","properties":{"structureId":{"type":"string","description":"ID of the structure"},"runId":{"type":"string","description":"ID of the run to retrieve"}},"required":["structureId","runId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"grist","displayName":"Grist","description":"Create, update, and search records in Grist documents.","auth":{"kind":"api-key","hint":"Grist API Key and Domain URL (e.g., https://example.grist.org)"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.create","description":"Create a new record in a Grist table.","parameters":{"type":"object","properties":{"docId":{"type":"string","description":"Document ID"},"tableId":{"type":"string","description":"Table ID"},"record":{"type":"object","description":"Record fields"}},"required":["docId","tableId","record"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Update an existing record in a Grist table.","parameters":{"type":"object","properties":{"docId":{"type":"string","description":"Document ID"},"tableId":{"type":"string","description":"Table ID"},"recordId":{"type":"number","description":"Record ID"},"record":{"type":"object","description":"Fields to update"}},"required":["docId","tableId","recordId","record"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.search","description":"Search for records matching a column value.","parameters":{"type":"object","properties":{"docId":{"type":"string","description":"Document ID"},"tableId":{"type":"string","description":"Table ID"},"column":{"type":"string","description":"Column to search in"},"value":{"type":"string","description":"Search value (case-sensitive, exact match, Text columns only)"}},"required":["docId","tableId","column","value"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.add","description":"Add one or more records to a Grist table.","parameters":{"type":"object","properties":{"docId":{"type":"string","description":"Document ID"},"tableId":{"type":"string","description":"Table ID"},"records":{"type":"array","description":"Array of `{ fields: { ... } }` record entries to insert.","items":{"type":"object"}}},"required":["docId","tableId","records"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.delete","description":"Delete one or more records by id from a Grist table.","parameters":{"type":"object","properties":{"docId":{"type":"string","description":"Document ID"},"tableId":{"type":"string","description":"Table ID"},"recordIds":{"type":"array","description":"Array of numeric record ids to delete.","items":{"type":"number"}}},"required":["docId","tableId","recordIds"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tables.create","description":"Create one or more tables in a Grist document.","parameters":{"type":"object","properties":{"docId":{"type":"string","description":"Document ID"},"tableId":{"type":"string","description":"Table ID (string identifier) for the new table."},"columns":{"type":"array","description":"Column definitions, e.g. `[{ id: \"Name\", fields: { label: \"Name\", type: \"Text\" } }]`.","items":{"type":"object"}}},"required":["docId","tableId","columns"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"attachments.upload","description":"Upload attachments to a Grist record.","parameters":{"type":"object","properties":{"docId":{"type":"string","description":"Document ID"},"tableId":{"type":"string","description":"Table ID"},"recordId":{"type":"number","description":"Record ID"},"attachment":{"type":"string","description":"Attachment file content (base64 or URL)"},"attachmentName":{"type":"string","description":"Custom name for the attachment (optional)"}},"required":["docId","tableId","recordId","attachment"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"guidelite","displayName":"GuideLite","description":"Send prompts to a GuideLite assistant, continue prior conversations, and poll for new lead submissions.","auth":{"kind":"api-key","hint":"GuideLite API key (Workspace → Settings → API Keys)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"assistant.sendPrompt","description":"Send an input message to a GuideLite assistant. If conversationId is omitted, a new conversation is created and returned in the response.","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The input message to be processed by the assistant."},"conversationId":{"type":"string","description":"Conversation ID of a previous conversation to continue. Omit to start a new conversation."},"assistantId":{"type":"string","description":"Optional assistant ID when the workspace has multiple assistants. Defaults to the workspace default assistant."}},"required":["message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.get","description":"Fetch the message history of an existing GuideLite conversation.","parameters":{"type":"object","properties":{"conversationId":{"type":"string","description":"Exact conversation ID."},"limit":{"type":"integer","description":"Maximum messages to return."}},"required":["conversationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversations.list.recent","description":"List recently active GuideLite conversations in the workspace, ordered by most recent activity.","parameters":{"type":"object","properties":{"since":{"type":"string","description":"ISO-8601 timestamp; only return conversations updated after this point."},"assistantId":{"type":"string","description":"Restrict the list to a single assistant."},"limit":{"type":"integer","description":"Maximum conversations to return."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.list.recent","description":"List recently submitted leads — used by the newLeadSubmission polling trigger upstream.","parameters":{"type":"object","properties":{"since":{"type":"string","description":"ISO-8601 timestamp; only return leads submitted after this point."},"assistantId":{"type":"string","description":"Restrict the list to leads captured by a single assistant."},"limit":{"type":"integer","description":"Maximum leads to return."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"guide.create","description":"Create a GuideLite guide (assistant). Maps to POST /assistants — the upstream resource that backs \"guides\" in the catalog.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Display name of the new guide."},"description":{"type":"string","description":"Optional description shown in the workspace UI."},"systemPrompt":{"type":"string","description":"Optional system prompt configuring the guide behaviour."},"knowledgeBaseIds":{"type":"array","description":"Optional knowledge-base ids to wire to the guide.","items":{"type":"string"}}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"guide.update","description":"Update an existing GuideLite guide (assistant).","parameters":{"type":"object","properties":{"guideId":{"type":"string","description":"Assistant id to update."},"name":{"type":"string"},"description":{"type":"string"},"systemPrompt":{"type":"string"},"knowledgeBaseIds":{"type":"array","items":{"type":"string"}}},"required":["guideId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"guide.delete","description":"Delete a GuideLite guide (assistant) by id.","parameters":{"type":"object","properties":{"guideId":{"type":"string","description":"Assistant id to delete."}},"required":["guideId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assistants.list","description":"List assistants configured in the GuideLite workspace.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum assistants to return."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"gusto","displayName":"Gusto","description":"Read Gusto companies, employees, jobs, compensations, contractors, and payrolls; create payrolls and run mutations against the Embedded API.","auth":{"kind":"oauth2","authorizationUrl":"https://api.gusto.com/oauth/authorize","tokenUrl":"https://api.gusto.com/oauth/token","scopes":["companies:read","employees:read","employees:write","jobs:read","jobs:write","compensations:read","compensations:write","contractors:read","contractors:write","payrolls:read","payrolls:write"],"clientIdEnv":"GUSTO_OAUTH_CLIENT_ID","clientSecretEnv":"GUSTO_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"me.get","description":"Return the authenticated user (current_user) including the companies and roles the token can access.","parameters":{"type":"object","properties":{}},"requiredScopes":["companies:read"],"class":"read"},{"name":"companies.get","description":"Read a Gusto company by uuid.","parameters":{"type":"object","properties":{"company_uuid":{"type":"string"}},"required":["company_uuid"]},"requiredScopes":["companies:read"],"class":"read"},{"name":"employees.list","description":"List the employees of a company. Supports `terminated` and pagination via `page` / `per`.","parameters":{"type":"object","properties":{"company_uuid":{"type":"string"},"terminated":{"type":"boolean"},"page":{"type":"integer","minimum":1},"per":{"type":"integer","minimum":1,"maximum":100}},"required":["company_uuid"]},"requiredScopes":["employees:read"],"class":"read"},{"name":"employees.get","description":"Read a Gusto employee by uuid.","parameters":{"type":"object","properties":{"employee_uuid":{"type":"string"}},"required":["employee_uuid"]},"requiredScopes":["employees:read"],"class":"read"},{"name":"employees.create","description":"Create an employee on a company. `first_name`, `last_name`, and `work_email` are required.","parameters":{"type":"object","properties":{"company_uuid":{"type":"string"},"first_name":{"type":"string"},"middle_initial":{"type":"string"},"last_name":{"type":"string"},"date_of_birth":{"type":"string","format":"date"},"email":{"type":"string","format":"email"},"work_email":{"type":"string","format":"email"},"ssn":{"type":"string"},"self_onboarding":{"type":"boolean"}},"required":["company_uuid","first_name","last_name"]},"requiredScopes":["employees:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"employees.update","description":"Update a Gusto employee. Caller must supply `version` (the optimistic-concurrency token from the prior read).","parameters":{"type":"object","properties":{"employee_uuid":{"type":"string"},"version":{"type":"string"},"first_name":{"type":"string"},"middle_initial":{"type":"string"},"last_name":{"type":"string"},"date_of_birth":{"type":"string","format":"date"},"email":{"type":"string","format":"email"},"work_email":{"type":"string","format":"email"},"two_percent_shareholder":{"type":"boolean"}},"required":["employee_uuid","version"]},"requiredScopes":["employees:write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"employees.terminate","description":"Create a termination record for an employee.","parameters":{"type":"object","properties":{"employee_uuid":{"type":"string"},"effective_date":{"type":"string","format":"date"},"run_termination_payroll":{"type":"boolean"}},"required":["employee_uuid","effective_date"]},"requiredScopes":["employees:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"jobs.list","description":"List the jobs assigned to an employee.","parameters":{"type":"object","properties":{"employee_uuid":{"type":"string"}},"required":["employee_uuid"]},"requiredScopes":["jobs:read"],"class":"read"},{"name":"jobs.create","description":"Create a job for an employee.","parameters":{"type":"object","properties":{"employee_uuid":{"type":"string"},"title":{"type":"string"},"location_uuid":{"type":"string"},"hire_date":{"type":"string","format":"date"},"two_percent_shareholder":{"type":"boolean"}},"required":["employee_uuid","title","hire_date"]},"requiredScopes":["jobs:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"jobs.update","description":"Update a job. Caller must supply `version` from the prior read.","parameters":{"type":"object","properties":{"job_uuid":{"type":"string"},"version":{"type":"string"},"title":{"type":"string"},"location_uuid":{"type":"string"},"hire_date":{"type":"string","format":"date"},"two_percent_shareholder":{"type":"boolean"}},"required":["job_uuid","version"]},"requiredScopes":["jobs:write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"compensations.list","description":"List compensations attached to a job.","parameters":{"type":"object","properties":{"job_uuid":{"type":"string"}},"required":["job_uuid"]},"requiredScopes":["compensations:read"],"class":"read"},{"name":"compensations.create","description":"Create a compensation record on a job. `rate` is a stringified decimal, `payment_unit` is one of \"Hour\" | \"Week\" | \"Month\" | \"Year\" | \"Paycheck\".","parameters":{"type":"object","properties":{"job_uuid":{"type":"string"},"rate":{"type":"string"},"payment_unit":{"type":"string","enum":["Hour","Week","Month","Year","Paycheck"]},"flsa_status":{"type":"string","enum":["Exempt","Salaried Nonexempt","Nonexempt","Owner"]},"effective_date":{"type":"string","format":"date"},"adjust_for_minimum_wage":{"type":"boolean"}},"required":["job_uuid","rate","payment_unit","flsa_status","effective_date"]},"requiredScopes":["compensations:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"compensations.update","description":"Update a compensation record. Caller must supply `version` from the prior read.","parameters":{"type":"object","properties":{"compensation_uuid":{"type":"string"},"version":{"type":"string"},"rate":{"type":"string"},"payment_unit":{"type":"string","enum":["Hour","Week","Month","Year","Paycheck"]},"flsa_status":{"type":"string","enum":["Exempt","Salaried Nonexempt","Nonexempt","Owner"]},"effective_date":{"type":"string","format":"date"},"adjust_for_minimum_wage":{"type":"boolean"}},"required":["compensation_uuid","version"]},"requiredScopes":["compensations:write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contractors.list","description":"List the contractors of a company.","parameters":{"type":"object","properties":{"company_uuid":{"type":"string"},"page":{"type":"integer","minimum":1},"per":{"type":"integer","minimum":1,"maximum":100}},"required":["company_uuid"]},"requiredScopes":["contractors:read"],"class":"read"},{"name":"contractors.get","description":"Read a contractor by uuid.","parameters":{"type":"object","properties":{"contractor_uuid":{"type":"string"}},"required":["contractor_uuid"]},"requiredScopes":["contractors:read"],"class":"read"},{"name":"contractors.create","description":"Create a contractor on a company. `type` is \"Individual\" or \"Business\"; for \"Business\" supply `business_name`, for \"Individual\" supply `first_name` + `last_name`.","parameters":{"type":"object","properties":{"company_uuid":{"type":"string"},"type":{"type":"string","enum":["Individual","Business"]},"wage_type":{"type":"string","enum":["Fixed","Hourly"]},"first_name":{"type":"string"},"last_name":{"type":"string"},"business_name":{"type":"string"},"ein":{"type":"string"},"email":{"type":"string","format":"email"},"start_date":{"type":"string","format":"date"},"self_onboarding":{"type":"boolean"}},"required":["company_uuid","type","wage_type","start_date"]},"requiredScopes":["contractors:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payrolls.list","description":"List a company's payrolls. Supports `processed`, `include_off_cycle`, `start_date`, `end_date` filters.","parameters":{"type":"object","properties":{"company_uuid":{"type":"string"},"processed":{"type":"boolean"},"include_off_cycle":{"type":"boolean"},"start_date":{"type":"string","format":"date"},"end_date":{"type":"string","format":"date"},"page":{"type":"integer","minimum":1},"per":{"type":"integer","minimum":1,"maximum":100}},"required":["company_uuid"]},"requiredScopes":["payrolls:read"],"class":"read"},{"name":"payrolls.get","description":"Read a single payroll. `include` accepts comma-separated extras (e.g. \"benefits,deductions,taxes\").","parameters":{"type":"object","properties":{"company_uuid":{"type":"string"},"payroll_uuid":{"type":"string"},"include":{"type":"string"},"show_calculation":{"type":"boolean"}},"required":["company_uuid","payroll_uuid"]},"requiredScopes":["payrolls:read"],"class":"read"},{"name":"payrolls.create_off_cycle","description":"Create an off-cycle payroll for a company. `off_cycle_reason` is one of \"Bonus\" | \"Correction\" | \"Dismissed Employee\" | \"Transition From Old Pay Schedule\".","parameters":{"type":"object","properties":{"company_uuid":{"type":"string"},"off_cycle_reason":{"type":"string","enum":["Bonus","Correction","Dismissed Employee","Transition From Old Pay Schedule"]},"start_date":{"type":"string","format":"date"},"end_date":{"type":"string","format":"date"},"check_date":{"type":"string","format":"date"},"employee_uuids":{"type":"array","items":{"type":"string"}},"withholding_pay_period":{"type":"string","enum":["Every week","Every other week","Twice per month","Monthly","Quarterly","Semiannually","Annually"]}},"required":["company_uuid","off_cycle_reason","start_date","end_date","check_date"]},"requiredScopes":["payrolls:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payrolls.submit","description":"Submit a previously-prepared payroll for processing. Once submitted Gusto begins funds movement.","parameters":{"type":"object","properties":{"company_uuid":{"type":"string"},"payroll_uuid":{"type":"string"}},"required":["company_uuid","payroll_uuid"]},"requiredScopes":["payrolls:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payrolls.cancel","description":"Cancel a submitted-but-not-yet-processed payroll.","parameters":{"type":"object","properties":{"company_uuid":{"type":"string"},"payroll_uuid":{"type":"string"}},"required":["company_uuid","payroll_uuid"]},"requiredScopes":["payrolls:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"harvest","displayName":"Harvest","description":"Read Harvest invoices, projects, tasks, clients, estimates, expenses, time entries, roles, users, and run the uninvoiced report.","auth":{"kind":"oauth2","authorizationUrl":"https://id.getharvest.com/oauth2/authorize","tokenUrl":"https://id.getharvest.com/api/v2/oauth2/token","scopes":["harvest:all"],"clientIdEnv":"HARVEST_OAUTH_CLIENT_ID","clientSecretEnv":"HARVEST_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"invoices.get","description":"List invoices in a Harvest account, optionally filtered by client/project/state/date window.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Harvest Account ID (sent as the Harvest-Account-Id header)."},"client_id":{"type":"string"},"project_id":{"type":"string"},"state":{"type":"string","enum":["draft","open","paid","closed"]},"updated_since":{"type":"string","description":"ISO-8601 timestamp."},"from":{"type":"string","description":"ISO-8601 date."},"to":{"type":"string","description":"ISO-8601 date."},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":2000}},"required":["accountId"]},"requiredScopes":["harvest:all"],"class":"read"},{"name":"projects.get","description":"List projects, optionally filtered by client or active state.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"is_active":{"type":"boolean"},"client_id":{"type":"string"},"updated_since":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":2000}},"required":["accountId"]},"requiredScopes":["harvest:all"],"class":"read"},{"name":"tasks.get","description":"List billable/non-billable tasks defined on the Harvest account.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"is_active":{"type":"boolean"},"updated_since":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":2000}},"required":["accountId"]},"requiredScopes":["harvest:all"],"class":"read"},{"name":"clients.get","description":"List clients in the Harvest account.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"is_active":{"type":"boolean"},"updated_since":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":2000}},"required":["accountId"]},"requiredScopes":["harvest:all"],"class":"read"},{"name":"estimates.get","description":"List estimates, optionally filtered by client/state/updated_since.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"client_id":{"type":"string"},"state":{"type":"string","enum":["draft","sent","accepted","declined"]},"updated_since":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":2000}},"required":["accountId"]},"requiredScopes":["harvest:all"],"class":"read"},{"name":"expenses.get","description":"List expenses in the account, with optional user/client/project/billed/date filters.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"user_id":{"type":"string"},"client_id":{"type":"string"},"project_id":{"type":"string"},"is_billed":{"type":"boolean"},"updated_since":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":2000}},"required":["accountId"]},"requiredScopes":["harvest:all"],"class":"read"},{"name":"time.entries.get","description":"List time entries with optional user/client/project/task/billed/running/date filters.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"user_id":{"type":"string"},"client_id":{"type":"string"},"project_id":{"type":"string"},"task_id":{"type":"string"},"is_billed":{"type":"boolean"},"is_running":{"type":"boolean"},"updated_since":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":2000}},"required":["accountId"]},"requiredScopes":["harvest:all"],"class":"read"},{"name":"roles.get","description":"List user roles defined in the Harvest account.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":2000}},"required":["accountId"]},"requiredScopes":["harvest:all"],"class":"read"},{"name":"users.get","description":"List Harvest users in the account.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"is_active":{"type":"boolean"},"updated_since":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":2000}},"required":["accountId"]},"requiredScopes":["harvest:all"],"class":"read"},{"name":"reports.uninvoiced","description":"Pull the uninvoiced report for a date window — totals of uninvoiced hours/expenses per project.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"from":{"type":"string","description":"Window start date (YYYY-MM-DD)."},"to":{"type":"string","description":"Window end date (YYYY-MM-DD)."},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":2000}},"required":["accountId","from","to"]},"requiredScopes":["harvest:all"],"class":"read"}]},{"kind":"hashi-corp-vault","displayName":"HashiCorp Vault","description":"Read, write, list, and delete secrets in a HashiCorp Vault KV v2 secrets engine.","auth":{"kind":"api-key","hint":"Vault client token (X-Vault-Token). For AppRole, exchange role_id+secret_id for a token first."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"secrets.read","description":"Read a secret from a KV v2 secrets engine. Pass version=0 (or omit) for the latest version.","parameters":{"type":"object","properties":{"secretEngine":{"type":"string","description":"KV v2 mount path (e.g. \"secret\")."},"secretPath":{"type":"string","description":"Secret path within the engine (e.g. \"myapp/database\")."},"version":{"type":"integer","description":"Optional secret version; omit or 0 for latest."}},"required":["secretEngine","secretPath"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"secrets.write","description":"Create or update a secret in a KV v2 secrets engine.","parameters":{"type":"object","properties":{"secretEngine":{"type":"string"},"secretPath":{"type":"string"},"secretData":{"type":"object","description":"Key/value payload to persist under data."}},"required":["secretEngine","secretPath","secretData"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"secrets.delete","description":"Delete a secret and all of its versions from a KV v2 secrets engine.","parameters":{"type":"object","properties":{"secretEngine":{"type":"string"},"secretPath":{"type":"string"}},"required":["secretEngine","secretPath"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"kv.write","description":"Create or update a KV v2 secret (alias of secrets.write surfaced under the kv.* namespace).","parameters":{"type":"object","properties":{"secretEngine":{"type":"string"},"secretPath":{"type":"string"},"secretData":{"type":"object","description":"Key/value payload to persist under data."}},"required":["secretEngine","secretPath","secretData"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"kv.delete","description":"Delete a KV v2 secret and all versions (alias of secrets.delete under the kv.* namespace).","parameters":{"type":"object","properties":{"secretEngine":{"type":"string"},"secretPath":{"type":"string"}},"required":["secretEngine","secretPath"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"token.revoke","description":"Revoke a Vault auth token (and its children). POSTs the token to /v1/auth/token/revoke.","parameters":{"type":"object","properties":{"token":{"type":"string","description":"The Vault token to revoke."}},"required":["token"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lease.revoke","description":"Revoke a Vault lease immediately. POSTs the lease id to /v1/sys/leases/revoke.","parameters":{"type":"object","properties":{"leaseId":{"type":"string","description":"The lease id to revoke."},"sync":{"type":"boolean","description":"If true, the call blocks until revocation completes."}},"required":["leaseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"secrets.list","description":"List secret keys under a path in a KV v2 secrets engine.","parameters":{"type":"object","properties":{"secretEngine":{"type":"string"},"listPath":{"type":"string","description":"Path prefix to list (e.g. \"myapp/\")."}},"required":["secretEngine","listPath"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"hastewire","displayName":"Hastewire","description":"Detect AI-generated text and humanize AI-sounding prose via the Hastewire API.","auth":{"kind":"api-key","hint":"Hastewire API key (account dashboard → API). Sent as `Authorization: Bearer `."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"detect.text","description":"Classify a passage of text as AI- or human-written. Returns a probability score plus a per-span breakdown.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"The text to analyze. Required."}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"humanize.text","description":"Rewrite AI-sounding text so it reads as if written by a human. Optionally constrain the rewrite to a particular writing style.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"The text to rewrite. Required."},"style":{"type":"string","description":"Optional writing style for the rewrite (e.g. \"casual\", \"formal\", \"academic\"). Maps to the catalog `style` auth field."}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"heartbeat","displayName":"Heartbeat","description":"Monitoring and alerting made easy. Create and manage users in your Heartbeat community.","auth":{"kind":"api-key","hint":"Heartbeat API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.create","description":"Create a new user in Heartbeat community.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"The user name"},"email":{"type":"string","description":"The user email"},"role_id":{"type":"string","description":"The role the user should have"},"group_ids":{"type":"array","items":{"type":"string"},"description":"A list of the ids of the groups that the user should belong to"},"profile_picture":{"type":"string","description":"A Data URI scheme in the JPG, GIF, or PNG format. Ensure you use the proper content type (image/jpeg, image/png, image/gif) that matches the image data being provided"},"bio":{"type":"string","description":"The user bio"},"status":{"type":"string","description":"The user status"},"linkedin":{"type":"string","description":"A link to the user LinkedIn profile"},"twitter":{"type":"string","description":"A link to the user Twitter profile"},"instagram":{"type":"string","description":"A link to the user Instagram profile"},"create_introduction_thread":{"type":"boolean","description":"If true and a value for bio is provided, an introduction thread for the user will be created in the channel designated for introductions in your community settings"}},"required":["name","email","role_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"threads.create","description":"Create a new thread in a Heartbeat channel.","parameters":{"type":"object","properties":{"channel_id":{"type":"string","description":"The id of the channel where the thread will be created."},"title":{"type":"string","description":"The title of the thread."},"body":{"type":"string","description":"The body of the thread."},"sender_user_id":{"type":"string","description":"The id of the user who will be recorded as the author of the thread."}},"required":["channel_id","title","body","sender_user_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.create","description":"Post a message to an existing Heartbeat thread.","parameters":{"type":"object","properties":{"thread_id":{"type":"string","description":"The id of the thread to post the message to."},"body":{"type":"string","description":"The body of the message."},"sender_user_id":{"type":"string","description":"The id of the user who will be recorded as the author of the message."}},"required":["thread_id","body","sender_user_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"hedy","displayName":"Hedy","description":"AI-powered meeting intelligence — manage topics, sessions, and custom context for meeting analysis and insights.","auth":{"kind":"api-key","hint":"Hedy API key. Generate one from your Hedy dashboard under Settings → API."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"topics.create","description":"Create a new topic for organizing meetings and sessions within Hedy.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Name of the topic (max 100 characters)."},"description":{"type":"string","description":"Description of the topic (max 500 characters)."},"color":{"type":"string","description":"Hex color code for the topic (e.g., #4A90D9)."},"iconName":{"type":"string","description":"Material icon name for the topic (e.g., groups)."},"topicContext":{"type":"string","description":"Custom instructions for AI processing of sessions in this topic (max 20,000 characters)."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"topics.get","description":"Retrieve details for a specific topic.","parameters":{"type":"object","properties":{"topicId":{"type":"string","description":"The unique identifier of the topic."}},"required":["topicId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"topics.list","description":"List all topics in your Hedy workspace.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of topics to return (default 50)."},"offset":{"type":"integer","description":"Pagination offset (default 0)."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"topics.update","description":"Update an existing topic.","parameters":{"type":"object","properties":{"topicId":{"type":"string","description":"The unique identifier of the topic."},"name":{"type":"string","description":"Updated topic name."},"description":{"type":"string","description":"Updated topic description."},"color":{"type":"string","description":"Updated hex color code."},"iconName":{"type":"string","description":"Updated Material icon name."},"topicContext":{"type":"string","description":"Updated custom AI processing instructions."}},"required":["topicId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"sessions.get","description":"Get details for a specific meeting session.","parameters":{"type":"object","properties":{"sessionId":{"type":"string","description":"The unique identifier of the session."}},"required":["sessionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sessions.list_by_topic","description":"List all sessions within a specific topic.","parameters":{"type":"object","properties":{"topicId":{"type":"string","description":"The topic ID to list sessions from."},"limit":{"type":"integer","description":"Maximum number of sessions to return (default 50)."},"offset":{"type":"integer","description":"Pagination offset (default 0)."}},"required":["topicId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"context.create","description":"Create or update a session context — custom instructions or domain knowledge for AI analysis of meetings in a topic.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"Title of the session context (max 200 characters)."},"content":{"type":"string","description":"Instructions or context for AI analysis (max 20,000 characters)."},"isDefault":{"type":"boolean","description":"Whether this context should be the default for new sessions."}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"context.get","description":"Retrieve a specific session context by ID.","parameters":{"type":"object","properties":{"contextId":{"type":"string","description":"The unique identifier of the context."}},"required":["contextId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"topics.delete","description":"Delete a Hedy topic. Sessions stored under the topic become orphaned per the upstream API contract.","parameters":{"type":"object","properties":{"topicId":{"type":"string","description":"The unique identifier of the topic to delete."}},"required":["topicId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"context.update","description":"Update an existing session context (title, content, default flag).","parameters":{"type":"object","properties":{"contextId":{"type":"string","description":"The unique identifier of the context to update."},"title":{"type":"string","description":"Updated title."},"content":{"type":"string","description":"Updated content."},"isDefault":{"type":"boolean","description":"Updated default flag."}},"required":["contextId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"context.delete","description":"Delete a Hedy session context entry.","parameters":{"type":"object","properties":{"contextId":{"type":"string","description":"The unique identifier of the context to delete."}},"required":["contextId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"hellosign","displayName":"Dropbox Sign","description":"Send documents for e-signature via Dropbox Sign templates, poll signature-request status, cancel in-flight requests, and react to push events when signers complete.","auth":{"kind":"oauth2","authorizationUrl":"https://app.hellosign.com/oauth/authorize","tokenUrl":"https://app.hellosign.com/oauth/token","scopes":["basic_account_info","request_signature","signature_request_access"],"clientIdEnv":"HELLOSIGN_OAUTH_CLIENT_ID","clientSecretEnv":"HELLOSIGN_OAUTH_CLIENT_SECRET","sendScopeParam":false},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"get_signature_request","class":"read","description":"Fetch the current status of a Dropbox Sign signature request and each signer.","parameters":{"type":"object","properties":{"signatureRequestId":{"type":"string"}},"required":["signatureRequestId"]},"requiredScopes":["signature_request_access"]},{"name":"send_signature_request","class":"mutation","description":"Send a template for signature to one or more signers. The MutationGuard idempotency-key short-circuit prevents duplicate sends on retry; tangle_idempotency_key is also written into metadata for forensic dedup.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"templateIds":{"type":"array","items":{"type":"string"},"description":"One or more Dropbox Sign template ids to compose into the signature request."},"signers":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","description":"Template role name as configured in Dropbox Sign."},"email":{"type":"string"},"name":{"type":"string"}},"required":["role","email","name"]}},"subject":{"type":"string"},"message":{"type":"string"},"testMode":{"type":"boolean","description":"When true, no real signature is collected."},"customFields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}},"required":["name","value"]}}},"required":["templateIds","signers"]},"requiredScopes":["request_signature"]},{"name":"cancel_signature_request","class":"mutation","description":"Cancel an in-flight signature request. Idempotent — a second cancel of an already-canceled request returns committed with idempotentReplay=true.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"signatureRequestId":{"type":"string"}},"required":["signatureRequestId"]},"requiredScopes":["request_signature"]},{"name":"remind_signature_request","class":"mutation","description":"Send a reminder email to a signer who has not yet signed. POST /signature_request/remind/:id with the signer email address; safe to retry — Dropbox Sign rate-limits reminders per signer per request, so a duplicate reminder is a no-op on its end.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"signatureRequestId":{"type":"string"},"emailAddress":{"type":"string","description":"Email address of the signer to remind."},"name":{"type":"string","description":"Optional display name of the signer (must match the original signer name on multi-signer requests)."}},"required":["signatureRequestId","emailAddress"]},"requiredScopes":["request_signature"]}]},{"kind":"helpscout","displayName":"Help Scout","description":"Search and update Help Scout conversations, reply to support tickets, and read customer profiles.","auth":{"kind":"oauth2","authorizationUrl":"https://secure.helpscout.net/authentication/authorizeClientApplication","tokenUrl":"https://api.helpscout.net/v2/oauth2/token","scopes":["tickets.search.read","tickets.reply.write","customers.read"],"clientIdEnv":"HELPSCOUT_OAUTH_CLIENT_ID","clientSecretEnv":"HELPSCOUT_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tickets.search","description":"Search Help Scout conversations using the documented query DSL (e.g. status:active subject:\"login\").","parameters":{"type":"object","properties":{"query":{"type":"string"},"page":{"type":"integer","minimum":1},"size":{"type":"integer","minimum":1,"maximum":50}},"required":["query"]},"requiredScopes":["tickets.search.read"],"class":"read"},{"name":"tickets.read","description":"Read a single Help Scout conversation by id.","parameters":{"type":"object","properties":{"conversationId":{"type":"string"}},"required":["conversationId"]},"requiredScopes":["tickets.search.read"],"class":"read"},{"name":"customers.read","description":"Read a Help Scout customer profile.","parameters":{"type":"object","properties":{"customerId":{"type":"string"}},"required":["customerId"]},"requiredScopes":["customers.read"],"class":"read"},{"name":"tickets.reply","description":"Post a reply on a Help Scout conversation (creates a customer-visible reply thread).","parameters":{"type":"object","properties":{"conversationId":{"type":"string"},"text":{"type":"string"},"customer":{"type":"object"},"user":{"type":"integer"},"attachments":{"type":"array","items":{"type":"object"}}},"required":["conversationId","text","customer"]},"requiredScopes":["tickets.reply.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.update","description":"Update conversation status, assignee, or tags via a JSON-patch op.","parameters":{"type":"object","properties":{"conversationId":{"type":"string"},"op":{"type":"string","enum":["replace","add","remove","move"]},"path":{"type":"string"},"value":{}},"required":["conversationId","op","path"]},"requiredScopes":["tickets.reply.write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"conversations.create","description":"Create a new Help Scout conversation (support ticket). Caller supplies subject, customer, mailboxId and the initial thread payload. Help Scout assigns a unique conversation id.","parameters":{"type":"object","properties":{"subject":{"type":"string"},"customer":{"type":"object","description":"Customer envelope: { email } at minimum; full Help Scout customer schema accepted."},"mailboxId":{"type":"integer"},"type":{"type":"string","enum":["email","chat","phone"]},"status":{"type":"string","enum":["active","pending","closed","spam"]},"threads":{"type":"array","description":"Initial thread payload — at least one thread is required by the upstream API.","items":{"type":"object"}},"tags":{"type":"array","items":{"type":"string"}},"assignTo":{"type":"integer"}},"required":["subject","customer","mailboxId","type","threads"]},"requiredScopes":["tickets.reply.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.delete","description":"Delete a Help Scout conversation. Help Scout returns 204 on success; a second delete returns 404 (treated as committed-replay by the caller).","parameters":{"type":"object","properties":{"conversationId":{"type":"string"}},"required":["conversationId"]},"requiredScopes":["tickets.reply.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"heygen","displayName":"HeyGen","description":"Generate and manage AI avatar videos using HeyGen: render from templates, translate, list assets, and poll job status.","auth":{"kind":"api-key","hint":"HeyGen workspace API key. Create one at https://app.heygen.com/settings under API."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"videos.createFromTemplate","description":"Submit a template-based video render. Returns a video_id; poll videos.status until the asset is ready.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"HeyGen template id to render from."},"title":{"type":"string","description":"Title of the generated video."},"variables":{"type":"object","description":"Template variable bindings (text/avatar/voice overrides keyed by variable name)."},"caption":{"type":"boolean","description":"Burn-in captions on the rendered video."},"includeGif":{"type":"boolean","description":"Also produce a GIF preview."},"enableSharing":{"type":"boolean","description":"Enable public share link on completion."},"callbackUrl":{"type":"string","description":"Webhook URL to notify when rendering completes."},"callbackId":{"type":"string","description":"Caller-supplied ID echoed in webhook payload."},"dimensionWidth":{"type":"integer","description":"Output video width in pixels."},"dimensionHeight":{"type":"integer","description":"Output video height in pixels."}},"required":["templateId","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"videos.status","description":"Retrieve the status, progress, and (if complete) output URLs for a generated video.","parameters":{"type":"object","properties":{"videoId":{"type":"string","description":"video_id returned from a generation call."}},"required":["videoId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"videos.translateStatus","description":"Retrieve the status of a translated video by its translate id.","parameters":{"type":"object","properties":{"videoTranslateId":{"type":"string","description":"video_translate_id returned from videos.translate."}},"required":["videoTranslateId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"videos.shareUrl","description":"Mint or fetch a sharable URL for a previously generated video.","parameters":{"type":"object","properties":{"videoId":{"type":"string"}},"required":["videoId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"videos.list","description":"List videos in the workspace.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Max videos to return (server caps at 100)."},"token":{"type":"string","description":"Pagination token from a previous response."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"avatars.list","description":"List avatars available to the workspace (system + custom).","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"voices.list","description":"List voices available to the workspace.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"videos.translate","description":"Submit a video translation job. Returns a video_translate_id; poll videos.translateStatus for completion.","parameters":{"type":"object","properties":{"videoUrl":{"type":"string","description":"URL of the video to translate (direct URL, Google Drive, or YouTube)."},"outputLanguage":{"type":"string","description":"Target language code (e.g. en, es, fr, ja)."},"title":{"type":"string","description":"Title for the translated output."},"translateAudioOnly":{"type":"boolean","description":"Translate audio without modifying faces."},"speakerNum":{"type":"integer","description":"Number of distinct speakers in the source video."},"callbackUrl":{"type":"string","description":"Webhook URL to notify when translation completes."},"callbackId":{"type":"string","description":"Caller-supplied ID echoed in webhook payload."}},"required":["videoUrl","outputLanguage"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assets.upload","description":"Register an asset by URL for use in subsequent renders. Multipart binary upload is not exposed here; the JSON body accepts a hosted URL plus the declared content type.","parameters":{"type":"object","properties":{"fileUrl":{"type":"string","description":"Publicly fetchable URL of the asset (JPEG, PNG, MP4, WEBM, or MPEG)."},"contentType":{"type":"string","description":"MIME type, e.g. image/png, video/mp4. Required so HeyGen can route the asset to the right pipeline."},"fileName":{"type":"string","description":"Optional display name for the asset."}},"required":["fileUrl","contentType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"heymarket-sms","displayName":"Heymarket SMS","description":"Heymarket business texting: create or update contacts, send custom and template messages, update lists.","auth":{"kind":"api-key","hint":"Heymarket private API token, sent as Bearer in the Authorization header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.createOrUpdate","description":"Create a new Heymarket contact or update an existing one keyed by phone number (or contact_id when supplied).","parameters":{"type":"object","properties":{"phone":{"type":"string"},"first":{"type":"string"},"last":{"type":"string"},"display_name":{"type":"string"},"email":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"is_opted_out":{"type":"boolean"},"contact_id":{"type":"string"},"overwrite":{"type":"boolean"}},"required":["phone"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"messages.sendCustom","description":"Send a custom SMS/MMS message from a Heymarket inbox to a phone number or group of targets.","parameters":{"type":"object","properties":{"inbox_id":{"type":"integer"},"creator_id":{"type":"integer"},"text":{"type":"string"},"phone_number":{"type":"string"},"targets":{"type":"array","items":{"type":"string"}}},"required":["inbox_id","creator_id","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.sendTemplate","description":"Send a templated Heymarket message identified by template_id from the given inbox.","parameters":{"type":"object","properties":{"inbox_id":{"type":"integer"},"creator_id":{"type":"integer"},"template_id":{"type":"integer"},"phone_number":{"type":"string"},"targets":{"type":"array","items":{"type":"string"}}},"required":["inbox_id","creator_id","template_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.update","description":"Rename a Heymarket list and add/remove member phone numbers. Risk-classed as read by the upstream piece but mutates list membership.","parameters":{"type":"object","properties":{"list_id":{"type":"integer"},"title":{"type":"string"},"add_phone":{"type":"string"},"remove_phone":{"type":"string"},"members":{"type":"object"}},"required":["list_id","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.delete","description":"Delete a Heymarket contact by contact_id. Heymarket returns 200 on first delete, 404 on subsequent calls.","parameters":{"type":"object","properties":{"contact_id":{"type":"string","description":"The Heymarket contact identifier to delete."}},"required":["contact_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"heyreach","displayName":"HeyReach","description":"LinkedIn outreach automation at agency scale. List campaigns and lists, add leads to campaigns, look up leads, and read inbox conversations.","auth":{"kind":"api-key","hint":"Generate an API key in HeyReach (Settings -> Integrations -> Public API). Sent as the X-API-KEY header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"campaign.list","description":"List campaigns in the workspace with pagination.","parameters":{"type":"object","properties":{"offset":{"type":"integer","description":"Number of records to skip."},"limit":{"type":"integer","description":"Maximum records to return."}},"required":["offset","limit"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"list.list","description":"List lead lists in the workspace with pagination.","parameters":{"type":"object","properties":{"offset":{"type":"integer","description":"Number of records to skip."},"limit":{"type":"integer","description":"Maximum records to return."}},"required":["offset","limit"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lead.get","description":"Get details for a lead by their LinkedIn profile URL.","parameters":{"type":"object","properties":{"profileUrl":{"type":"string","description":"LinkedIn profile URL of the lead."}},"required":["profileUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaign.add_leads","description":"Add leads (LinkedIn profiles) to an active campaign, assigned to specific sender accounts.","parameters":{"type":"object","properties":{"campaignId":{"type":"integer","description":"Target campaign ID (must be ACTIVE or IN_PROGRESS)."},"accountLeadPairs":{"type":"array","description":"Array of pairs, each with an optional linkedInAccountId (sender) and a lead object (profileUrl, firstName, lastName, companyName, position, location, emailAddress).","items":{"type":"object"}}},"required":["campaignId","accountLeadPairs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"inbox.get_conversations","description":"Retrieve inbox conversations with filtering and pagination.","parameters":{"type":"object","properties":{"offset":{"type":"integer","description":"Number of records to skip."},"limit":{"type":"integer","description":"Maximum records to return."},"filters":{"type":"object","description":"Optional conversation filters."}},"required":["offset","limit"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"hightouch","displayName":"Hightouch","description":"List and inspect Reverse ETL syncs, sources, destinations, and runs, and trigger sync runs.","auth":{"kind":"api-key","hint":"API key from Settings -> API keys (Add API key). Sent as the Authorization: Bearer header."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"syncs.list","description":"List configured syncs in the workspace.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"modelId":{"type":"number"},"slug":{"type":"string"},"orderBy":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"syncs.get","description":"Retrieve a single sync by its id.","parameters":{"type":"object","properties":{"syncId":{"type":"number"}},"required":["syncId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"syncs.list_runs","description":"List the runs (execution history and status) for a sync.","parameters":{"type":"object","properties":{"syncId":{"type":"number"},"limit":{"type":"integer"},"offset":{"type":"integer"},"runId":{"type":"number"},"orderBy":{"type":"string"}},"required":["syncId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sources.list","description":"List configured data sources.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"name":{"type":"string"},"slug":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"destinations.list","description":"List configured destinations.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"name":{"type":"string"},"slug":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"syncs.trigger","description":"Trigger a run of the given sync, optionally forcing a full resync.","parameters":{"type":"object","properties":{"syncId":{"type":"string"},"fullResync":{"type":"boolean"},"resetCDC":{"type":"boolean"}},"required":["syncId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"housecall-pro","displayName":"Housecall Pro","description":"Manage Housecall Pro customers, jobs, leads, line items, attachments, notes, and tags for home-service CRM workflows.","auth":{"kind":"api-key","hint":"Housecall Pro Public API key (Settings → API). Sent as a Bearer token on every request."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"customers.search","description":"Search customers by name, email, or phone number.","parameters":{"type":"object","properties":{"q":{"type":"string"},"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":200}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.get","description":"Read a single customer by id.","parameters":{"type":"object","properties":{"customer_id":{"type":"string"}},"required":["customer_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.create","description":"Create a new Housecall Pro customer.","parameters":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"},"mobile_number":{"type":"string"},"home_number":{"type":"string"},"work_number":{"type":"string"},"company":{"type":"string"},"notifications_enabled":{"type":"boolean"}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.update","description":"Update an existing Housecall Pro customer.","parameters":{"type":"object","properties":{"customer_id":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"},"mobile_number":{"type":"string"},"home_number":{"type":"string"},"work_number":{"type":"string"},"company":{"type":"string"},"notifications_enabled":{"type":"boolean"}},"required":["customer_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"customers.addresses.create","description":"Add an address to an existing customer.","parameters":{"type":"object","properties":{"customer_id":{"type":"string"},"street":{"type":"string"},"street_line_2":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"},"country":{"type":"string"},"type":{"type":"string"}},"required":["customer_id","street","city","state"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"jobs.search","description":"Search jobs by customer, status, or scheduled date window.","parameters":{"type":"object","properties":{"customer_id":{"type":"string"},"work_status":{"type":"string"},"scheduled_start_min":{"type":"string"},"scheduled_start_max":{"type":"string"},"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":200}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobs.get","description":"Read a single job by id.","parameters":{"type":"object","properties":{"job_id":{"type":"string"}},"required":["job_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobs.update","description":"Update a job, including replacing or appending its line items and refreshing input materials.","parameters":{"type":"object","properties":{"job_id":{"type":"string"},"line_items":{"type":"array"},"append_line_items":{"type":"boolean"},"job_input_materials":{"type":"array"},"work_status":{"type":"string"},"description":{"type":"string"}},"required":["job_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"jobs.line_items.create","description":"Create a single line item on a job.","parameters":{"type":"object","properties":{"job_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"unit_price":{"type":"number"},"unit_cost":{"type":"number"},"quantity":{"type":"number"},"taxable":{"type":"boolean"},"kind":{"type":"string"},"tax_surcharge_type":{"type":"string"},"service_line_id":{"type":"string"},"service_line_type":{"type":"string"}},"required":["job_id","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"jobs.notes.create","description":"Add a note to a job.","parameters":{"type":"object","properties":{"job_id":{"type":"string"},"content":{"type":"string"}},"required":["job_id","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"jobs.attachments.create","description":"Upload a file attachment to a job.","parameters":{"type":"object","properties":{"job_id":{"type":"string"},"name":{"type":"string"},"file":{"type":"string"},"content_type":{"type":"string"}},"required":["job_id","name","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"jobs.tags.add","description":"Apply a tag to a job by tag id.","parameters":{"type":"object","properties":{"job_id":{"type":"string"},"tag_id":{"type":"string"}},"required":["job_id","tag_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.search","description":"Search leads by status or assigned employee.","parameters":{"type":"object","properties":{"status":{"type":"string"},"assigned_employee_id":{"type":"string"},"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":200}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.get","description":"Read a single lead by id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.convert","description":"Convert a lead into an estimate or a job. type must be \"estimate\" or \"job\".","parameters":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["estimate","job"]}},"required":["id","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"http","displayName":"HTTP Request","description":"Send an arbitrary HTTP request to any http(s) URL. Useful for hitting one-off APIs, probes, public JSON feeds, or operator-controlled webhooks. No shared auth — the agent supplies the full URL, method, headers, and body at invocation time.","auth":{"kind":"none"},"category":"webhook","defaultConsistencyModel":"advisory","capabilities":[{"name":"request.fetch","class":"read","description":"Issue a GET/HEAD/OPTIONS request to a URL. Returns the parsed JSON body if the response Content-Type is application/json, otherwise the raw text. The `etag` of the response (when present) is exposed for downstream conditional reads.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Absolute http(s) URL to fetch."},"method":{"type":"string","enum":["GET","HEAD","OPTIONS"],"description":"HTTP verb. Defaults to GET."},"headers":{"type":"object","description":"Optional request headers. Header names are lower-cased before send.","additionalProperties":{"type":"string"}},"query":{"type":"object","description":"Optional query-string parameters. Values are coerced to string; arrays become repeated keys.","additionalProperties":true},"timeoutMs":{"type":"number","description":"Per-request timeout in milliseconds. Defaults to 15000, capped at 60000."}},"required":["url"]}},{"name":"request.send","class":"mutation","description":"Issue a POST/PUT/PATCH/DELETE request to a URL. The agent supplies the body verbatim — pass an object for JSON, a string for raw text. The idempotency key is forwarded as the `Idempotency-Key` header; receivers that honour it (Stripe, Square, many SaaS APIs) dedupe automatically.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Absolute http(s) URL to call."},"method":{"type":"string","enum":["POST","PUT","PATCH","DELETE"],"description":"HTTP verb. Defaults to POST."},"headers":{"type":"object","description":"Optional request headers. Header names are lower-cased before send.","additionalProperties":{"type":"string"}},"query":{"type":"object","description":"Optional query-string parameters appended to the URL.","additionalProperties":true},"body":{"description":"Request body. Objects are JSON-encoded with `content-type: application/json`; strings are sent verbatim with the caller-supplied content-type (defaulting to text/plain)."},"timeoutMs":{"type":"number","description":"Per-request timeout in milliseconds. Defaults to 15000, capped at 60000."}},"required":["url"]},"cas":"none","externalEffect":true}]},{"kind":"hubspot","displayName":"HubSpot CRM","description":"Look up callers in HubSpot, upsert contacts without duplicates, and log call notes as CRM activities. Three capabilities — the voice-agent's CRM hot path.","auth":{"kind":"oauth2","authorizationUrl":"https://app.hubspot.com/oauth/authorize","tokenUrl":"https://api.hubapi.com/oauth/v1/token","scopes":["oauth","crm.objects.contacts.read","crm.objects.contacts.write"],"clientIdEnv":"HUBSPOT_OAUTH_CLIENT_ID","clientSecretEnv":"HUBSPOT_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"find_contact","class":"read","description":"Search HubSpot contacts by email. Returns the first match or {found:false}.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email to search for (case-insensitive)."}},"required":["email"]}},{"name":"upsert_contact","class":"mutation","description":"Create-or-update a contact identified by email. Returns the contact id and a `created` flag indicating whether the row was new.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"email":{"type":"string"},"properties":{"type":"object","additionalProperties":{"type":"string"},"description":"Property map (firstname, lastname, phone, company, …)."}},"required":["email"]}},{"name":"create_note","class":"mutation","description":"Log a note engagement against a contact. Append-only — note bodies do not conflict.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"contactId":{"type":"string"},"body":{"type":"string","description":"Note body (HTML or plain text)."}},"required":["contactId","body"]}},{"name":"create_deal","class":"mutation","description":"Create a new deal in the connected HubSpot account. Optionally associate the deal with one or more contacts at creation time via `associations.contactIds`.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["crm.objects.deals.write"],"parameters":{"type":"object","properties":{"properties":{"type":"object","properties":{"dealname":{"type":"string","description":"Deal name shown in HubSpot."},"amount":{"type":"string","description":"Deal amount (HubSpot stores as string)."},"dealstage":{"type":"string","description":"Deal stage id within the target pipeline."},"pipeline":{"type":"string","description":"Pipeline id; defaults to the portal default pipeline when omitted."},"closedate":{"type":"string","description":"RFC3339 / ISO8601 close date."}},"required":["dealname"]},"associations":{"type":"object","properties":{"contactIds":{"type":"array","items":{"type":"string"},"description":"Contact ids to associate with the new deal."}}}},"required":["properties"]}},{"name":"update_deal_stage","class":"mutation","description":"Move an existing deal to a different stage. Use update_deal_stage when only the stage changes — for richer property updates, use the generic HubSpot CRM batch APIs.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["crm.objects.deals.write"],"parameters":{"type":"object","properties":{"dealId":{"type":"string","description":"HubSpot deal object id."},"dealstage":{"type":"string","description":"Target deal stage id."}},"required":["dealId","dealstage"]}},{"name":"create_ticket","class":"mutation","description":"Create a support ticket. `subject` is the only required property; `hs_pipeline_stage` and `hs_ticket_priority` default to the portal defaults when omitted.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["tickets"],"parameters":{"type":"object","properties":{"properties":{"type":"object","properties":{"subject":{"type":"string","description":"Ticket subject / title."},"content":{"type":"string","description":"Ticket body (HTML or plain text)."},"hs_pipeline_stage":{"type":"string","description":"Stage id within the ticket pipeline."},"hs_ticket_priority":{"type":"string","enum":["LOW","MEDIUM","HIGH"],"description":"HubSpot ticket priority enum."}},"required":["subject"]}},"required":["properties"]}}]},{"kind":"hugging-face","displayName":"Hugging Face","description":"Run inference on 100,000+ open ML models on Hugging Face for NLP, vision, and audio tasks via the Inference API and the OpenAI-compatible Inference Router.","auth":{"kind":"api-key","hint":"Hugging Face user access token (starts with hf_…). Create one at https://huggingface.co/settings/tokens with at least the \"Make calls to inference providers\" scope."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"chat.completion","description":"OpenAI-compatible chat completion against any Hugging Face router-exposed model (e.g. meta-llama/Meta-Llama-3-8B-Instruct, Qwen/Qwen2.5-72B-Instruct). Pass the OpenAI-style body (model, messages, temperature, max_tokens, top_p, stop, stream).","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Hugging Face model id served by the Inference Router."},"messages":{"type":"array","description":"Ordered conversation turns ({ role, content }).","items":{"type":"object"}},"max_tokens":{"type":"integer","minimum":1},"temperature":{"type":"number","minimum":0,"maximum":2},"top_p":{"type":"number","minimum":0,"maximum":1},"frequency_penalty":{"type":"number","minimum":-2,"maximum":2},"presence_penalty":{"type":"number","minimum":-2,"maximum":2},"stop":{"type":"array","items":{"type":"string"}},"stream":{"type":"boolean"}},"required":["model","messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"text.summarization","description":"Summarize input text against a summarization model (default upstream: facebook/bart-large-cnn). Body shape: { inputs, parameters }.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Summarization model id, e.g. facebook/bart-large-cnn."},"inputs":{"type":"string","description":"Source text to summarize."},"parameters":{"type":"object","properties":{"min_length":{"type":"integer","minimum":0},"max_length":{"type":"integer","minimum":1},"do_sample":{"type":"boolean"}}},"options":{"type":"object","properties":{"use_cache":{"type":"boolean"},"wait_for_model":{"type":"boolean"}}}},"required":["model","inputs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"text.classification","description":"Classify input text (sentiment, topic, NLI, etc.) against a text-classification model (default upstream: distilbert-base-uncased-finetuned-sst-2-english).","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Text classification model id."},"inputs":{"type":"string","description":"Text to classify."},"options":{"type":"object","properties":{"use_cache":{"type":"boolean"},"wait_for_model":{"type":"boolean"}}}},"required":["model","inputs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"language.translation","description":"Translate input text using a translation model (e.g. Helsinki-NLP/opus-mt-en-fr or facebook/nllb-200-distilled-600M).","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Translation model id."},"inputs":{"type":"string","description":"Source text to translate."},"parameters":{"type":"object","properties":{"src_lang":{"type":"string"},"tgt_lang":{"type":"string"}}},"options":{"type":"object","properties":{"use_cache":{"type":"boolean"},"wait_for_model":{"type":"boolean"}}}},"required":["model","inputs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"document.question.answering","description":"Answer a question grounded in a document image against a document-question-answering model (e.g. impira/layoutlm-document-qa). `inputs` carries `image` as a base64 string or hosted URL plus the natural-language `question`.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Document QA model id."},"inputs":{"type":"object","properties":{"image":{"type":"string","description":"Base64-encoded image bytes or a URL the model server can fetch."},"question":{"type":"string"}},"required":["image","question"]},"options":{"type":"object","properties":{"use_cache":{"type":"boolean"},"wait_for_model":{"type":"boolean"}}}},"required":["model","inputs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"create.image","description":"Generate an image from a text prompt with a text-to-image model (e.g. stabilityai/stable-diffusion-xl-base-1.0, black-forest-labs/FLUX.1-dev). Response is raw image bytes.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Text-to-image model id."},"inputs":{"type":"string","description":"Prompt describing the desired image."},"parameters":{"type":"object","properties":{"negative_prompt":{"type":"string"},"width":{"type":"integer","minimum":64,"maximum":2048},"height":{"type":"integer","minimum":64,"maximum":2048},"num_inference_steps":{"type":"integer","minimum":1,"maximum":100},"guidance_scale":{"type":"number","minimum":0,"maximum":20},"seed":{"type":"integer"}}},"options":{"type":"object","properties":{"use_cache":{"type":"boolean"},"wait_for_model":{"type":"boolean"}}}},"required":["model","inputs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"object.detection","description":"Detect objects in an image with an object-detection model (e.g. facebook/detr-resnet-50). `inputs` is a base64 image string or hosted URL.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Object detection model id."},"inputs":{"type":"string","description":"Base64-encoded image bytes or a URL the model server can fetch."},"options":{"type":"object","properties":{"use_cache":{"type":"boolean"},"wait_for_model":{"type":"boolean"}}}},"required":["model","inputs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"image.classification","description":"Classify an image with an image-classification model (e.g. google/vit-base-patch16-224). `inputs` is a base64 image string or hosted URL.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Image classification model id."},"inputs":{"type":"string","description":"Base64-encoded image bytes or a URL the model server can fetch."},"options":{"type":"object","properties":{"use_cache":{"type":"boolean"},"wait_for_model":{"type":"boolean"}}}},"required":["model","inputs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"models.get","description":"Fetch Hub metadata for a model (pipeline tag, license, downloads, last-modified) from the public Hub API.","parameters":{"type":"object","properties":{"model":{"type":"string"}},"required":["model"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"models.search","description":"Search the Hugging Face model Hub. Use `search` for free-text queries, `filter` for pipeline-tag/library filters, and `sort` to order by downloads, likes, or modification time.","parameters":{"type":"object","properties":{"search":{"type":"string"},"filter":{"type":"string","description":"Filter expression, e.g. \"text-classification\" or \"pipeline_tag:summarization\"."},"author":{"type":"string"},"sort":{"type":"string","enum":["downloads","likes","lastModified"]},"direction":{"type":"integer","enum":[-1,1]},"limit":{"type":"integer","minimum":1,"maximum":1000}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"huggingface","displayName":"Hugging Face","description":"Browse the Hugging Face Hub (models, datasets, spaces), manage repos and discussions, and run OpenAI-compatible chat completions through the Inference Router.","auth":{"kind":"api-key","hint":"Hugging Face User Access Token (starts with hf_…). Create one at https://huggingface.co/settings/tokens. The token must carry at least the read-repos scope for catalog reads, write-repos for repo mutations, discussion for discussion writes, and inference-api for chat completions."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"auth.whoami","description":"Resolve the calling token to its Hub user / org identity, including the token name and granted scopes. Cheap probe used to validate a freshly-connected token before declaring a connection healthy.","parameters":{"type":"object","properties":{}},"requiredScopes":["read-repos"],"class":"read"},{"name":"models.list","description":"Search and page the model catalog. Supports the Hub`s standard query knobs: free-text search, author/owner filter, library/task filter, and ordering.","parameters":{"type":"object","properties":{"search":{"type":"string","description":"Free-text search across model card and repo id."},"author":{"type":"string","description":"Restrict to a user or org namespace."},"filter":{"type":"string","description":"Hub filter tag, e.g. `text-generation`, `pytorch`, `dataset:wikitext`."},"sort":{"type":"string","description":"Sort key: `downloads`, `likes`, `lastModified`, `createdAt`."},"direction":{"type":"string","enum":["-1","1"],"description":"-1 descending, 1 ascending."},"limit":{"type":"integer","minimum":1,"maximum":1000},"full":{"type":"boolean","description":"Include full siblings + cardData payload per row."}}},"requiredScopes":["read-repos"],"class":"read"},{"name":"models.get","description":"Fetch the full repo record for one model — including siblings (files), cardData (parsed README front-matter), tags, license, and gated-access state.","parameters":{"type":"object","properties":{"repo_id":{"type":"string","description":"Fully-qualified id, e.g. `mistralai/Mistral-7B-Instruct-v0.3`."},"revision":{"type":"string","description":"Optional git ref (branch, tag, or sha). Defaults to main."}},"required":["repo_id"]},"requiredScopes":["read-repos"],"class":"read"},{"name":"datasets.list","description":"Search and page the dataset catalog with the same query knobs as the model catalog.","parameters":{"type":"object","properties":{"search":{"type":"string"},"author":{"type":"string"},"filter":{"type":"string"},"sort":{"type":"string"},"direction":{"type":"string","enum":["-1","1"]},"limit":{"type":"integer","minimum":1,"maximum":1000},"full":{"type":"boolean"}}},"requiredScopes":["read-repos"],"class":"read"},{"name":"datasets.get","description":"Fetch the full repo record for one dataset.","parameters":{"type":"object","properties":{"repo_id":{"type":"string","description":"Fully-qualified id, e.g. `wikitext` or `squad`."},"revision":{"type":"string"}},"required":["repo_id"]},"requiredScopes":["read-repos"],"class":"read"},{"name":"spaces.list","description":"Search and page Hugging Face Spaces (community-hosted demo apps).","parameters":{"type":"object","properties":{"search":{"type":"string"},"author":{"type":"string"},"filter":{"type":"string"},"sort":{"type":"string"},"direction":{"type":"string","enum":["-1","1"]},"limit":{"type":"integer","minimum":1,"maximum":1000}}},"requiredScopes":["read-repos"],"class":"read"},{"name":"spaces.get","description":"Fetch the full repo record for one Space, including its runtime status and hardware tier.","parameters":{"type":"object","properties":{"repo_id":{"type":"string"},"revision":{"type":"string"}},"required":["repo_id"]},"requiredScopes":["read-repos"],"class":"read"},{"name":"repos.create","description":"Create a new repo under the authenticated namespace. The Hub treats repo creation as idempotent on (type, name) — a duplicate POST returns 409 surfaced by the engine as a conflict result rather than a thrown error.","parameters":{"type":"object","properties":{"type":{"type":"string","enum":["model","dataset","space"]},"name":{"type":"string","description":"Repo slug (without owner prefix)."},"organization":{"type":"string","description":"Owner namespace. Omit to create under the authenticated user."},"private":{"type":"boolean","description":"Create as private. Defaults to public."},"sdk":{"type":"string","enum":["gradio","streamlit","docker","static"],"description":"Only meaningful for type=space."}},"required":["type","name"]},"requiredScopes":["write-repos"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"repos.delete","description":"Delete a repo under the authenticated namespace. The Hub accepts repeated DELETEs of an already-deleted repo as 404 — caller-side dedupe is recommended.","parameters":{"type":"object","properties":{"type":{"type":"string","enum":["model","dataset","space"]},"name":{"type":"string"},"organization":{"type":"string"}},"required":["type","name"]},"requiredScopes":["write-repos"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"discussions.list","description":"List discussions and pull requests on a model repo. Returns paged threads with status, author, and last-updated metadata.","parameters":{"type":"object","properties":{"repo_id":{"type":"string"},"status":{"type":"string","enum":["open","closed","all"]},"type":{"type":"string","enum":["discussion","pull-request","all"]},"p":{"type":"integer","minimum":0,"description":"Zero-indexed page."}},"required":["repo_id"]},"requiredScopes":["read-repos"],"class":"read"},{"name":"discussions.create","description":"Open a new discussion thread on a model repo with an initial comment. The Hub does not honour an idempotency key here; replays create duplicate threads.","parameters":{"type":"object","properties":{"repo_id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string","description":"Markdown body of the opening comment."},"pull_request":{"type":"boolean","description":"If true, open as a pull request (requires the matching branch)."}},"required":["repo_id","title","description"]},"requiredScopes":["discussion"],"class":"mutation","cas":"none","externalEffect":true},{"name":"discussions.comment","description":"Append a comment to an existing discussion or pull request thread. Replays produce duplicate comments — caller-owned dedupe.","parameters":{"type":"object","properties":{"repo_id":{"type":"string"},"discussion_num":{"type":"integer","minimum":1},"comment":{"type":"string","description":"Markdown body."}},"required":["repo_id","discussion_num","comment"]},"requiredScopes":["discussion"],"class":"mutation","cas":"none","externalEffect":true},{"name":"inference.chat_completions","description":"Run a chat completion against the Hugging Face Inference Router, which exposes an OpenAI-compatible /v1/chat/completions surface and routes the request to the appropriate serverless or dedicated endpoint. Generation is non-idempotent — replay yields a new sample.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Routed model id, e.g. `meta-llama/Llama-3.1-70B-Instruct` or `/:` to pin a backend."},"messages":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["system","user","assistant","tool"]},"content":{},"name":{"type":"string"},"tool_call_id":{"type":"string"}},"required":["role"]}},"max_tokens":{"type":"integer","minimum":1},"temperature":{"type":"number","minimum":0,"maximum":2},"top_p":{"type":"number","minimum":0,"maximum":1},"stream":{"type":"boolean"},"stop":{"type":"array","items":{"type":"string"}},"tools":{"type":"array","items":{"type":"object"}},"tool_choice":{},"response_format":{"type":"object"},"seed":{"type":"integer"}},"required":["model","messages"]},"requiredScopes":["inference-api"],"class":"mutation","cas":"none","externalEffect":true},{"name":"inference.models.list","description":"Enumerate models reachable through the Inference Router for the calling token (serverless + dedicated). Useful before chat_completions to validate model availability.","parameters":{"type":"object","properties":{}},"requiredScopes":["inference-api"],"class":"read"}]},{"kind":"hume-ai","displayName":"Hume AI","description":"Generate speech synthesis, analyze emotions from media, and manage custom voices.","auth":{"kind":"api-key","hint":"Hume AI API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"speech.generate","description":"Convert text to speech using Hume AI voice synthesis.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"The text to convert to speech"},"voiceDescription":{"type":"string","description":"Natural language description of how the speech should sound"},"voiceName":{"type":"string","description":"Optional name of a custom voice to use"},"format":{"type":"string","enum":["wav","mp3","ulaw"],"description":"The output audio file format"},"speed":{"type":"number","description":"Speed multiplier for the synthesized speech (0.75-1.5)"},"contextText":{"type":"string","description":"Optional context text to influence speech style"},"contextDescription":{"type":"string","description":"Description for the context text"},"trailingSilence":{"type":"number","description":"Duration of silence to add at the end in seconds"},"splitUtterances":{"type":"boolean","description":"Automatically split text into natural-sounding segments"},"numGenerations":{"type":"integer","description":"Number of audio generations to produce (1-5)"}},"required":["text","format"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"speech.from-file","description":"Generate speech from an audio file using voice cloning.","parameters":{"type":"object","properties":{"generationId":{"type":"string","description":"The unique ID from a previous TTS generation to use as voice"},"text":{"type":"string","description":"The text to convert to speech"},"format":{"type":"string","enum":["wav","mp3","ulaw"],"description":"The output audio file format"},"speed":{"type":"number","description":"Speed multiplier for the synthesized speech"}},"required":["generationId","text","format"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"voice.create","description":"Create a custom voice from a TTS generation.","parameters":{"type":"object","properties":{"generationId":{"type":"string","description":"The unique ID from a previous TTS generation to save as voice"},"voiceName":{"type":"string","description":"A descriptive name for the custom voice"}},"required":["generationId","voiceName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"voice.delete","description":"Delete a custom voice.","parameters":{"type":"object","properties":{"voiceName":{"type":"string","description":"The name of the custom voice to delete"}},"required":["voiceName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"emotions.analyze","description":"Analyze emotions from media URLs (images, videos, or audio).","parameters":{"type":"object","properties":{"urls":{"type":"array","items":{"type":"string"},"description":"URLs to media files to analyze"},"models":{"type":"object","description":"Specify which models to use for inference"},"transcription":{"type":"boolean","description":"Include speech-to-text transcription in the analysis"},"callbackUrl":{"type":"string","description":"Optional webhook URL to receive results when the job completes"},"notify":{"type":"boolean","description":"Send email notification upon job completion or failure"}},"required":["urls"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"emotions.results","description":"Retrieve results from a completed emotion analysis job.","parameters":{"type":"object","properties":{"jobId":{"type":"string","description":"The ID of the emotion analysis job"}},"required":["jobId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"hunter","displayName":"Hunter","description":"Find, verify and manage professional email addresses at scale. Automate email discovery, validation, lead tracking, and campaign outreach with Hunter.io.","auth":{"kind":"api-key","hint":"Hunter API key from API → API keys. Sent as the api_key query parameter."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"find.email","description":"Find the most likely email address of a person at a company, given the company domain and the person name.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name of the company (e.g. stripe.com)."},"company":{"type":"string","description":"Company name, used when the domain is not known."},"first_name":{"type":"string"},"last_name":{"type":"string"},"full_name":{"type":"string"},"max_duration":{"type":"integer","minimum":3,"maximum":20}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"verify.email","description":"Verify the deliverability of an email address. Marked as a mutation because Hunter bills a verification credit per call.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address to verify."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"count.emails","description":"Return the total number of email addresses Hunter has indexed for a given domain or company. Counts against the search-quota.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"company":{"type":"string"},"type":{"type":"string","enum":["personal","generic"],"description":"Restrict the count to personal or generic email addresses."}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"search.leads","description":"List or search leads in the Hunter account.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0},"lead_list_id":{"type":"integer"},"query":{"type":"string","description":"Free-text query (matches email, name, company)."},"email":{"type":"string"},"company":{"type":"string"},"phone_number":{"type":"string"},"twitter":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.lead","description":"Return a single lead by its Hunter lead ID.","parameters":{"type":"object","properties":{"id":{"type":"integer","description":"The Hunter lead ID."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"create.lead","description":"Create a new lead in the Hunter account.","parameters":{"type":"object","properties":{"email":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"position":{"type":"string"},"company":{"type":"string"},"company_industry":{"type":"string"},"company_size":{"type":"string"},"confidence_score":{"type":"integer","minimum":0,"maximum":100},"website":{"type":"string"},"country_code":{"type":"string"},"linkedin_url":{"type":"string"},"phone_number":{"type":"string"},"twitter":{"type":"string"},"notes":{"type":"string"},"source":{"type":"string"},"lead_list_id":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.lead","description":"Update an existing lead. Only fields included in the request are modified.","parameters":{"type":"object","properties":{"id":{"type":"integer","description":"The Hunter lead ID."},"email":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"position":{"type":"string"},"company":{"type":"string"},"company_industry":{"type":"string"},"company_size":{"type":"string"},"confidence_score":{"type":"integer","minimum":0,"maximum":100},"website":{"type":"string"},"country_code":{"type":"string"},"linkedin_url":{"type":"string"},"phone_number":{"type":"string"},"twitter":{"type":"string"},"notes":{"type":"string"},"source":{"type":"string"},"lead_list_id":{"type":"integer"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"delete.lead","description":"Permanently delete a lead from the Hunter account.","parameters":{"type":"object","properties":{"id":{"type":"integer","description":"The Hunter lead ID."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"add.recipients","description":"Add recipients (leads or raw email addresses) to a Hunter Campaigns campaign.","parameters":{"type":"object","properties":{"campaign_id":{"type":"integer","description":"The Hunter campaign ID to add recipients to."},"emails":{"type":"array","items":{"type":"string"},"description":"Email addresses to add as recipients."},"lead_ids":{"type":"array","items":{"type":"integer"},"description":"Existing Hunter lead IDs to add as recipients."}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"hystruct","displayName":"Hystruct","description":"AI-powered document structuring and data extraction.","auth":{"kind":"api-key","hint":"Hystruct API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"job.create","description":"Create a document extraction job.","parameters":{"type":"object","properties":{"workflowId":{"type":"string","description":"The ID of the workflow to run"},"markdown":{"type":"string","description":"The markdown content to structure"}},"required":["workflowId","markdown"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"ibm-cognose","displayName":"IBM Cognos Analytics","description":"Business intelligence and performance management suite for data analysis and reporting","auth":{"kind":"api-key","hint":"IBM Cognos Analytics API key with base URL and CAM namespace."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"datasources.create","description":"Create a new data source in Cognos.","parameters":{"type":"object","properties":{"defaultName":{"type":"string"},"connectionString":{"type":"string"},"driverName":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"},"signonDefaultName":{"type":"string"},"disabled":{"type":"boolean"},"hidden":{"type":"boolean"}},"required":["defaultName","connectionString"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"datasources.update","description":"Update an existing data source.","parameters":{"type":"object","properties":{"id":{"type":"string"},"defaultName":{"type":"string"},"connectionString":{"type":"string"},"driverName":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"},"version":{"type":"number"},"disabled":{"type":"boolean"},"hidden":{"type":"boolean"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"datasources.delete","description":"Delete a data source.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"datasources.get","description":"Retrieve details of a data source.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"objects.update","description":"Update a content object (report, dashboard, folder).","parameters":{"type":"object","properties":{"id":{"type":"string"},"defaultDescriptions":{"type":"string"},"type":{"type":"string"},"version":{"type":"number"},"disabled":{"type":"boolean"},"hidden":{"type":"boolean"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"objects.get","description":"Retrieve a content object.","parameters":{"type":"object","properties":{"id":{"type":"string"},"fields":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"objects.move","description":"Move a content object to a different folder.","parameters":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string"}},"required":["id","parentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"objects.copy","description":"Copy a content object.","parameters":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string"},"recursive":{"type":"boolean"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"image-router","displayName":"ImageRouter","description":"Generate images with any model available on ImageRouter — text-to-image and image-to-image edits via an OpenAI-compatible API surface.","auth":{"kind":"api-key","hint":"ImageRouter API key. Create one at https://imagerouter.io under Account > API Keys."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"models.list","description":"List image generation and edit models routable through ImageRouter. Use the returned `id` values to populate createImage.model / imageToImage.model.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"createImage","description":"Generate one or more images from a text prompt. Returns a JSON envelope with `data[]` containing `url` (when response_format=url, default) or `b64_json` (when response_format=b64_json).","parameters":{"type":"object","properties":{"prompt":{"type":"string","description":"Text prompt describing the image you want to generate."},"model":{"type":"string","description":"Routable model id (see models.list). Examples: \"openai/dall-e-3\", \"stabilityai/sdxl-turbo\"."},"n":{"type":"integer","minimum":1,"maximum":10,"description":"Number of images to generate. Not all models honor n>1."},"quality":{"type":"string","description":"Image quality hint (e.g. \"standard\", \"hd\"). Not all models support this."},"size":{"type":"string","description":"Image size in `WxH` form (e.g. \"1024x1024\"). Model-dependent allowed values."},"responseFormat":{"type":"string","enum":["url","b64_json"],"description":"How to receive the generated image: hosted URL or inline base64."},"user":{"type":"string","description":"End-user identifier forwarded to the upstream model for abuse tracking."}},"required":["prompt","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"imageToImage","description":"Edit or transform an input image (optionally with one or more mask images) using a prompt. Returns the same `data[]` envelope as createImage.","parameters":{"type":"object","properties":{"prompt":{"type":"string","description":"Text prompt describing the desired edit / transformation."},"model":{"type":"string","description":"Routable model id supporting image edit (see models.list)."},"image":{"type":"string","description":"Input image as a publicly-fetchable URL, a `data:image/...;base64,...` URI, or a hosted asset id the model can resolve."},"images":{"type":"array","items":{"type":"string"},"description":"Up to 16 additional input images (URLs or data: URIs) for multi-image edit models that accept a reference set."},"mask":{"type":"string","description":"Optional single mask image. White pixels are the editable region; black pixels are preserved."},"masks":{"type":"array","items":{"type":"string"},"description":"Optional list of mask images, one per entry in `images`."},"n":{"type":"integer","minimum":1,"maximum":10,"description":"Number of edited images to generate."},"size":{"type":"string","description":"Output image size in `WxH` form (model-dependent allowed values)."},"responseFormat":{"type":"string","enum":["url","b64_json"],"description":"How to receive the edited image: hosted URL or inline base64."},"user":{"type":"string","description":"End-user identifier forwarded to the upstream model for abuse tracking."}},"required":["prompt","model","image"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"imap","displayName":"IMAP","description":"Receive new email via IMAP, mark emails as read, copy, move, or delete emails.","auth":{"kind":"api-key","hint":"IMAP server credentials (host, username, password, port, TLS settings)."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"emails.mark-as-read","description":"Mark an email as read.","parameters":{"type":"object","properties":{"mailbox":{"type":"string"},"messageId":{"type":"string"}},"required":["mailbox","messageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"emails.copy","description":"Copy an email to another mailbox.","parameters":{"type":"object","properties":{"mailbox":{"type":"string"},"messageId":{"type":"string"},"targetMailbox":{"type":"string"}},"required":["mailbox","messageId","targetMailbox"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"emails.move","description":"Move an email to another mailbox.","parameters":{"type":"object","properties":{"mailbox":{"type":"string"},"messageId":{"type":"string"},"targetMailbox":{"type":"string"}},"required":["mailbox","messageId","targetMailbox"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"emails.delete","description":"Delete an email permanently.","parameters":{"type":"object","properties":{"mailbox":{"type":"string"},"messageId":{"type":"string"}},"required":["mailbox","messageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"folders.create","description":"Create a new IMAP folder (mailbox).","parameters":{"type":"object","properties":{"folder":{"type":"string","description":"IMAP folder name to create (e.g. INBOX/Archive)."}},"required":["folder"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"influencers-club","displayName":"Influencers.club","description":"Enrich and discover social-media creators on Influencers.club for marketing campaigns: resolve creators by email or handle and find lookalike profiles.","auth":{"kind":"api-key","hint":"Influencers.club API key, sent as the X-API-Key header. Issued from Account → API."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"creators.enrich_by_email","description":"Enrich a creator profile from a known email address, optionally filtering by platform and follower count. Maps to the catalog action enrich.creator.by.email.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"The email address of the creator to enrich."},"exclude_platforms":{"type":"array","items":{"type":"string"},"description":"Social platforms to exclude from the enrichment response."},"min_followers":{"type":"integer","description":"Minimum follower count filter. Defaults to 1000 server-side."},"email_required":{"type":"string","description":"Controls how the upstream handles email availability on returned profiles."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"creators.enrich_by_handle","description":"Enrich a creator profile from a social-media handle and platform. Maps to the catalog action enrich.creator.by.handle.","parameters":{"type":"object","properties":{"handle":{"type":"string","description":"The social-media handle (without leading @) of the creator."},"platform":{"type":"string","description":"The social-media platform that owns the handle (e.g. instagram, tiktok, youtube)."},"include_lookalikes":{"type":"boolean","description":"Include similar creators alongside the primary enrichment. Defaults to true on the upstream."},"email_required":{"type":"string","description":"Controls upstream handling of email availability."}},"required":["handle","platform"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"creators.find_similar","description":"Find creators similar to a seed profile identified by URL, handle, or user id, with optional follower / engagement / verification filters. Maps to the catalog action find.similar.creator.","parameters":{"type":"object","properties":{"filter_key":{"type":"string","description":"The type of identifier supplied in filter_value (e.g. url, handle, user_id)."},"filter_value":{"type":"string","description":"The platform URL, profile handle, or upstream user id of the seed creator."},"platform":{"type":"string","description":"Optional platform hint for the seed profile."},"limit":{"type":"integer","description":"Maximum number of similar creators to return (1-50)."},"number_of_followers":{"type":"object","description":"Follower-count range filter, expressed as { min, max }.","properties":{"min":{"type":"integer"},"max":{"type":"integer"}}},"engagement_percent":{"type":"object","description":"Engagement-rate range filter, expressed as { min, max }.","properties":{"min":{"type":"number"},"max":{"type":"number"}}},"is_verified":{"type":"boolean","description":"When true, restrict results to verified creators."},"exclude_private_profile":{"type":"boolean","description":"When true, drop creators whose profile is private."}},"required":["filter_key","filter_value"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.create","description":"Create a new influencer list. Lists group creators for campaigns, exports, and bulk outreach.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Display name for the new list."},"description":{"type":"string","description":"Optional list description."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.add","description":"Add a creator (by upstream creator id) to an influencer list. Uses native upsert semantics — adding the same creator twice is a no-op.","parameters":{"type":"object","properties":{"list_id":{"type":"string","description":"Target list id."},"creator_id":{"type":"string","description":"Upstream creator id to add to the list."}},"required":["list_id","creator_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.delete","description":"Delete an influencer list and all of its memberships.","parameters":{"type":"object","properties":{"list_id":{"type":"string","description":"List id to delete."}},"required":["list_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"insightly","displayName":"Insightly","description":"Manage Insightly CRM records (contacts, leads, opportunities, organisations, projects, tasks) across the Insightly v3.1 REST surface.","auth":{"kind":"api-key","hint":"Insightly API key from User Settings → API Key. The connection must also store the per-account apiUrl (e.g. https://api.na1.insightly.com/v3.1) derived from the `pod` field."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.create","description":"Create a record on a supported Insightly object (Contacts, Leads, Opportunities, Organisations, Projects, Tasks, Events, Notes).","parameters":{"type":"object","properties":{"objectName":{"type":"string"},"fields":{"type":"object"}},"required":["objectName","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Update a record on a supported Insightly object. The body must include the existing primary id field (e.g. CONTACT_ID, LEAD_ID, OPPORTUNITY_ID).","parameters":{"type":"object","properties":{"objectName":{"type":"string"},"fields":{"type":"object"}},"required":["objectName","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.get","description":"Fetch a single record by id from the given Insightly object.","parameters":{"type":"object","properties":{"objectName":{"type":"string"},"recordId":{"type":"string"}},"required":["objectName","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.delete","description":"Delete a record by id from the given Insightly object.","parameters":{"type":"object","properties":{"objectName":{"type":"string"},"recordId":{"type":"string"}},"required":["objectName","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.find","description":"Find records on a supported Insightly object by exact field match. Returns up to `top` records (default 100).","parameters":{"type":"object","properties":{"objectName":{"type":"string"},"fieldName":{"type":"string"},"fieldValue":{"type":"string"},"top":{"type":"integer","minimum":1,"maximum":500}},"required":["objectName","fieldName","fieldValue"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"webhooks.list","description":"List webhook subscriptions registered on the Insightly tenant.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"webhooks.create","description":"Register a webhook subscription so Insightly notifies the given URL on object events. Used to back the New/Updated/Deleted Record triggers.","parameters":{"type":"object","properties":{"objectType":{"type":"string"},"eventType":{"type":"string","enum":["Created","Updated","Deleted"]},"webhookUrl":{"type":"string"}},"required":["objectType","eventType","webhookUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Remove a previously registered webhook by id.","parameters":{"type":"object","properties":{"webhookId":{"type":"string"}},"required":["webhookId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"insighto-ai","displayName":"Insighto AI","description":"Build, deploy, and manage AI-powered voice campaigns via Insighto AI.","auth":{"kind":"api-key","hint":"Insighto AI API key. Create one in the Insighto AI dashboard under Settings → API Keys."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"textblobs.add","description":"Add a text blob (text content) to a data source for use in AI models.","parameters":{"type":"object","properties":{"datasource_id":{"type":"string","description":"The UUID of the data source."},"text_content":{"type":"string","description":"The text content to add to the data source."},"name":{"type":"string","description":"Optional name for this text blob entry."},"description":{"type":"string","description":"Optional description of what this text blob contains."},"org_id":{"type":"string","description":"The UUID of the organization."}},"required":["datasource_id","text_content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.upsert","description":"Create or update a contact in Insighto AI.","parameters":{"type":"object","properties":{"first_name":{"type":"string","description":"First name of the contact."},"last_name":{"type":"string","description":"Last name of the contact."},"email":{"type":"string","description":"Email address of the contact."},"phone_number":{"type":"string","description":"Phone number including country code (e.g., 16501111234)."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"calls.create","description":"Make an outbound call using Insighto AI voice capabilities.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Phone number in E.164 format (e.g., 16501234567)."},"prompt_dynamic_variables":{"type":"object","description":"Variables for call prompts (e.g., name, account_id)."}},"required":["to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.create","description":"Create a new campaign for automated outreach via Insighto AI.","parameters":{"type":"object","properties":{"type":{"type":"string","description":"Campaign type (e.g., voice, sms)."},"start_time":{"type":"string","description":"ISO 8601 timestamp for when the campaign should start."},"interval":{"type":"integer","description":"Time between executions in minutes (e.g., 60 for hourly, 1440 for daily)."},"widget_id":{"type":"string","description":"Widget to associate with this campaign."},"status":{"type":"string","enum":["active","paused","stopped"],"description":"Initial campaign status."},"attributes":{"type":"object","description":"Additional campaign attributes as key-value pairs."},"execution_weekdays":{"type":"array","items":{"type":"number"},"description":"Weekdays as numbers (e.g., [1, 2, 3] for Mon, Tue, Wed)."},"time_window_start":{"type":"string","description":"Start time in HH:MM format."},"time_window_end":{"type":"string","description":"End time in HH:MM format."},"time_zone":{"type":"string","description":"Time zone (defaults to UTC)."},"enabled":{"type":"boolean","description":"Whether the campaign is enabled."}},"required":["type","start_time","interval"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assistants.create","description":"Create an Insighto AI assistant (voice/chat agent) with provider, model, and prompt.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Assistant display name."},"provider":{"type":"string","description":"LLM provider (e.g. openai, anthropic)."},"model":{"type":"string","description":"Model identifier from the chosen provider."},"first_message":{"type":"string","description":"Opening line the assistant should speak."},"system_prompt":{"type":"string","description":"System prompt that scopes assistant behavior."},"voice_id":{"type":"string","description":"Voice id (when the assistant is voice-capable)."},"org_id":{"type":"string","description":"Organization id this assistant belongs to."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assistants.delete","description":"Delete an Insighto AI assistant by id.","parameters":{"type":"object","properties":{"assistant_id":{"type":"string","description":"Assistant id to delete."}},"required":["assistant_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.cancel","description":"Cancel a running Insighto AI campaign. Halts pending executions and stops further outreach.","parameters":{"type":"object","properties":{"campaign_id":{"type":"string","description":"Campaign id to cancel."}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"insta-charts","displayName":"InstaCharts","description":"Create and visualize charts using InstaCharts.","auth":{"kind":"oauth2","authorizationUrl":"https://app.instacharts.com/oauth/authorize","tokenUrl":"https://app.instacharts.com/oauth/token","scopes":["chart.create","chart.read"],"clientIdEnv":"INSTACHARTS_OAUTH_CLIENT_ID","clientSecretEnv":"INSTACHARTS_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"chart.generate","description":"Generate a chart image from data.","parameters":{"type":"object","properties":{"chartType":{"type":"string","enum":["line","bar","pie","area","scatter"]},"title":{"type":"string"},"data":{"type":"object"},"options":{"type":"object"}},"required":["chartType","title","data"]},"requiredScopes":["chart.create"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chart.update","description":"Update an existing chart by id (title, data, options, or chart type).","parameters":{"type":"object","properties":{"chartId":{"type":"string","description":"Chart id to update."},"chartType":{"type":"string","enum":["line","bar","pie","area","scatter"]},"title":{"type":"string"},"data":{"type":"object"},"options":{"type":"object"}},"required":["chartId"]},"requiredScopes":["chart.create"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chart.delete","description":"Delete a chart by id.","parameters":{"type":"object","properties":{"chartId":{"type":"string","description":"Chart id to delete."}},"required":["chartId"]},"requiredScopes":["chart.create"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"instagram-business","displayName":"Instagram Business","description":"Publish, read, and moderate content on an Instagram Business or Creator account via the Facebook Graph API: create media containers, publish posts/reels/stories, read insights, fetch comments, and reply or hide threads.","auth":{"kind":"oauth2","authorizationUrl":"https://www.facebook.com/v21.0/dialog/oauth","tokenUrl":"https://graph.facebook.com/v21.0/oauth/access_token","scopes":["instagram_basic","instagram_content_publish","instagram_manage_comments","instagram_manage_insights","instagram_manage_messages","pages_show_list","pages_read_engagement","business_management"],"clientIdEnv":"INSTAGRAM_BUSINESS_OAUTH_CLIENT_ID","clientSecretEnv":"INSTAGRAM_BUSINESS_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.get","description":"Read the connected IG Business account profile (id, username, name, biography, followers_count, follows_count, media_count, profile_picture_url, website).","parameters":{"type":"object","properties":{"igUserId":{"type":"string"},"fields":{"type":"string"}},"required":["igUserId"]},"requiredScopes":["instagram_basic"],"class":"read"},{"name":"media.list","description":"List media (posts / reels / stories) published by the IG Business account, paginated via the Graph API cursor (after/before).","parameters":{"type":"object","properties":{"igUserId":{"type":"string"},"fields":{"type":"string"},"limit":{"type":"integer"},"after":{"type":"string"},"before":{"type":"string"}},"required":["igUserId"]},"requiredScopes":["instagram_basic"],"class":"read"},{"name":"media.get","description":"Read a single media object (post, reel, or story) including caption, media_type, permalink, timestamp, like_count, comments_count, and thumbnail_url.","parameters":{"type":"object","properties":{"mediaId":{"type":"string"},"fields":{"type":"string"}},"required":["mediaId"]},"requiredScopes":["instagram_basic"],"class":"read"},{"name":"media.insights","description":"Read engagement insights (impressions, reach, saved, video_views, plays, total_interactions, etc.) for a published media object.","parameters":{"type":"object","properties":{"mediaId":{"type":"string"},"metric":{"type":"string"},"period":{"type":"string"},"breakdown":{"type":"string"}},"required":["mediaId","metric"]},"requiredScopes":["instagram_manage_insights"],"class":"read"},{"name":"account.insights","description":"Read account-level insights (reach, impressions, profile_views, follower_count, audience_gender_age, online_followers) for the IG Business account.","parameters":{"type":"object","properties":{"igUserId":{"type":"string"},"metric":{"type":"string"},"period":{"type":"string"},"metric_type":{"type":"string"},"since":{"type":"integer"},"until":{"type":"integer"}},"required":["igUserId","metric","period"]},"requiredScopes":["instagram_manage_insights"],"class":"read"},{"name":"comments.list","description":"List top-level comments on a media object. Use replies.list to walk nested threads.","parameters":{"type":"object","properties":{"mediaId":{"type":"string"},"fields":{"type":"string"},"limit":{"type":"integer"},"after":{"type":"string"}},"required":["mediaId"]},"requiredScopes":["instagram_manage_comments"],"class":"read"},{"name":"comment.get","description":"Read a single comment by id including text, timestamp, like_count, hidden, replies, and from.username.","parameters":{"type":"object","properties":{"commentId":{"type":"string"},"fields":{"type":"string"}},"required":["commentId"]},"requiredScopes":["instagram_manage_comments"],"class":"read"},{"name":"replies.list","description":"List replies to a comment thread.","parameters":{"type":"object","properties":{"commentId":{"type":"string"},"fields":{"type":"string"},"limit":{"type":"integer"}},"required":["commentId"]},"requiredScopes":["instagram_manage_comments"],"class":"read"},{"name":"hashtag.search","description":"Resolve a hashtag string into its IG hashtag id. Hashtag-search quotas are enforced per IG user per 7-day window.","parameters":{"type":"object","properties":{"igUserId":{"type":"string"},"q":{"type":"string"}},"required":["igUserId","q"]},"requiredScopes":["instagram_basic"],"class":"read"},{"name":"hashtag.recentMedia","description":"List recently tagged media for a hashtag id.","parameters":{"type":"object","properties":{"hashtagId":{"type":"string"},"igUserId":{"type":"string"},"fields":{"type":"string"},"limit":{"type":"integer"}},"required":["hashtagId","igUserId"]},"requiredScopes":["instagram_basic"],"class":"read"},{"name":"mentions.list","description":"List media in which the IG Business account is @-mentioned.","parameters":{"type":"object","properties":{"igUserId":{"type":"string"},"fields":{"type":"string"},"limit":{"type":"integer"}},"required":["igUserId"]},"requiredScopes":["instagram_basic"],"class":"read"},{"name":"media.createContainer","description":"Step 1 of the Content Publishing API: create a media container holding the image_url / video_url + caption. The container id returned must be passed to media.publish once `status_code=FINISHED`.","parameters":{"type":"object","properties":{"igUserId":{"type":"string"},"container":{"type":"object","properties":{"image_url":{"type":"string"},"video_url":{"type":"string"},"media_type":{"type":"string","enum":["IMAGE","VIDEO","REELS","STORIES","CAROUSEL"]},"caption":{"type":"string"},"location_id":{"type":"string"},"user_tags":{"type":"array"},"product_tags":{"type":"array"},"children":{"type":"array","items":{"type":"string"}},"is_carousel_item":{"type":"boolean"},"thumb_offset":{"type":"integer"},"share_to_feed":{"type":"boolean"},"cover_url":{"type":"string"},"audio_name":{"type":"string"},"collaborators":{"type":"array","items":{"type":"string"}}}}},"required":["igUserId","container"]},"requiredScopes":["instagram_content_publish"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.containerStatus","description":"Poll the container processing status (status_code: IN_PROGRESS | FINISHED | ERROR | EXPIRED | PUBLISHED). Required between createContainer and publish for video / reel uploads.","parameters":{"type":"object","properties":{"containerId":{"type":"string"}},"required":["containerId"]},"requiredScopes":["instagram_content_publish"],"class":"read"},{"name":"media.publish","description":"Step 2 of the Content Publishing API: publish a previously-created container to the IG Business feed. Returns the newly created media id.","parameters":{"type":"object","properties":{"igUserId":{"type":"string"},"creationId":{"type":"string"}},"required":["igUserId","creationId"]},"requiredScopes":["instagram_content_publish"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"publishingLimit.get","description":"Read the IG Business account publishing-rate quota: how many of the 50 / 24h publishes remain. Use before bulk-scheduling.","parameters":{"type":"object","properties":{"igUserId":{"type":"string"}},"required":["igUserId"]},"requiredScopes":["instagram_content_publish"],"class":"read"},{"name":"comments.reply","description":"Post a reply to a comment thread on a media object.","parameters":{"type":"object","properties":{"commentId":{"type":"string"},"message":{"type":"string"}},"required":["commentId","message"]},"requiredScopes":["instagram_manage_comments"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.hide","description":"Hide or unhide a comment from public view (does not delete it).","parameters":{"type":"object","properties":{"commentId":{"type":"string"},"hide":{"type":"boolean"}},"required":["commentId","hide"]},"requiredScopes":["instagram_manage_comments"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"comments.delete","description":"Permanently delete a comment authored by, or moderatable by, the connected account.","parameters":{"type":"object","properties":{"commentId":{"type":"string"}},"required":["commentId"]},"requiredScopes":["instagram_manage_comments"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"instantly-ai","displayName":"Instantly.ai","description":"Manage Instantly.ai cold-email outreach: create campaigns, build lead lists, add leads to campaigns, and search the campaign/lead corpus.","auth":{"kind":"api-key","hint":"Instantly.ai API key from Settings -> Integrations. Sent as Authorization: Bearer ."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"campaigns.create","description":"Create a new outreach campaign with schedule and sending rules.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Campaign name."},"campaign_schedule":{"type":"object","description":"Sending schedule (timing windows, timezone, weekday/weekend rules).","properties":{"schedules":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"timing":{"type":"object","properties":{"from":{"type":"string","description":"Start time in 24h format (HH:MM)."},"to":{"type":"string","description":"End time in 24h format (HH:MM)."}},"required":["from","to"]},"days":{"type":"object","description":"Weekday flags keyed 0 (Sun) .. 6 (Sat)."},"timezone":{"type":"string","description":"IANA timezone (e.g. America/New_York)."}},"required":["timing","timezone"]}},"start_date":{"type":"string","description":"ISO start date (YYYY-MM-DD)."},"end_date":{"type":"string","description":"ISO end date (YYYY-MM-DD)."}},"required":["schedules"]},"pl_value":{"type":"number","description":"Value of every positive lead."},"is_evergreen":{"type":"boolean"},"email_gap":{"type":"integer","description":"Gap between emails in minutes."},"random_wait_max":{"type":"integer","description":"Maximum random wait time in minutes."},"text_only":{"type":"boolean"},"daily_limit":{"type":"integer","description":"Daily limit for sending emails."},"stop_on_reply":{"type":"boolean"},"link_tracking":{"type":"boolean"},"open_tracking":{"type":"boolean"},"stop_on_auto_reply":{"type":"boolean"},"daily_max_leads":{"type":"integer"},"prioritize_new_leads":{"type":"boolean"},"match_lead_esp":{"type":"boolean"},"stop_for_company":{"type":"boolean"},"insert_unsubscribe_header":{"type":"boolean"}},"required":["name","campaign_schedule"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lead-lists.create","description":"Create a new lead list to group prospects before assigning them to campaigns.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Lead list name."},"has_enrichment_task":{"type":"boolean","description":"If true, Instantly will run enrichment on imported leads."},"owned_by":{"type":"string","description":"Workspace member id that should own the list."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.add-to-campaign","description":"Add a lead (by email) to a campaign, optionally skipping duplicates already enrolled.","parameters":{"type":"object","properties":{"campaign":{"type":"string","description":"Campaign id to add the lead to."},"email":{"type":"string","description":"Lead email address."},"first_name":{"type":"string"},"last_name":{"type":"string"},"company_name":{"type":"string"},"phone":{"type":"string"},"website":{"type":"string"},"personalization":{"type":"string","description":"Custom personalization snippet."},"custom_variables":{"type":"object","description":"Free-form custom variables merged into the lead record."},"skip_if_in_campaign":{"type":"boolean","description":"Skip the lead if it already exists in the target campaign."},"skip_if_in_workspace":{"type":"boolean","description":"Skip the lead if it already exists anywhere in the workspace."}},"required":["campaign","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.search","description":"List or search campaigns by name, status, and pagination cursor.","parameters":{"type":"object","properties":{"search":{"type":"string","description":"Substring match against campaign name."},"status":{"type":"integer","description":"Campaign status filter (0=draft, 1=active, 2=paused, 3=completed, 4=running-subseq)."},"limit":{"type":"integer","minimum":1,"maximum":100},"starting_after":{"type":"string","description":"Pagination cursor: id of the last campaign on the previous page."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.search","description":"Search leads by campaign, list, email, or free-text query.","parameters":{"type":"object","properties":{"campaign":{"type":"string","description":"Restrict to leads in this campaign id."},"list_id":{"type":"string","description":"Restrict to leads in this lead-list id."},"search":{"type":"string","description":"Free-text search across lead fields."},"email":{"type":"string","description":"Filter by exact email match."},"limit":{"type":"integer","minimum":1,"maximum":100},"starting_after":{"type":"string","description":"Pagination cursor: id of the last lead on the previous page."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.delete","description":"Delete a lead from Instantly.ai by its lead id.","parameters":{"type":"object","properties":{"lead_id":{"type":"string","description":"Lead id to delete."}},"required":["lead_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.pause","description":"Pause a running campaign. Halts further sends until resumed.","parameters":{"type":"object","properties":{"campaign_id":{"type":"string","description":"Campaign id to pause."}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.resume","description":"Resume a previously paused campaign.","parameters":{"type":"object","properties":{"campaign_id":{"type":"string","description":"Campaign id to resume."}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"instasent","displayName":"Instasent","description":"Manage contacts and track events in Instasent for audience segmentation and personalized marketing.","auth":{"kind":"api-key","hint":"Instasent API Bearer Token."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.add_or_update","description":"Add or update a contact with properties and optional instant event processing.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"datasourceId":{"type":"string"},"userId":{"type":"string"},"contactProperties":{"type":"object"},"instant":{"type":"boolean"}},"required":["projectId","datasourceId","userId","contactProperties"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.create","description":"Create an event for a contact with event type and parameters.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"datasourceId":{"type":"string"},"userId":{"type":"string"},"eventId":{"type":"string"},"eventType":{"type":"string"},"eventParameters":{"type":"object"},"eventDate":{"type":"string"}},"required":["projectId","datasourceId","userId","eventId","eventType","eventParameters"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.delete","description":"Delete a contact from a datasource.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"datasourceId":{"type":"string"},"userId":{"type":"string"}},"required":["projectId","datasourceId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sms.send","description":"Send a single SMS message via Instasent. Requires the originator (alphanumeric sender or MSISDN), the recipient MSISDN in E.164 form, and the message body.","parameters":{"type":"object","properties":{"from":{"type":"string","description":"Originator: alphanumeric sender id (max 11 chars) or sender MSISDN in E.164."},"to":{"type":"string","description":"Recipient MSISDN in E.164 (e.g. +34666112233)."},"text":{"type":"string","description":"SMS body text."},"clientMessageId":{"type":"string","description":"Optional client-supplied message id used for idempotency / dedupe."}},"required":["from","to","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaign.create","description":"Create an SMS campaign targeting a contact segment. The campaign is scheduled for delivery at `scheduledAt` (ISO-8601) or sent immediately if omitted.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Campaign display name."},"from":{"type":"string","description":"Originator: alphanumeric sender id or sender MSISDN."},"text":{"type":"string","description":"Campaign SMS body."},"datasourceId":{"type":"string","description":"Datasource id whose contacts will receive the campaign."},"segmentId":{"type":"string","description":"Optional segment id to narrow the recipient set within the datasource."},"scheduledAt":{"type":"string","description":"Optional ISO-8601 timestamp to schedule delivery; omit to send immediately."}},"required":["name","from","text","datasourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaign.cancel","description":"Cancel a scheduled SMS campaign. Once a campaign has started delivering, Instasent rejects the cancel; only future-scheduled campaigns can be cancelled.","parameters":{"type":"object","properties":{"campaignId":{"type":"string","description":"Campaign id to cancel."}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"intercom","displayName":"Intercom","description":"Search Intercom conversations and contacts, reply to support tickets, and update conversation state.","auth":{"kind":"oauth2","authorizationUrl":"https://app.intercom.com/oauth","tokenUrl":"https://api.intercom.io/auth/eagle/token","scopes":[],"clientIdEnv":"INTERCOM_OAUTH_CLIENT_ID","clientSecretEnv":"INTERCOM_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tickets.search","description":"Search Intercom conversations using Intercom search syntax. Pass `body` as `{ query, pagination? }` per Intercom REST docs.","parameters":{"type":"object","properties":{"body":{"type":"object","description":"Intercom search payload: { query: { field, operator, value } | { operator, value: [...] }, pagination?: { per_page, starting_after } }."}},"required":["body"]},"requiredScopes":["intercom.read"],"class":"read"},{"name":"customers.read","description":"Read an Intercom contact (lead or user) by id.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":["intercom.read"],"class":"read"},{"name":"tickets.reply","description":"Reply to an Intercom conversation. Pass the full reply payload as `body` (must include message_type, type, and body text per Intercom REST docs).","parameters":{"type":"object","properties":{"conversationId":{"type":"string"},"body":{"type":"object","description":"Intercom reply payload: { message_type, type, admin_id?, body, attachment_urls? }."}},"required":["conversationId","body"]},"requiredScopes":["intercom.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.update","description":"Update an Intercom conversation (mark read, change state, set custom attributes).","parameters":{"type":"object","properties":{"conversationId":{"type":"string"},"body":{"type":"object","description":"Intercom conversation update payload: { read?, state?, custom_attributes? }."}},"required":["conversationId","body"]},"requiredScopes":["intercom.write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.create","description":"Create an Intercom contact (user or lead). Top-level fields are sent as the POST /contacts body per Intercom REST docs.","parameters":{"type":"object","properties":{"role":{"type":"string","enum":["user","lead"],"description":"Contact role. `user` for identified users, `lead` for anonymous visitors."},"email":{"type":"string","description":"Primary email address for the contact."},"name":{"type":"string"},"phone":{"type":"string"},"external_id":{"type":"string","description":"Customer-side identifier used to dedupe/upsert on Intercom."},"custom_attributes":{"type":"object","description":"Free-form custom attributes — must match attributes defined in your Intercom workspace."}},"required":["role","email"]},"requiredScopes":["intercom.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update an existing Intercom contact by id. Pass updatable fields in `body` (any of email, name, phone, external_id, role, custom_attributes).","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Intercom contact id (the Intercom-side id, not external_id)."},"body":{"type":"object","description":"Intercom contact update payload: { email?, name?, phone?, external_id?, role?, custom_attributes? }."}},"required":["id","body"]},"requiredScopes":["intercom.write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"invoiceninja","displayName":"Invoice Ninja","description":"Manage Invoice Ninja clients, invoices, recurring invoices, tasks, and reports for billing and accounting workflows.","auth":{"kind":"api-key","hint":"Invoice Ninja API token from Settings → Account Management → API Tokens. The connection must also store the instance baseUrl (e.g. https://invoicing.co)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"clients.create","description":"Create a client (organization or natural person) in Invoice Ninja.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Business name or natural-person name."},"vat_number":{"type":"string","description":"Tax/VAT number; leave blank if N/A."},"private_notes":{"type":"string"},"address1":{"type":"string"},"address2":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"postal_code":{"type":"string"},"country_id":{"type":"string"},"contacts":{"type":"array","items":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"send_email":{"type":"boolean"}},"required":["email"]}}},"required":["name","contacts"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"clients.get","description":"Look up a client by email (returns the matching client record).","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Client contact email to search."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"invoices.create","description":"Create an invoice for a client.","parameters":{"type":"object","properties":{"client_id":{"type":"string","description":"Invoice Ninja client id."},"po_number":{"type":"string","description":"Purchase order number (optional)."},"discount":{"type":"number"},"is_amount_discount":{"type":"boolean","description":"true = discount is an amount, false = percentage."},"public_notes":{"type":"string"},"private_notes":{"type":"string"},"due_date":{"type":"string","description":"Due date in YYYY-MM-DD."},"line_items":{"type":"array","items":{"type":"object","properties":{"product_key":{"type":"string"},"notes":{"type":"string"},"cost":{"type":"number"},"quantity":{"type":"number"},"tax_name1":{"type":"string"},"tax_rate1":{"type":"number"}},"required":["notes","cost","quantity"]}},"email_invoice":{"type":"boolean","description":"Send the invoice to the client by email on creation."},"mark_sent":{"type":"boolean","description":"Mark the invoice as sent."}},"required":["client_id","line_items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.list","description":"List or filter invoices by status and/or client.","parameters":{"type":"object","properties":{"client_status":{"type":"string","description":"Comma-separated list of statuses: draft, sent, viewed, approved, partial, paid, overdue."},"client_id":{"type":"string"},"per_page":{"type":"integer","minimum":1,"maximum":9999}},"required":["client_status"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"recurring_invoices.create","description":"Create a recurring invoice for a client.","parameters":{"type":"object","properties":{"client_id":{"type":"string"},"frequency_id":{"type":"integer","description":"Frequency: 1 daily, 2 weekly, 3 two-weeks, 4 four-weeks, 5 monthly, 6 two-months, 7 three-months, 8 four-months, 9 six-months, 10 annually, 11 two-years, 12 three-years."},"remaining_cycles":{"type":"integer","description":"How many cycles remain; -1 = indefinite."},"next_send_date":{"type":"string","description":"Next send date in YYYY-MM-DD."},"discount":{"type":"number"},"is_amount_discount":{"type":"boolean"},"public_notes":{"type":"string"},"private_notes":{"type":"string"},"line_items":{"type":"array","items":{"type":"object","properties":{"product_key":{"type":"string"},"notes":{"type":"string"},"cost":{"type":"number"},"quantity":{"type":"number"}},"required":["notes","cost","quantity"]}}},"required":["client_id","frequency_id","line_items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"recurring_invoices.action","description":"Perform an action on a recurring invoice (start, stop, send_now, restore, archive, delete).","parameters":{"type":"object","properties":{"recurring_id":{"type":"string","description":"Recurring invoice id."},"action":{"type":"string","enum":["start","stop","send_now","restore","archive","delete"]}},"required":["recurring_id","action"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.create","description":"Create a billable task entry against a client (and optionally a project).","parameters":{"type":"object","properties":{"number":{"type":"string","description":"Unique task or ticket number not previously used."},"client_id":{"type":"string"},"project_id":{"type":"string"},"description":{"type":"string"},"rate":{"type":"number","description":"Custom hourly rate (optional)."},"time_log":{"type":"string","description":"JSON-encoded time-log array, e.g. [[start_epoch, end_epoch]]."}},"required":["number","client_id","description"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.exists","description":"Check whether a task with the given number already exists.","parameters":{"type":"object","properties":{"number":{"type":"string"}},"required":["number"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reports.get","description":"Generate a report (clients, invoices, payments, profit_and_loss, tax_summary).","parameters":{"type":"object","properties":{"report_type":{"type":"string","enum":["clients","invoices","payments","profit_and_loss","tax_summary","aged_receivables"]},"start_date":{"type":"string","description":"YYYY-MM-DD."},"end_date":{"type":"string","description":"YYYY-MM-DD."},"client_id":{"type":"string"}},"required":["report_type"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"ironclad","displayName":"Ironclad","description":"Read and mutate Ironclad workflows, records, and approval state across the contract lifecycle.","auth":{"kind":"oauth2","authorizationUrl":"https://ironcladapp.com/oauth/authorize","tokenUrl":"https://ironcladapp.com/oauth/token","scopes":["read","write"],"clientIdEnv":"IRONCLAD_OAUTH_CLIENT_ID","clientSecretEnv":"IRONCLAD_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"workflows.list","description":"List Ironclad workflows, optionally filtered by status, schema, or last-updated window. Page with `cursor`.","parameters":{"type":"object","properties":{"status":{"type":"string","description":"Workflow status filter, e.g. draft, review, signing, signed, cancelled, archived."},"schemaId":{"type":"string","description":"Restrict to a single workflow schema."},"asUserId":{"type":"string","description":"Run the request as this Ironclad user id; visibility scopes to their permissions."},"lastUpdated":{"type":"string","description":"ISO-8601 lower bound on workflow.lastUpdated (filters to workflows changed at or after this time)."},"page":{"type":"integer","minimum":0},"pageSize":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"}}},"requiredScopes":["read"],"class":"read"},{"name":"workflows.get","description":"Read a single Ironclad workflow by id, including attributes, status, and participants.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"},"asUserId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":["read"],"class":"read"},{"name":"workflows.create","description":"Launch a new workflow from a published workflow schema. `attributes` is a map of schema field id → value matching the schema definition.","parameters":{"type":"object","properties":{"template":{"type":"string","description":"Workflow schema id this workflow instantiates."},"creator":{"type":"object","description":"Ironclad user creating the workflow, e.g. { email: \"user@example.com\" }."},"attributes":{"type":"object","description":"Schema field id → value map; field types must match the schema (string, number, date, monetaryAmount, etc.)."},"launch":{"type":"boolean","description":"If true, advance the workflow past the create step immediately."}},"required":["template","creator","attributes"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflows.attributes.update","description":"Patch attribute values on an in-flight workflow. Only fields present in the request are overwritten.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"},"attributes":{"type":"object","description":"Schema field id → new value map. Pass null to clear a field."},"asUserId":{"type":"string"}},"required":["workflowId","attributes"]},"requiredScopes":["write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"workflows.turn","description":"Advance a workflow to the next step (e.g. review → sign → signed). Returns the new step descriptor.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"},"actionId":{"type":"string","description":"Optional turn action id when the step exposes multiple branches (e.g. \"approve\" vs \"reject\")."},"asUserId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":["write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"workflows.cancel","description":"Cancel an in-flight workflow. Once cancelled the workflow cannot be resumed; create a new one instead.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"},"reason":{"type":"string"},"asUserId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflows.comments.list","description":"List comments on a workflow, including system events and human-authored notes.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"},"page":{"type":"integer","minimum":0},"pageSize":{"type":"integer","minimum":1,"maximum":100}},"required":["workflowId"]},"requiredScopes":["read"],"class":"read"},{"name":"workflows.comments.create","description":"Post a comment on a workflow. Comments are write-only — there is no server-side dedupe, so callers must scope their own dedupe window.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"},"comment":{"type":"string"},"asUserId":{"type":"string"}},"required":["workflowId","comment"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflows.documents.list","description":"List documents (drafts, signed copies, attachments) on an Ironclad workflow.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":["read"],"class":"read"},{"name":"workflow-schemas.list","description":"List the published workflow schemas available in the workspace.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":0},"pageSize":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":["read"],"class":"read"},{"name":"workflow-schemas.get","description":"Read a single workflow schema definition (field types, required fields, step graph).","parameters":{"type":"object","properties":{"schemaId":{"type":"string"}},"required":["schemaId"]},"requiredScopes":["read"],"class":"read"},{"name":"records.list","description":"List Repository records (signed contracts and uploaded counter-party paper). Filter by record type or last-updated window.","parameters":{"type":"object","properties":{"recordType":{"type":"string","description":"Repository record type id."},"lastUpdated":{"type":"string"},"page":{"type":"integer","minimum":0},"pageSize":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"}}},"requiredScopes":["read"],"class":"read"},{"name":"records.get","description":"Read a single Repository record by id, including its property values.","parameters":{"type":"object","properties":{"recordId":{"type":"string"}},"required":["recordId"]},"requiredScopes":["read"],"class":"read"},{"name":"records.update","description":"Patch property values on a Repository record. Only fields present in `properties` are overwritten.","parameters":{"type":"object","properties":{"recordId":{"type":"string"},"properties":{"type":"object","description":"Property id → new value map. Property types must match the record type schema."}},"required":["recordId","properties"]},"requiredScopes":["write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"webhooks.list","description":"List active webhook subscriptions for the workspace.","parameters":{"type":"object","properties":{}},"requiredScopes":["read"],"class":"read"},{"name":"webhooks.create","description":"Register a webhook subscription. `events` is an array of Ironclad event names (e.g. workflow.launched, workflow.signed).","parameters":{"type":"object","properties":{"targetURL":{"type":"string"},"events":{"type":"array","items":{"type":"string"}}},"required":["targetURL","events"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Remove a webhook subscription by id.","parameters":{"type":"object","properties":{"webhookId":{"type":"string"}},"required":["webhookId"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"jina-ai","displayName":"Jina AI","description":"AI-powered web content extraction (Reader), web search (SERP), classification, embeddings, reranking, and DeepSearch reasoning against the Jina AI APIs.","auth":{"kind":"api-key","hint":"Jina AI API key from https://jina.ai/?sui=apikey. Used as a Bearer token across r.jina.ai, s.jina.ai, api.jina.ai and deepsearch.jina.ai."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"reader.read","description":"Extract clean content (markdown, HTML, text, screenshot, or JSON) from a webpage via Jina Reader (r.jina.ai).","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Target webpage URL."},"format":{"type":"string","enum":["markdown","html","text","screenshot","pageshot"],"description":"Reader X-Return-Format. Defaults to markdown server-side."},"remove_all_images":{"type":"boolean"},"links_summary":{"type":"string","enum":["none","all","true"]},"images_summary":{"type":"string","enum":["none","all","true"]},"do_not_track":{"type":"boolean"},"iframe_extraction":{"type":"boolean"},"shadow_dom_extraction":{"type":"boolean"},"follow_redirect":{"type":"boolean"},"eu_compliance":{"type":"boolean"},"json_response":{"type":"boolean"},"timeout_seconds":{"type":"integer","minimum":0},"css_selector":{"type":"string"},"wait_for_selector":{"type":"string"},"exclude_selector":{"type":"string"},"bypass_cached_content":{"type":"boolean"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.query","description":"Run a web search via Jina Search (s.jina.ai). Returns ranked SERP results and optionally the full Reader-extracted content of every hit.","parameters":{"type":"object","properties":{"query":{"type":"string"},"read_full_content":{"type":"boolean"},"fetch_favicons":{"type":"boolean"},"preferred_country":{"type":"string","description":"ISO 3166-1 alpha-2 country code."},"preferred_location":{"type":"string"},"preferred_language":{"type":"string"},"pagination":{"type":"integer","minimum":0},"in_site_search":{"type":"string"},"bypass_cached_content":{"type":"boolean"},"boost_hostnames":{"type":"string"},"bad_hostnames":{"type":"string"},"only_hostnames":{"type":"string"},"response_format":{"type":"string","enum":["default","json"]}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"classifier.classify","description":"Classify text or images against a label set (zero-shot) or against a previously trained Jina classifier.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Jina classifier model identifier."},"classifier_id":{"type":"string","description":"ID of a trained classifier. Required when invoking a custom classifier instead of a zero-shot model."},"input":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"image":{"type":"string"}}}}],"description":"Text or image-URL inputs. Strings without a scheme are treated as text; URLs are treated as image references."},"labels":{"type":"array","items":{"type":"string"},"description":"Zero-shot label set. Omit when invoking a trained classifier."}},"required":["input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"classifier.train","description":"Train a Jina classifier on a labelled dataset. Returns a classifier id usable from classifier.classify.","parameters":{"type":"object","properties":{"model":{"type":"string"},"access":{"type":"string","enum":["public","private"],"description":"Visibility of the trained model."},"num_iters":{"type":"integer","minimum":1},"input_type":{"type":"string","enum":["text","image"],"description":"Type of training inputs."},"training_data":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string"},"label":{"type":"string"}},"required":["input","label"]}}},"required":["training_data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"embeddings.create","description":"Generate dense embedding vectors with a Jina embeddings model (jina-embeddings-v3, v4, clip-v2, …).","parameters":{"type":"object","properties":{"model":{"type":"string"},"input":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"image":{"type":"string"}}}}]},"task":{"type":"string","enum":["retrieval.query","retrieval.passage","separation","classification","text-matching"]},"dimensions":{"type":"integer","minimum":1},"normalized":{"type":"boolean"},"embedding_type":{"type":"string","enum":["float","base64","binary","ubinary"]},"late_chunking":{"type":"boolean"},"truncate":{"type":"boolean"}},"required":["model","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"reranker.rerank","description":"Re-score a candidate document list against a query with a Jina reranker model.","parameters":{"type":"object","properties":{"model":{"type":"string"},"query":{"type":"string"},"documents":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}}]},"top_n":{"type":"integer","minimum":1},"return_documents":{"type":"boolean"}},"required":["model","query","documents"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deepsearch.chat","description":"Run a DeepSearch reasoning + web-search query (chat-completions shape). Iteratively searches, reads, and reasons until it produces a cited answer.","parameters":{"type":"object","properties":{"model":{"type":"string"},"messages":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["system","user","assistant"]},"content":{"type":"string"}},"required":["role","content"]}},"reasoning_effort":{"type":"string","enum":["low","medium","high"],"description":"Constrains effort spent reasoning before responding."},"budget_tokens":{"type":"integer","minimum":1},"max_attempts":{"type":"integer","minimum":1},"no_direct_answer":{"type":"boolean"},"max_returned_urls":{"type":"integer","minimum":0},"response_format":{"type":"object"},"boost_hostnames":{"type":"array","items":{"type":"string"}},"bad_hostnames":{"type":"array","items":{"type":"string"}},"only_hostnames":{"type":"array","items":{"type":"string"}},"stream":{"type":"boolean","const":false}},"required":["messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"models.list","description":"List Jina embedding / classifier / reranker models the API key is authorized to use.","parameters":{"type":"object","properties":{"family":{"type":"string","enum":["embeddings","rerank","classify"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"jira-cloud","displayName":"Jira Cloud","description":"Issue tracking and project management on Jira Cloud — create, update, comment on, transition, and search issues via the REST API v3.","auth":{"kind":"oauth2","authorizationUrl":"https://auth.atlassian.com/authorize","tokenUrl":"https://auth.atlassian.com/oauth/token","scopes":["offline_access","read:jira-work","write:jira-work","read:jira-user"],"clientIdEnv":"ATLASSIAN_OAUTH_CLIENT_ID","clientSecretEnv":"ATLASSIAN_OAUTH_CLIENT_SECRET","extraAuthParams":{"audience":"api.atlassian.com","prompt":"consent"}},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"resources.list","description":"List Atlassian sites authorized for this connection. Use a returned id as the cloudId required by every Jira action.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"issues.create","description":"Create an issue. Caller provides the full v3 create-issue envelope (fields, transition, update, properties).","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"fields":{"type":"object","description":"Issue fields — must include project, summary, and issuetype."},"update":{"type":"object"},"transition":{"type":"object"},"properties":{"type":"array"},"historyMetadata":{"type":"object"}},"required":["cloudId","fields"]},"requiredScopes":["write:jira-work"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.search","description":"Search issues with JQL. Returns the v3 search envelope with pagination tokens.","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"jql":{"type":"string","description":"JQL query (see https://support.atlassian.com/jira-software-cloud/docs/use-advanced-search-with-jira-query-language-jql/)."},"startAt":{"type":"integer","minimum":0},"maxResults":{"type":"integer","minimum":1,"maximum":100},"fields":{"type":"string","description":"Comma-delimited field IDs (e.g. \"summary,status,assignee\") or \"*all\"."},"expand":{"type":"string"},"validateQuery":{"type":"string","enum":["strict","warn","none","true","false"]}},"required":["cloudId","jql"]},"requiredScopes":["read:jira-work"],"class":"read"},{"name":"issues.get","description":"Get a single issue by ID or key, optionally expanding rendered fields, names, schemas, transitions, etc.","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"issueIdOrKey":{"type":"string"},"fields":{"type":"string"},"expand":{"type":"string","description":"Comma-delimited expand list — e.g. \"renderedFields,names,schema,transitions\"."},"properties":{"type":"string"}},"required":["cloudId","issueIdOrKey"]},"requiredScopes":["read:jira-work"],"class":"read"},{"name":"issues.update","description":"Edit an issue — partial update of the fields or update envelope.","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"issueIdOrKey":{"type":"string"},"fields":{"type":"object"},"update":{"type":"object"},"properties":{"type":"array"},"historyMetadata":{"type":"object"},"notifyUsers":{"type":"boolean"}},"required":["cloudId","issueIdOrKey"]},"requiredScopes":["write:jira-work"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"issues.assign","description":"Assign an issue to an accountId, \"-1\" (default assignee), or null (unassigned).","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"issueIdOrKey":{"type":"string"},"accountId":{"type":["string","null"]}},"required":["cloudId","issueIdOrKey"]},"requiredScopes":["write:jira-work"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"issues.transition","description":"Move an issue through a workflow transition. Look up valid transition IDs via /rest/api/3/issue/{key}/transitions.","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"issueIdOrKey":{"type":"string"},"transition":{"type":"object","description":"Object with at least { id: string }."},"fields":{"type":"object"},"update":{"type":"object"},"historyMetadata":{"type":"object"}},"required":["cloudId","issueIdOrKey","transition"]},"requiredScopes":["write:jira-work"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.link","description":"Create an issue link between two issues (e.g. \"blocks\", \"is blocked by\").","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"type":{"type":"object","description":"Link type — { name: string } or { id: string }."},"inwardIssue":{"type":"object","description":"{ key: string } | { id: string }."},"outwardIssue":{"type":"object","description":"{ key: string } | { id: string }."},"comment":{"type":"object"}},"required":["cloudId","type","inwardIssue","outwardIssue"]},"requiredScopes":["write:jira-work"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.watchers.add","description":"Add a watcher to an issue. Body is the watcher accountId as a raw JSON string.","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"issueIdOrKey":{"type":"string"},"accountId":{"type":"string"}},"required":["cloudId","issueIdOrKey","accountId"]},"requiredScopes":["write:jira-work"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.list","description":"List comments on an issue (paginated).","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"issueIdOrKey":{"type":"string"},"startAt":{"type":"integer","minimum":0},"maxResults":{"type":"integer","minimum":1,"maximum":100},"orderBy":{"type":"string","enum":["created","-created","+created"]},"expand":{"type":"string"}},"required":["cloudId","issueIdOrKey"]},"requiredScopes":["read:jira-work"],"class":"read"},{"name":"comments.create","description":"Add a comment to an issue. Body field accepts the Atlassian Document Format envelope.","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"issueIdOrKey":{"type":"string"},"body":{"type":["object","string"],"description":"ADF document or plain string (wiki text via \"expand=renderedBody\" in subsequent fetch)."},"visibility":{"type":"object"},"properties":{"type":"array"}},"required":["cloudId","issueIdOrKey","body"]},"requiredScopes":["write:jira-work"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.update","description":"Edit an existing comment by its ID.","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"issueIdOrKey":{"type":"string"},"commentId":{"type":"string"},"body":{"type":["object","string"]},"visibility":{"type":"object"},"properties":{"type":"array"}},"required":["cloudId","issueIdOrKey","commentId","body"]},"requiredScopes":["write:jira-work"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"comments.delete","description":"Remove a comment from an issue.","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"issueIdOrKey":{"type":"string"},"commentId":{"type":"string"}},"required":["cloudId","issueIdOrKey","commentId"]},"requiredScopes":["write:jira-work"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"attachments.get","description":"Fetch attachment metadata by attachment ID.","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"attachmentId":{"type":"string"}},"required":["cloudId","attachmentId"]},"requiredScopes":["read:jira-work"],"class":"read"},{"name":"users.find","description":"Look up users by query string (email, display name fragment, etc.).","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"query":{"type":"string"},"accountId":{"type":"string"},"startAt":{"type":"integer","minimum":0},"maxResults":{"type":"integer","minimum":1,"maximum":1000}},"required":["cloudId"]},"requiredScopes":["read:jira-user"],"class":"read"}]},{"kind":"jira-data-center","displayName":"Jira Data Center","description":"Issue tracking and project management for Jira Data Center and Server.","auth":{"kind":"api-key","hint":"Jira Data Center Personal Access Token (PAT). Provide the instance URL (e.g. https://jira.yourcompany.com) as connection metadata under instanceUrl."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"issues.create","description":"Create a Jira issue with the supplied fields.","parameters":{"type":"object","properties":{"fields":{"type":"object"},"update":{"type":"object"}},"required":["fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.search","description":"Search issues with a JQL query.","parameters":{"type":"object","properties":{"jql":{"type":"string"},"startAt":{"type":"integer"},"maxResults":{"type":"integer"},"fields":{"type":"array","items":{"type":"string"}},"expand":{"type":"string"}},"required":["jql"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"issues.get","description":"Get a single Jira issue by key or id.","parameters":{"type":"object","properties":{"issueIdOrKey":{"type":"string"},"fields":{"type":"string"},"expand":{"type":"string"}},"required":["issueIdOrKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"issues.update","description":"Update fields on a Jira issue.","parameters":{"type":"object","properties":{"issueIdOrKey":{"type":"string"},"fields":{"type":"object"},"update":{"type":"object"}},"required":["issueIdOrKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"issues.assign","description":"Assign a Jira issue to a user (by name on Data Center / Server).","parameters":{"type":"object","properties":{"issueIdOrKey":{"type":"string"},"name":{"type":"string"}},"required":["issueIdOrKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"issues.link","description":"Create a link between two Jira issues.","parameters":{"type":"object","properties":{"type":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"inwardIssue":{"type":"object","properties":{"key":{"type":"string"}},"required":["key"]},"outwardIssue":{"type":"object","properties":{"key":{"type":"string"}},"required":["key"]},"comment":{"type":"object"}},"required":["type","inwardIssue","outwardIssue"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.addWatcher","description":"Add a watcher (by username) to a Jira issue.","parameters":{"type":"object","properties":{"issueIdOrKey":{"type":"string"},"username":{"type":"string"}},"required":["issueIdOrKey","username"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.addAttachment","description":"Attach a file to a Jira issue. The attachment payload follows the multipart upload contract documented at /rest/api/2/issue/{issueIdOrKey}/attachments.","parameters":{"type":"object","properties":{"issueIdOrKey":{"type":"string"},"attachment":{}},"required":["issueIdOrKey","attachment"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.getAttachment","description":"Get metadata for a Jira issue attachment by id.","parameters":{"type":"object","properties":{"attachmentId":{"type":"string"}},"required":["attachmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"comments.list","description":"List comments on a Jira issue.","parameters":{"type":"object","properties":{"issueIdOrKey":{"type":"string"},"startAt":{"type":"integer"},"maxResults":{"type":"integer"},"orderBy":{"type":"string"},"expand":{"type":"string"}},"required":["issueIdOrKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"comments.add","description":"Add a comment to a Jira issue.","parameters":{"type":"object","properties":{"issueIdOrKey":{"type":"string"},"body":{"type":"string"}},"required":["issueIdOrKey","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.update","description":"Update a comment on a Jira issue.","parameters":{"type":"object","properties":{"issueIdOrKey":{"type":"string"},"commentId":{"type":"string"},"body":{"type":"string"}},"required":["issueIdOrKey","commentId","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"comments.delete","description":"Delete a comment from a Jira issue.","parameters":{"type":"object","properties":{"issueIdOrKey":{"type":"string"},"commentId":{"type":"string"}},"required":["issueIdOrKey","commentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"users.find","description":"Search Jira users by username, key, or query.","parameters":{"type":"object","properties":{"username":{"type":"string"},"key":{"type":"string"},"startAt":{"type":"integer"},"maxResults":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"jogg-ai","displayName":"Jogg AI","description":"Generate AI avatar photos and videos, manage product knowledge, upload media, and poll video generation status against the Jogg AI v1 API.","auth":{"kind":"api-key","hint":"Jogg AI workspace API key — Settings → API Keys in the Jogg AI dashboard."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"avatar.photo.create","description":"Generate a still AI-avatar photo. Returns the generated photo URL plus an id usable as an avatar source in avatar.video.create.","parameters":{"type":"object","properties":{"age":{"type":"string","description":"Age group for the avatar (e.g. Young Adult, Adult, Senior)."},"gender":{"type":"string","description":"Gender for the avatar."},"ethnicity":{"type":"string","description":"Ethnicity for the avatar."},"model":{"type":"string","description":"Jogg AI image model identifier."},"avatar_style":{"type":"string","description":"Visual style of the avatar."},"aspect_ratio":{"type":"string","description":"Output photo aspect ratio (e.g. 9:16, 16:9, 1:1)."},"appearance":{"type":"string","description":"Free-text appearance prompt."},"background":{"type":"string","description":"Free-text background prompt."},"image_url":{"type":"string","description":"Optional reference-image URL the generator should match."}},"required":["age","gender","model","avatar_style","aspect_ratio"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"avatar.video.create","description":"Queue an avatar video render. Returns a video_id; poll video.get until status is completed.","parameters":{"type":"object","properties":{"avatar_id":{"type":"string","description":"Identifier of the avatar to speak the script."},"avatar_type":{"type":"string","description":"Source type of the avatar (e.g. preset, custom, photo)."},"voice_id":{"type":"string","description":"Identifier of the voice to use."},"aspect_ratio":{"type":"string"},"screen_style":{"type":"string","description":"Background style for the rendered scene."},"script":{"type":"string","description":"Script the avatar will speak. Provide either script or audio_url."},"audio_url":{"type":"string","description":"Pre-recorded audio URL the avatar should lip-sync to. Provide either script or audio_url."},"caption":{"type":"boolean","description":"Render burned-in subtitles."},"video_name":{"type":"string"}},"required":["avatar_id","avatar_type","voice_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"product.create.from_url","description":"Crawl a product URL and create a Jogg AI product entry from the extracted information.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Public product page URL to crawl."},"name":{"type":"string","description":"Optional override for the product name."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"product.create.from_info","description":"Create a Jogg AI product entry from a structured info payload.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string","description":"Product introduction and selling points."},"target_audience":{"type":"string"},"media":{"type":"object","description":"Media resources to associate with the product."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"product.update","description":"Update an existing Jogg AI product entry.","parameters":{"type":"object","properties":{"product_id":{"type":"string","description":"Jogg AI product identifier."},"name":{"type":"string"},"description":{"type":"string"},"target_audience":{"type":"string"},"media":{"type":"object"}},"required":["product_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"video.get","description":"Fetch the status and output of a previously-queued video render. Returns status, URL when ready, and any error detail.","parameters":{"type":"object","properties":{"video_id":{"type":"string","description":"Identifier returned by avatar.video.create or video.create.from_template."}},"required":["video_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"media.upload","description":"Register a media asset (by URL) with Jogg AI so it can be referenced from products, templates, or avatar videos.","parameters":{"type":"object","properties":{"type":{"type":"string","description":"Media type (e.g. image, video, audio)."},"url":{"type":"string","description":"Publicly fetchable source URL for the media asset."}},"required":["type","url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"video.create.from_template","description":"Queue a video render driven by a Jogg AI template. Returns a video_id; poll video.get until ready.","parameters":{"type":"object","properties":{"template_type":{"type":"string","description":"Template source type (e.g. system, custom)."},"template_id":{"type":"string","description":"Identifier of the template to render."},"avatar_id":{"type":"string"},"voice_id":{"type":"string"},"script":{"type":"string"},"audio_url":{"type":"string"},"caption":{"type":"boolean"},"video_name":{"type":"string"}},"required":["template_type","template_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"jotform","displayName":"Jotform","description":"Read Jotform forms and submissions, create new submissions, and manage per-form webhook subscriptions that back the New Submission trigger.","auth":{"kind":"api-key","hint":"Jotform API key from My Account > API. Sent as the APIKEY header."},"category":"webhook","defaultConsistencyModel":"authoritative","capabilities":[{"name":"forms.list","description":"List every form on the account. Supports paging (limit/offset), free-text filter, and status filter (ENABLED / DISABLED / DELETED).","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Max results per page (Jotform caps at 1000)."},"offset":{"type":"integer","description":"Zero-based offset into the result set."},"filter":{"type":"string","description":"Jotform JSON filter expression, URL-encoded."},"orderby":{"type":"string","description":"Field to sort by, e.g. created_at, updated_at, title."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"form.get","description":"Fetch a single form record (title, status, counts, created/updated timestamps).","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"form.questions","description":"List the question definitions for a form — needed to map submission answer keys back to human-readable field labels.","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"form.submissions.list","description":"Page through historical submissions for a form. Use filter (Jotform JSON expression) for date ranges and orderby for chronological pulls.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"limit":{"type":"integer","description":"Max results per page (Jotform caps at 1000)."},"offset":{"type":"integer","description":"Zero-based offset into the result set."},"filter":{"type":"string","description":"Jotform JSON filter expression, URL-encoded."},"orderby":{"type":"string","description":"Sort key — typically created_at for chronological pulls."}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"submission.get","description":"Fetch a single submission by ID with its answer payload.","parameters":{"type":"object","properties":{"submissionId":{"type":"string"}},"required":["submissionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"form.webhooks.list","description":"List webhook URLs registered against a form (the subscriptions backing New Submission triggers).","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"submission.create","description":"Create a submission against a form. `submission` is a Jotform-shaped object keyed by question id (e.g. { \"1\": \"value\", \"2_first\": \"Jane\" }).","parameters":{"type":"object","properties":{"formId":{"type":"string"},"submission":{"type":"object","description":"Answer payload keyed by question id (or composite key for multi-field controls)."}},"required":["formId","submission"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"submission.update","description":"Edit an existing submission. Body keys mirror the create shape (question-id keyed).","parameters":{"type":"object","properties":{"submissionId":{"type":"string"},"submission":{"type":"object"}},"required":["submissionId","submission"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"submission.delete","description":"Permanently delete a submission.","parameters":{"type":"object","properties":{"submissionId":{"type":"string"}},"required":["submissionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"form.webhooks.create","description":"Register a webhook URL that Jotform will POST to for every new submission to the form. Backs the activepieces \"New Submission\" trigger.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"webhookURL":{"type":"string","description":"HTTPS endpoint Jotform will POST submissions to."}},"required":["formId","webhookURL"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"form.webhooks.delete","description":"Remove a previously-registered webhook subscription by its index id on a form.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"webhookId":{"type":"string","description":"Jotform returns webhooks as an indexed list; this is the numeric index id."}},"required":["formId","webhookId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"just-invoice","displayName":"JustInvoice","description":"Create and delete invoices in JustInvoice for billing workflows.","auth":{"kind":"api-key","hint":"JustInvoice API key issued from the account settings. Sent as a bearer token on every request."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"invoices.create","description":"Create a JustInvoice invoice for a customer with one or more line items. The customer is identified by email; optional name and address fields are upserted onto the customer record.","parameters":{"type":"object","properties":{"customerEmail":{"type":"string","description":"Email address of the customer the invoice is billed to."},"customerFirstName":{"type":"string","description":"First name of the customer."},"customerLastName":{"type":"string","description":"Last name of the customer."},"customerCompanyName":{"type":"string","description":"Company name of the customer."},"customerAddress":{"type":"string","description":"Street address of the customer."},"customerCity":{"type":"string","description":"City of the customer."},"customerProvinceState":{"type":"string","description":"Province or state of the customer."},"customerPostalCode":{"type":"string","description":"Postal code of the customer."},"customerCountry":{"type":"string","description":"ISO country code of the customer (e.g. US, CA, GB)."},"invoiceDate":{"type":"string","description":"Date of the invoice in YYYY-MM-DD. Defaults to today on the vendor side."},"invoiceStatus":{"type":"string","enum":["draft","sent","paid","overdue","void"],"description":"Initial status of the invoice."},"currencyCode":{"type":"string","description":"ISO currency code (e.g. USD, EUR, GBP)."},"noteToCustomer":{"type":"string","description":"Additional notes shown to the customer on the invoice."},"lineItems":{"type":"array","minItems":1,"description":"Products or services being billed.","items":{"type":"object","properties":{"description":{"type":"string","description":"Description of the line item."},"quantity":{"type":"number","minimum":0,"description":"Number of units billed."},"unitPrice":{"type":"number","minimum":0,"description":"Price per unit, expressed in the invoice currency."}},"required":["description","quantity","unitPrice"]}}},"required":["customerEmail","lineItems"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.delete","description":"Delete a JustInvoice invoice by its invoice id or invoice number.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string","description":"The ID or invoice number of the invoice to delete."}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.send","description":"Send a JustInvoice invoice to the customer by email. Defaults to the customer email on the invoice; pass email_to to override the destination address.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string","description":"The ID or invoice number of the invoice to send."},"email_to":{"type":"string","description":"Optional override recipient email. When omitted, JustInvoice sends to the customer email on the invoice."}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.markPaid","description":"Mark a JustInvoice invoice as paid. Defaults to the current vendor-side timestamp; pass paid_at (YYYY-MM-DD or RFC3339) to backdate the payment.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string","description":"The ID or invoice number of the invoice to mark paid."},"paid_at":{"type":"string","description":"Optional payment timestamp (YYYY-MM-DD or RFC3339). When omitted, the vendor stamps the current time."}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.update","description":"Update an existing JustInvoice invoice. Any subset of updatable fields may be supplied; omitted fields are left unchanged on the vendor side.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string","description":"The ID or invoice number of the invoice to update."},"invoiceDate":{"type":"string","description":"Updated invoice date in YYYY-MM-DD."},"invoiceStatus":{"type":"string","enum":["draft","sent","paid","overdue","void"],"description":"Updated status of the invoice."},"currencyCode":{"type":"string","description":"Updated ISO currency code (e.g. USD, EUR, GBP)."},"noteToCustomer":{"type":"string","description":"Updated note shown to the customer on the invoice."},"customerEmail":{"type":"string","description":"Updated billing email address for the invoice customer."},"customerFirstName":{"type":"string","description":"Updated customer first name."},"customerLastName":{"type":"string","description":"Updated customer last name."},"customerCompanyName":{"type":"string","description":"Updated customer company name."},"customerAddress":{"type":"string","description":"Updated customer street address."},"customerCity":{"type":"string","description":"Updated customer city."},"customerProvinceState":{"type":"string","description":"Updated customer province or state."},"customerPostalCode":{"type":"string","description":"Updated customer postal code."},"customerCountry":{"type":"string","description":"Updated customer ISO country code (e.g. US, CA, GB)."},"lineItems":{"type":"array","minItems":1,"description":"Replacement line items for the invoice.","items":{"type":"object","properties":{"description":{"type":"string","description":"Description of the line item."},"quantity":{"type":"number","minimum":0,"description":"Number of units billed."},"unitPrice":{"type":"number","minimum":0,"description":"Price per unit, expressed in the invoice currency."}},"required":["description","quantity","unitPrice"]}}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"justcall","displayName":"JustCall","description":"Cloud phone system and SMS platform. Place and list calls, manage contacts, and send SMS/MMS programmatically.","auth":{"kind":"api-key","hint":"Get your API Key and API Secret from JustCall Settings -> Developers. Paste them joined by a colon as \"api_key:api_secret\"; sent as the Authorization header."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.list","description":"List call records linked to the account, with optional filters for number, direction, type, and date range.","parameters":{"type":"object","properties":{"page":{"type":"integer"},"per_page":{"type":"integer"},"contact_number":{"type":"string"},"from_datetime":{"type":"string"},"to_datetime":{"type":"string"},"call_direction":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.get","description":"Get a single Sales Dialer call by its unique call id.","parameters":{"type":"object","properties":{"id":{"type":"integer"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.list","description":"List contacts in the account, optionally filtered by name or number.","parameters":{"type":"object","properties":{"page":{"type":"integer"},"per_page":{"type":"integer"},"contact_number":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"across_team":{"type":"boolean"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create a new contact in Sales Dialer.","parameters":{"type":"object","properties":{"name":{"type":"string"},"phone_number":{"type":"string"},"email":{"type":"string"}},"required":["name","phone_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sms.send","description":"Send an SMS or MMS from a JustCall number to a contact number.","parameters":{"type":"object","properties":{"justcall_number":{"type":"string"},"contact_number":{"type":"string"},"body":{"type":"string"},"media_url":{"type":"string"}},"required":["justcall_number","contact_number","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"kafka","displayName":"Apache Kafka","description":"Discover topics and groups, inspect offsets, produce records, and run bounded approved consumers over TLS.","auth":{"kind":"api-key","hint":"JSON with brokers and optional SASL or mutual-TLS credentials. TLS is mandatory and broker addresses must resolve publicly."},"defaultConsistencyModel":"advisory","category":"webhook","rateLimit":{"requests":120,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"kafka.topics.list","class":"read","description":"List Kafka topics visible to the connection.","parameters":{"type":"object","properties":{},"additionalProperties":false}},{"name":"kafka.topics.describe","class":"read","description":"Read partition and replica metadata for selected topics.","parameters":{"type":"object","properties":{"topics":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"string","minLength":1,"maxLength":249,"pattern":"^[A-Za-z0-9._-]+$"}}},"required":["topics"],"additionalProperties":false}},{"name":"kafka.offsets.list","class":"read","description":"Read low, high, and current offsets for one topic.","parameters":{"type":"object","properties":{"topic":{"type":"string","minLength":1,"maxLength":249,"pattern":"^[A-Za-z0-9._-]+$"}},"required":["topic"],"additionalProperties":false}},{"name":"kafka.groups.list","class":"read","description":"List consumer groups visible to the connection.","parameters":{"type":"object","properties":{},"additionalProperties":false}},{"name":"kafka.group.offsets","class":"read","description":"Read committed offsets for a consumer group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","minLength":1,"maxLength":255},"topics":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"string","minLength":1,"maxLength":249,"pattern":"^[A-Za-z0-9._-]+$"}}},"required":["groupId"],"additionalProperties":false}},{"name":"kafka.messages.produce","class":"mutation","description":"Produce one or more records with all acknowledgements enabled.","parameters":{"type":"object","properties":{"topic":{"type":"string","minLength":1,"maxLength":249,"pattern":"^[A-Za-z0-9._-]+$"},"encoding":{"type":"string","enum":["utf8","base64"],"default":"utf8"},"messages":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","properties":{"value":{"type":"string"},"key":{"type":"string"},"partition":{"type":"integer","minimum":0},"headers":{"type":"object","additionalProperties":{"type":"string"},"maxProperties":64}},"required":["value"],"additionalProperties":false}}},"required":["topic","messages"],"additionalProperties":false},"cas":"none","externalEffect":true},{"name":"kafka.messages.consume","class":"mutation","description":"Join a consumer group and return a bounded batch without automatically committing offsets.","parameters":{"type":"object","properties":{"topic":{"type":"string","minLength":1,"maxLength":249,"pattern":"^[A-Za-z0-9._-]+$"},"groupId":{"type":"string","minLength":1,"maxLength":255},"encoding":{"type":"string","enum":["utf8","base64"],"default":"utf8"},"fromBeginning":{"type":"boolean","default":false},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25},"timeoutMs":{"type":"integer","minimum":250,"maximum":30000,"default":5000}},"required":["topic","groupId"],"additionalProperties":false},"cas":"none","externalEffect":true},{"name":"kafka.offsets.commit","class":"mutation","description":"Commit explicit next offsets for a consumer group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","minLength":1,"maxLength":255},"offsets":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","properties":{"topic":{"type":"string","minLength":1,"maxLength":249,"pattern":"^[A-Za-z0-9._-]+$"},"partition":{"type":"integer","minimum":0},"offset":{"type":"string","pattern":"^[0-9]+$"},"metadata":{"type":"string","maxLength":4096}},"required":["topic","partition","offset"],"additionalProperties":false}}},"required":["groupId","offsets"],"additionalProperties":false},"cas":"none","externalEffect":true},{"name":"kafka.topics.create","class":"mutation","description":"Create one Kafka topic with explicit partition and replication counts.","parameters":{"type":"object","properties":{"topic":{"type":"string","minLength":1,"maxLength":249,"pattern":"^[A-Za-z0-9._-]+$"},"partitions":{"type":"integer","minimum":1,"maximum":100,"default":1},"replicationFactor":{"type":"integer","minimum":1,"maximum":10,"default":1}},"required":["topic"],"additionalProperties":false},"cas":"none","externalEffect":true},{"name":"kafka.topics.delete","class":"mutation","description":"Delete one or more Kafka topics.","parameters":{"type":"object","properties":{"topics":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"string","minLength":1,"maxLength":249,"pattern":"^[A-Za-z0-9._-]+$"}}},"required":["topics"],"additionalProperties":false},"cas":"none","externalEffect":true}]},{"kind":"kallabot-ai","displayName":"Kallabot AI","description":"AI-powered voice agents and conversational interfaces for making calls and managing campaigns.","auth":{"kind":"api-key","hint":"Kallabot AI API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.make","description":"Make an outbound call with an AI agent.","parameters":{"type":"object","properties":{"agent_id":{"type":"string"},"recipient_phone_number":{"type":"string"},"sender_phone_number":{"type":"string"},"template_variables":{"type":"object"},"webhook_url":{"type":"string"}},"required":["agent_id","recipient_phone_number","sender_phone_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.details","description":"Get details for a specific call.","parameters":{"type":"object","properties":{"call_sid":{"type":"string"}},"required":["call_sid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.add_to_list","description":"Add a contact to an existing contact list.","parameters":{"type":"object","properties":{"list_id":{"type":"string"},"contacts":{"type":"array"}},"required":["list_id","contacts"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.list_get","description":"Get all contacts from a contact list.","parameters":{"type":"object","properties":{"list_id":{"type":"string"}},"required":["list_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contact_lists.create","description":"Create a new contact list.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contact_lists.edit","description":"Edit an existing contact list.","parameters":{"type":"object","properties":{"list_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}},"required":["list_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.create","description":"Create a new outbound campaign.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"agent_id":{"type":"string"},"list_id":{"type":"string"},"sender_phone_numbers":{"type":"array"},"scheduled_time":{"type":"string"},"timezone":{"type":"string"},"delay_between_calls":{"type":"integer"},"rotate_numbers_after":{"type":"integer"}},"required":["name","agent_id","list_id","sender_phone_numbers","scheduled_time"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.delete","description":"Delete a campaign.","parameters":{"type":"object","properties":{"campaign_id":{"type":"string"},"delete_contact_list":{"type":"boolean"}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"kapso","displayName":"Kapso","description":"Send and receive WhatsApp messages, media, templates, and reactions through the Kapso WhatsApp API.","auth":{"kind":"api-key","hint":"Kapso API key (X-API-Key header)."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"messages.send_text","description":"Send a WhatsApp text message to a recipient phone number.","parameters":{"type":"object","properties":{"to":{"type":"string"},"body":{"type":"string"},"previewUrl":{"type":"boolean"}},"required":["to","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send_buttons","description":"Send an interactive WhatsApp message with reply buttons.","parameters":{"type":"object","properties":{"to":{"type":"string"},"bodyText":{"type":"string"},"buttons":{"type":"array"},"footerText":{"type":"string"},"headerText":{"type":"string"}},"required":["to","bodyText","buttons"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send_list","description":"Send an interactive WhatsApp list message with selectable rows grouped in sections.","parameters":{"type":"object","properties":{"to":{"type":"string"},"bodyText":{"type":"string"},"buttonText":{"type":"string"},"sections":{"type":"array"},"headerText":{"type":"string"},"footerText":{"type":"string"}},"required":["to","bodyText","buttonText","sections"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send_image","description":"Send an image to a WhatsApp recipient by public URL or previously uploaded media id.","parameters":{"type":"object","properties":{"to":{"type":"string"},"imageUrl":{"type":"string"},"imageId":{"type":"string"},"caption":{"type":"string"}},"required":["to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send_video","description":"Send a video to a WhatsApp recipient by public URL or previously uploaded media id.","parameters":{"type":"object","properties":{"to":{"type":"string"},"videoUrl":{"type":"string"},"videoId":{"type":"string"},"caption":{"type":"string"}},"required":["to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send_audio","description":"Send an audio message to a WhatsApp recipient by public URL or media id.","parameters":{"type":"object","properties":{"to":{"type":"string"},"audioUrl":{"type":"string"},"audioId":{"type":"string"}},"required":["to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send_document","description":"Send a document to a WhatsApp recipient by public URL or media id.","parameters":{"type":"object","properties":{"to":{"type":"string"},"documentUrl":{"type":"string"},"documentId":{"type":"string"},"filename":{"type":"string"},"caption":{"type":"string"}},"required":["to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send_sticker","description":"Send a WebP sticker to a WhatsApp recipient.","parameters":{"type":"object","properties":{"to":{"type":"string"},"stickerUrl":{"type":"string"},"stickerId":{"type":"string"}},"required":["to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send_location","description":"Share a location (latitude/longitude) with a WhatsApp recipient.","parameters":{"type":"object","properties":{"to":{"type":"string"},"latitude":{"type":"number"},"longitude":{"type":"number"},"name":{"type":"string"},"address":{"type":"string"}},"required":["to","latitude","longitude"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.request_location","description":"Send an interactive message that prompts the recipient to share their location.","parameters":{"type":"object","properties":{"to":{"type":"string"},"bodyText":{"type":"string"}},"required":["to","bodyText"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send_contact","description":"Share a contact card with a WhatsApp recipient.","parameters":{"type":"object","properties":{"to":{"type":"string"},"formattedName":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"company":{"type":"string"}},"required":["to","formattedName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send_reaction","description":"React (or remove a reaction) to a WhatsApp message by message id.","parameters":{"type":"object","properties":{"to":{"type":"string"},"messageId":{"type":"string"},"emoji":{"type":"string"}},"required":["to","messageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.mark_as_read","description":"Mark an inbound WhatsApp message as read by message id.","parameters":{"type":"object","properties":{"messageId":{"type":"string"}},"required":["messageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send_template","description":"Send a pre-approved WhatsApp template message with header, body, and button parameters.","parameters":{"type":"object","properties":{"to":{"type":"string"},"templateName":{"type":"string"},"languageCode":{"type":"string"},"headerType":{"type":"string"},"headerTextParameters":{"type":"array"},"headerMediaUrl":{"type":"string"},"headerMediaFilename":{"type":"string"},"headerLocationLatitude":{"type":"number"},"headerLocationLongitude":{"type":"number"},"headerLocationName":{"type":"string"},"headerLocationAddress":{"type":"string"},"bodyParameters":{"type":"array"},"buttonParameters":{"type":"array"}},"required":["to","templateName","languageCode"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"kimai","displayName":"Kimai","description":"Record timesheet entries against the customer-hosted Kimai instance for time-tracking automation.","auth":{"kind":"api-key","hint":"Kimai API password for the configured user. Sent as the X-AUTH-TOKEN header alongside the X-AUTH-USER username supplied via connection metadata."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"timesheets.create","description":"Create a Kimai timesheet entry for the authenticated user. Mirrors the activepieces `kimai.create.timesheet` action.","parameters":{"type":"object","properties":{"begin":{"type":"string","description":"ISO-8601 start datetime for the timesheet entry."},"end":{"type":"string","description":"ISO-8601 end datetime for the timesheet entry. Optional for in-progress entries."},"project":{"type":"integer","description":"Kimai project ID the timesheet belongs to."},"activity":{"type":"integer","description":"Kimai activity ID for the timesheet entry."},"description":{"type":"string","description":"Free-form description of the work logged."},"tags":{"type":"string","description":"Comma-separated list of Kimai tag names."}},"required":["begin","project","activity"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"timesheets.stop","description":"Stop a running Kimai timesheet entry. Mirrors `PATCH /api/timesheets/{id}/stop`; the upstream sets the end time to \"now\" server-side and rejects calls against already-stopped entries.","parameters":{"type":"object","properties":{"id":{"type":"integer","description":"Kimai timesheet ID to stop."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"timesheets.list","description":"List Kimai timesheet entries. Mirrors `GET /api/timesheets` and supports filtering by user, project, activity, plus paging.","parameters":{"type":"object","properties":{"user":{"type":"string","description":"Kimai user ID to filter by, or \"all\" to list across users (requires teamlead privileges)."},"project":{"type":"integer","description":"Kimai project ID to filter by."},"activity":{"type":"integer","description":"Kimai activity ID to filter by."},"page":{"type":"integer","description":"Page number (1-indexed)."},"size":{"type":"integer","description":"Page size (items per page)."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.list","description":"List Kimai projects. Mirrors `GET /api/projects`; supports filtering by visibility and customer.","parameters":{"type":"object","properties":{"visible":{"type":"integer","description":"Filter by visibility: 1=visible, 2=hidden, 3=both."},"customer":{"type":"integer","description":"Kimai customer ID to filter projects by."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"kissflow","displayName":"Kissflow","description":"Download form-field attachments from a Kissflow process activity instance.","auth":{"kind":"api-key","hint":"Kissflow access key id + secret (X-Access-Key-Id / X-Access-Key-Secret). Tenant account name and id are stored as connection metadata."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"download.attachment.from.form.field","description":"Download an attachment stored in a form field of a Kissflow process activity instance.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Kissflow account id."},"processId":{"type":"string","description":"Kissflow process id."},"instanceId":{"type":"string","description":"Process instance id."},"activityInstanceId":{"type":"string","description":"Activity instance id within the process instance."},"fieldId":{"type":"string","description":"Form field id that holds the attachment."},"attachmentId":{"type":"string","description":"Attachment id within the form field."}},"required":["accountId","processId","instanceId","activityInstanceId","fieldId","attachmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"process.instance.create","description":"Create a new Kissflow process instance under the given process. `payload` holds the initial record field values.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Kissflow account id."},"processId":{"type":"string","description":"Kissflow process id."},"payload":{"type":"object","description":"Initial record field values for the new process instance.","additionalProperties":true}},"required":["accountId","processId","payload"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"process.instance.submit","description":"Submit an existing Kissflow process instance, advancing it from draft to the next workflow step.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Kissflow account id."},"processId":{"type":"string","description":"Kissflow process id."},"instanceId":{"type":"string","description":"Process instance id to submit."}},"required":["accountId","processId","instanceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"kizeo-forms","displayName":"Kizeo Forms","description":"Create custom mobile forms, manage list items, push data, and export form submissions on Kizeo Forms.","auth":{"kind":"api-key","hint":"Kizeo Forms user token (Authorization header, no scheme)."},"category":"webhook","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.list.item","description":"Create a new item in a Kizeo Forms list.","parameters":{"type":"object","properties":{"listId":{"type":"string","description":"ID of the list to add the item to."},"itemLabel":{"type":"string","description":"Label for the new list item."}},"required":["listId","itemLabel"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"delete.list.item","description":"Delete an item from a Kizeo Forms list.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"itemId":{"type":"string","description":"The ID of the item to delete."}},"required":["listId","itemId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"download.custom.export.in.its.original.format","description":"Download a custom export of a form submission in its original (vendor-defined) format.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"dataId":{"type":"number"},"exportId":{"type":"string","description":"ID of the custom export template."}},"required":["formId","dataId","exportId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"download.standard.pdf","description":"Download the standard PDF export of a form submission.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"dataId":{"type":"number"},"exportInPdf":{"type":"boolean"}},"required":["formId","dataId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"edit.list.item","description":"Edit an existing item in a Kizeo Forms list.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"itemId":{"type":"string"},"itemLabel":{"type":"string","description":"New label for the list item."}},"required":["listId","itemId","itemLabel"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"get.all.list.items","description":"List all items in a Kizeo Forms list with optional search/pagination.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"search":{"type":"string","description":"Pattern to search."},"offset":{"type":"number"},"limit":{"type":"number","description":"Max number of results to return."},"sort":{"type":"string","description":"Target for sorting."},"direction":{"type":"string","description":"Sorting: asc or desc."}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.data.definition","description":"Fetch the field definition (schema) for a form data submission.","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.list.definition","description":"Fetch the definition (schema) of a Kizeo Forms list.","parameters":{"type":"object","properties":{"listId":{"type":"string"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.list.item","description":"Fetch a single item from a Kizeo Forms list.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"itemId":{"type":"string"}},"required":["listId","itemId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"push.data","description":"Push a data submission into a Kizeo Forms form (creates form data on the user inbox).","parameters":{"type":"object","properties":{"formId":{"type":"string"},"recipientUserId":{"type":"number","description":"ID of the user to deliver the pushed data to."},"fields":{"type":"object","description":"Field values keyed by Kizeo field identifier."}},"required":["formId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"klaviyo","displayName":"Klaviyo","description":"Manage Klaviyo profiles, lists, events, and campaigns through the v2024-10-15 JSON:API.","auth":{"kind":"oauth2","authorizationUrl":"https://www.klaviyo.com/oauth/authorize","tokenUrl":"https://a.klaviyo.com/oauth/token","scopes":["accounts:read","profiles:read","profiles:write","lists:read","lists:write","events:read","events:write","campaigns:read"],"clientIdEnv":"KLAVIYO_OAUTH_CLIENT_ID","clientSecretEnv":"KLAVIYO_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"profiles.search","description":"List or filter Klaviyo profiles. `filter` accepts JSON:API filter syntax like `equals(email,\"a@b.com\")`.","parameters":{"type":"object","properties":{"filter":{"type":"string"},"pageSize":{"type":"integer","minimum":1,"maximum":100},"pageCursor":{"type":"string"},"sort":{"type":"string"}}},"requiredScopes":["profiles:read"],"class":"read"},{"name":"profiles.get","description":"Read a single Klaviyo profile by ID.","parameters":{"type":"object","properties":{"profileId":{"type":"string"}},"required":["profileId"]},"requiredScopes":["profiles:read"],"class":"read"},{"name":"profiles.upsert","description":"Create or update a Klaviyo profile by email/phone/external_id (deterministic merge on identifiers).","parameters":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","enum":["profile"]},"attributes":{"type":"object","properties":{"email":{"type":"string"},"phone_number":{"type":"string"},"external_id":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"organization":{"type":"string"},"title":{"type":"string"},"location":{"type":"object"},"properties":{"type":"object"}}}},"required":["type","attributes"]}},"required":["data"]},"requiredScopes":["profiles:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"profiles.update","description":"Patch attributes on an existing Klaviyo profile.","parameters":{"type":"object","properties":{"profileId":{"type":"string"},"data":{"type":"object","properties":{"type":{"type":"string","enum":["profile"]},"id":{"type":"string"},"attributes":{"type":"object","properties":{"email":{"type":"string"},"phone_number":{"type":"string"},"external_id":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"organization":{"type":"string"},"title":{"type":"string"},"location":{"type":"object"},"properties":{"type":"object"}}}},"required":["type","id","attributes"]}},"required":["profileId","data"]},"requiredScopes":["profiles:write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"lists.search","description":"List Klaviyo lists with optional JSON:API filter.","parameters":{"type":"object","properties":{"filter":{"type":"string"},"pageSize":{"type":"integer","minimum":1,"maximum":100},"pageCursor":{"type":"string"}}},"requiredScopes":["lists:read"],"class":"read"},{"name":"lists.create","description":"Create a Klaviyo list.","parameters":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","enum":["list"]},"attributes":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}},"required":["type","attributes"]}},"required":["data"]},"requiredScopes":["lists:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.add-profiles","description":"Add profiles to a list (subscription-relationship batch).","parameters":{"type":"object","properties":{"listId":{"type":"string"},"data":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["profile"]},"id":{"type":"string"}},"required":["type","id"]}}},"required":["listId","data"]},"requiredScopes":["lists:write","profiles:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.create","description":"Track an event for a profile (server-side metric event ingest).","parameters":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","enum":["event"]},"attributes":{"type":"object","properties":{"properties":{"type":"object"},"time":{"type":"string"},"value":{"type":"number"},"unique_id":{"type":"string"},"metric":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","enum":["metric"]},"attributes":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}},"required":["type","attributes"]}},"required":["data"]},"profile":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","enum":["profile"]},"attributes":{"type":"object","properties":{"email":{"type":"string"},"phone_number":{"type":"string"},"external_id":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"organization":{"type":"string"},"title":{"type":"string"},"location":{"type":"object"},"properties":{"type":"object"}}}},"required":["type","attributes"]}},"required":["data"]}},"required":["properties","metric","profile"]}},"required":["type","attributes"]}},"required":["data"]},"requiredScopes":["events:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.search","description":"List campaigns. `filter` is required by Klaviyo for campaign queries (e.g. `equals(messages.channel,\"email\")`).","parameters":{"type":"object","properties":{"filter":{"type":"string"},"pageCursor":{"type":"string"},"sort":{"type":"string"}},"required":["filter"]},"requiredScopes":["campaigns:read"],"class":"read"}]},{"kind":"klenty","displayName":"Klenty","description":"Sales engagement platform for managing prospects and adding them to outreach cadences.","auth":{"kind":"api-key","hint":"Klenty API key from Settings → API. Sent as the x-api-key header. The Klenty username/email is supplied per-call as the user path segment."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"prospect.get","description":"Look up a prospect in Klenty by email address.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Klenty username/email used in the API URL path (e.g. you@company.com)."},"email":{"type":"string","description":"Prospect email address to look up."}},"required":["username","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"prospect.create","description":"Create a new prospect in Klenty. Requires email and first name; additional fields (last name, company, title, phone, location, custom fields) may be supplied.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Klenty username/email used in the API URL path."},"email":{"type":"string","description":"Prospect email address."},"firstName":{"type":"string","description":"Prospect first name."},"lastName":{"type":"string"},"middleName":{"type":"string"},"fullName":{"type":"string"},"company":{"type":"string"},"companyDomain":{"type":"string"},"title":{"type":"string"},"phone":{"type":"string"},"mobilePhone":{"type":"string"},"location":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"country":{"type":"string"},"linkedinURL":{"type":"string"},"twitterId":{"type":"string"},"website":{"type":"string"},"industry":{"type":"string"},"customFields":{"type":"object","description":"Custom prospect fields keyed by field name."}},"required":["username","email","firstName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"prospect.update","description":"Update an existing prospect in Klenty, identified by their current email address. Supply only the fields to change.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Klenty username/email used in the API URL path."},"currentEmail":{"type":"string","description":"The current email used to identify the prospect in Klenty."},"email":{"type":"string","description":"New email address (omit to keep the existing one)."},"firstName":{"type":"string"},"lastName":{"type":"string"},"middleName":{"type":"string"},"fullName":{"type":"string"},"company":{"type":"string"},"companyDomain":{"type":"string"},"title":{"type":"string"},"phone":{"type":"string"},"mobilePhone":{"type":"string"},"location":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"country":{"type":"string"},"linkedinURL":{"type":"string"},"twitterId":{"type":"string"},"website":{"type":"string"},"industry":{"type":"string"},"customFields":{"type":"object","description":"Custom prospect fields keyed by field name."}},"required":["username","currentEmail"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"prospect.add.to.campaign","description":"Add an existing prospect to a Klenty cadence (campaign), starting the sequence for that prospect.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Klenty username/email used in the API URL path."},"email":{"type":"string","description":"Email of the prospect to add to the cadence."},"cadenceName":{"type":"string","description":"Name of the cadence (campaign) to add the prospect to."}},"required":["username","email","cadenceName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"prospect.remove.from.campaign","description":"Remove a prospect from a Klenty cadence, halting any further sequence steps for that prospect in that cadence.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Klenty username/email used in the API URL path."},"email":{"type":"string","description":"Email of the prospect to remove from the cadence."},"cadenceName":{"type":"string","description":"Name of the cadence to remove the prospect from."}},"required":["username","email","cadenceName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cadence.pause","description":"Pause a Klenty cadence for a specific prospect. The prospect stays enrolled, but no further steps fire until the cadence is resumed for them.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Klenty username/email used in the API URL path."},"email":{"type":"string","description":"Email of the prospect whose cadence should be paused."},"cadenceName":{"type":"string","description":"Name of the cadence to pause for this prospect."}},"required":["username","email","cadenceName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"knack","displayName":"Knack","description":"Create, read, update, and delete records in a Knack no-code database object.","auth":{"kind":"api-key","hint":"Knack REST API Key from Builder > Settings > API & Code. Pair with your Application ID per request."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.create","description":"Create a record in the given Knack object.","parameters":{"type":"object","properties":{"applicationId":{"type":"string","description":"Knack Application ID."},"objectKey":{"type":"string","description":"Object key, e.g. `object_1`."},"fields":{"type":"object","description":"Map of `field_NN` keys to values for the new record."}},"required":["applicationId","objectKey","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.find","description":"Find records in a Knack object by filtering on a single field value.","parameters":{"type":"object","properties":{"applicationId":{"type":"string","description":"Knack Application ID."},"objectKey":{"type":"string","description":"Object key, e.g. `object_1`."},"field":{"type":"string","description":"Field key to filter on, e.g. `field_3`."},"fieldValue":{"type":"string","description":"Value to match against the chosen field."},"rowsPerPage":{"type":"integer","description":"Max records to return per page (Knack caps at 1000)."},"page":{"type":"integer","description":"Page number, 1-indexed."}},"required":["applicationId","objectKey","field","fieldValue"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.update","description":"Update an existing Knack record by ID.","parameters":{"type":"object","properties":{"applicationId":{"type":"string","description":"Knack Application ID."},"objectKey":{"type":"string","description":"Object key, e.g. `object_1`."},"recordId":{"type":"string","description":"Knack record ID returned from a prior create or find."},"fields":{"type":"object","description":"Map of `field_NN` keys to values to update."}},"required":["applicationId","objectKey","recordId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.delete","description":"Delete a Knack record by ID.","parameters":{"type":"object","properties":{"applicationId":{"type":"string","description":"Knack Application ID."},"objectKey":{"type":"string","description":"Object key, e.g. `object_1`."},"recordId":{"type":"string","description":"Knack record ID to delete."}},"required":["applicationId","objectKey","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"knock","displayName":"Knock","description":"Notification infrastructure. Manage users, trigger workflows, and track messages.","auth":{"kind":"api-key","hint":"Knock API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"workflows.trigger","description":"Trigger a workflow for one or more recipients.","parameters":{"type":"object","properties":{"workflowKey":{"type":"string","description":"The workflow key to trigger"},"recipients":{"type":"object","description":"Recipient user IDs"},"actorId":{"type":"string","description":"Optional actor user ID"},"data":{"type":"object","description":"Optional key-value data for the workflow"}},"required":["workflowKey","recipients"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflows.cancel","description":"Cancel a scheduled workflow run. Identifies the run by the cancellation key supplied at trigger time and optionally narrows to specific recipients.","parameters":{"type":"object","properties":{"workflowKey":{"type":"string","description":"The workflow key whose pending run should be cancelled."},"cancellationKey":{"type":"string","description":"The cancellation key originally passed to trigger; Knock uses this to locate the scheduled run."},"recipients":{"type":"array","description":"Optional list of recipient user ids; omit to cancel for all recipients of the run."}},"required":["workflowKey","cancellationKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.identify","description":"Identify or create a user with profile properties.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"Unique user identifier"},"name":{"type":"string","description":"User display name"},"email":{"type":"string","description":"User email address"},"phoneNumber":{"type":"string","description":"Phone number in E.164 format"},"avatar":{"type":"string","description":"URL to user avatar image"},"customProperties":{"type":"object","description":"Additional key-value properties"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"users.get","description":"Get a user by ID.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"User ID"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.delete","description":"Delete a user by ID.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"User ID to delete"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.get","description":"Get a single message by ID.","parameters":{"type":"object","properties":{"messageId":{"type":"string","description":"Message ID"}},"required":["messageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.list","description":"List messages with optional filtering.","parameters":{"type":"object","properties":{"channelId":{"type":"string","description":"Filter by channel ID"},"status":{"type":"string","description":"Filter by delivery status"},"workflowKey":{"type":"string","description":"Filter by workflow key"},"tenant":{"type":"string","description":"Filter by tenant"},"pageSize":{"type":"integer","description":"Number per page (1-50, default 50)"},"after":{"type":"string","description":"Pagination cursor"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"ko-fi","displayName":"Ko-fi","description":"Receive donations, monthly subscriptions, commissions, and shop orders from a Ko-fi creator account via webhook event delivery.","auth":{"kind":"api-key","hint":"Ko-fi verification token. In Ko-fi go to More → API → Webhooks, paste your destination URL, and copy the auto-generated Verification Token. Ko-fi sends this token inside every webhook payload — store it here so the connector can authenticate inbound deliveries."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"new.donation","description":"List Ko-fi donation events (one-time tips). Each row mirrors the webhook envelope: amount, currency, message, supporter name, anonymity flag, and the verification_token-stamped event id.","parameters":{"type":"object","properties":{"since":{"type":"string","description":"ISO-8601 timestamp; only return events at or after this instant."},"limit":{"type":"integer","description":"Max events to return. Ko-fi caps the page size at 100."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"new.subscription","description":"List Ko-fi monthly-subscription events (membership joins and renewals). The `is_first_subscription_payment` flag distinguishes new joiners from recurring charges.","parameters":{"type":"object","properties":{"since":{"type":"string","description":"ISO-8601 timestamp; only return events at or after this instant."},"tier_name":{"type":"string","description":"Filter to a single membership tier by its Ko-fi display name."},"limit":{"type":"integer","description":"Max events to return. Ko-fi caps the page size at 100."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"new.commission","description":"List Ko-fi commission events. Each row carries the commission brief (supporter message, requested deliverable) plus the payment record so a fulfillment workflow can pick the order up.","parameters":{"type":"object","properties":{"since":{"type":"string","description":"ISO-8601 timestamp; only return events at or after this instant."},"limit":{"type":"integer","description":"Max events to return. Ko-fi caps the page size at 100."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"new.shop.order","description":"List Ko-fi shop-order events. The `shop_items` array on each event lists product variant ids and quantities; `shipping` carries the supporter-entered address when the order is a physical good.","parameters":{"type":"object","properties":{"since":{"type":"string","description":"ISO-8601 timestamp; only return events at or after this instant."},"fulfilled":{"type":"boolean","description":"When true, only orders the creator has marked fulfilled. When false, only unfulfilled. Omit for both."},"limit":{"type":"integer","description":"Max events to return. Ko-fi caps the page size at 100."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"webhook.ack","description":"Acknowledge a Ko-fi webhook delivery by message_id so Ko-fi stops retrying it. Ko-fi retries unacknowledged deliveries with exponential backoff for up to 24h; the ack is the only suppression path.","parameters":{"type":"object","properties":{"message_id":{"type":"string","description":"The Ko-fi-issued message_id from the inbound webhook envelope."}},"required":["message_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false}]},{"kind":"kommo","displayName":"Kommo","description":"Read and mutate Kommo CRM leads, contacts, companies, tasks, and notes for the messenger-first sales pipeline.","auth":{"kind":"api-key","hint":"Kommo long-lived access token. The connection must also store the per-account apiBaseUrl (e.g. https://yourcompany.kommo.com/api/v4)."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.get","description":"Fetch the current Kommo account profile (subdomain, currency, timezone).","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.search","description":"Search leads by free-text query, pipeline, or status.","parameters":{"type":"object","properties":{"query":{"type":"string"},"page":{"type":"integer"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.get","description":"Fetch a single Kommo lead by id, with linked contacts and pipeline status.","parameters":{"type":"object","properties":{"leadId":{"type":"integer"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.create","description":"Create one or more leads. Body is the array envelope Kommo expects.","parameters":{"type":"object","properties":{"leads":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"price":{"type":"number"},"status_id":{"type":"integer"},"pipeline_id":{"type":"integer"},"responsible_user_id":{"type":"integer"},"custom_fields_values":{"type":"array"},"_embedded":{"type":"object"}}}}},"required":["leads"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update","description":"Update a Kommo lead by id (rename, change pipeline/status, change price, attach tags).","parameters":{"type":"object","properties":{"leadId":{"type":"integer"},"name":{"type":"string"},"price":{"type":"number"},"status_id":{"type":"integer"},"pipeline_id":{"type":"integer"},"responsible_user_id":{"type":"integer"},"custom_fields_values":{"type":"array"},"_embedded":{"type":"object"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.search","description":"Search contacts by free-text query (name, email, phone).","parameters":{"type":"object","properties":{"query":{"type":"string"},"page":{"type":"integer"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.get","description":"Fetch a single Kommo contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"integer"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create one or more contacts. Mirrors the activepieces piece auth-fields (name, first_name, last_name, email, phone, tags).","parameters":{"type":"object","properties":{"contacts":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"responsible_user_id":{"type":"integer"},"custom_fields_values":{"type":"array"},"_embedded":{"type":"object"}},"required":["name"]}}},"required":["contacts"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update a Kommo contact by id (name, first_name, last_name, custom field values).","parameters":{"type":"object","properties":{"contactId":{"type":"integer"},"name":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"responsible_user_id":{"type":"integer"},"custom_fields_values":{"type":"array"},"_embedded":{"type":"object"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"companies.search","description":"Search companies by free-text query — mirrors the catalog `query` auth-field (searches through filled company fields).","parameters":{"type":"object","properties":{"query":{"type":"string"},"page":{"type":"integer"},"limit":{"type":"integer"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.get","description":"Fetch a single Kommo company by id.","parameters":{"type":"object","properties":{"companyId":{"type":"integer"}},"required":["companyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.create","description":"Create one or more companies.","parameters":{"type":"object","properties":{"companies":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"responsible_user_id":{"type":"integer"},"custom_fields_values":{"type":"array"},"_embedded":{"type":"object"}},"required":["name"]}}},"required":["companies"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"companies.update","description":"Update a Kommo company by id.","parameters":{"type":"object","properties":{"companyId":{"type":"integer"},"name":{"type":"string"},"responsible_user_id":{"type":"integer"},"custom_fields_values":{"type":"array"},"_embedded":{"type":"object"}},"required":["companyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tags.add","description":"Attach tags to a lead/contact/company via the entity update endpoint — mirrors the `tags_to_add` auth-field.","parameters":{"type":"object","properties":{"entityType":{"type":"string","enum":["leads","contacts","companies"]},"entityId":{"type":"integer"},"_embedded":{"type":"object"}},"required":["entityType","entityId","_embedded"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tags.remove","description":"Remove tags from a lead/contact/company by re-sending the desired tag set — mirrors the `tags_to_delete` auth-field.","parameters":{"type":"object","properties":{"entityType":{"type":"string","enum":["leads","contacts","companies"]},"entityId":{"type":"integer"},"_embedded":{"type":"object"}},"required":["entityType","entityId","_embedded"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.search","description":"List tasks scoped to a responsible user or pipeline.","parameters":{"type":"object","properties":{"responsible_user_id":{"type":"integer"},"page":{"type":"integer"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.create","description":"Create one or more tasks against a lead/contact/company.","parameters":{"type":"object","properties":{"tasks":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"complete_till":{"type":"integer"},"task_type_id":{"type":"integer"},"entity_type":{"type":"string"},"entity_id":{"type":"integer"},"responsible_user_id":{"type":"integer"}},"required":["text","complete_till"]}}},"required":["tasks"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.create","description":"Add notes to a lead/contact/company.","parameters":{"type":"object","properties":{"entityType":{"type":"string","enum":["leads","contacts","companies"]},"notes":{"type":"array"}},"required":["entityType","notes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"kudosity","displayName":"Kudosity","description":"Send and manage SMS messages and contact lists via the Kudosity (Transmit SMS) API.","auth":{"kind":"api-key","hint":"Kudosity API key. Sent via HTTP Basic auth or as bearer per account settings."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contact.add.update","description":"Add a new contact to a list or update an existing one (matched by msisdn).","parameters":{"type":"object","properties":{"listId":{"type":"string","description":"Numeric ID of the recipient list."},"msisdn":{"type":"string","description":"Phone number in E.164 (e.g., +1234567890)."},"email":{"type":"string"}},"required":["listId","msisdn","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contact.create","description":"Create a contact on a Kudosity recipient list. Kudosity upserts by msisdn, so re-issuing with the same number updates the record in place.","parameters":{"type":"object","properties":{"listId":{"type":"string","description":"Numeric ID of the recipient list."},"msisdn":{"type":"string","description":"Phone number in E.164 format."},"email":{"type":"string"}},"required":["listId","msisdn","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contact.update","description":"Update an existing contact on a Kudosity recipient list, matched by msisdn. Backed by the same add-to-list upsert endpoint.","parameters":{"type":"object","properties":{"listId":{"type":"string","description":"Numeric ID of the recipient list the contact belongs to."},"msisdn":{"type":"string","description":"Phone number in E.164 identifying the existing contact."}},"required":["listId","msisdn"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contact.delete","description":"Delete a contact from a recipient list by msisdn.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"msisdn":{"type":"string"}},"required":["listId","msisdn"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sms.send","description":"Send an SMS message to a recipient.","parameters":{"type":"object","properties":{"message":{"type":"string","description":"Body of the SMS message."},"sender":{"type":"string","description":"Sender ID or virtual number assigned to the account."},"recipient":{"type":"string","description":"Destination number in E.164 or local format."},"messageRef":{"type":"string","description":"Optional reference string for correlation."},"trackLinks":{"type":"boolean","description":"Enable link tracking for this message."}},"required":["message","sender","recipient"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sms.cancel","description":"Cancel a scheduled SMS message by its numeric ID.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Numeric ID assigned to the message sent."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sms.info.get","description":"Fetch delivery and metadata for an SMS by message ID.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Numeric ID assigned to the message sent."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"number.format","description":"Normalize a phone number to E.164 given a country code.","parameters":{"type":"object","properties":{"country":{"type":"string","description":"Country code or name (e.g., US, AU, NZ)."},"number":{"type":"string","description":"Phone number in local format."}},"required":["country","number"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"kustomer","displayName":"Kustomer","description":"Create and manage Kustomer customers, conversations, and custom objects.","auth":{"kind":"api-key","hint":"Kustomer API key from your Kustomer account settings."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"customers.create","description":"Create a new Kustomer customer.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Primary email address of the customer."},"phone":{"type":"string","description":"Primary phone number in E.164 format."},"firstName":{"type":"string","description":"First name of the customer."},"lastName":{"type":"string","description":"Last name of the customer."},"company":{"type":"string","description":"Name of the company the customer belongs to."},"username":{"type":"string","description":"Username or handle for the customer."},"locale":{"type":"string","description":"Language/locale code (e.g. en, es)."},"timeZone":{"type":"string","description":"IANA timezone identifier."},"gender":{"type":"string","description":"Gender (male, female, other)."},"birthdayAt":{"type":"string","description":"Customer birthday in ISO 8601 format."},"signedUpAt":{"type":"string","description":"When customer registered in ISO 8601 format."},"avatarUrl":{"type":"string","description":"URL of the customer profile picture."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.get","description":"Retrieve a Kustomer customer by ID.","parameters":{"type":"object","properties":{"customerId":{"type":"string","description":"The Kustomer customer ID."}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.update","description":"Update fields on an existing Kustomer customer.","parameters":{"type":"object","properties":{"customerId":{"type":"string","description":"The Kustomer customer ID."},"email":{"type":"string"},"phone":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string"},"locale":{"type":"string"},"timeZone":{"type":"string"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.delete","description":"Delete a Kustomer customer by ID. Destructive — agent must surface confirmation.","parameters":{"type":"object","properties":{"customerId":{"type":"string","description":"The Kustomer customer ID to delete."}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.search","description":"Search for Kustomer customers.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Filter by email address."},"phone":{"type":"string","description":"Filter by phone number."},"limit":{"type":"integer","description":"Maximum number of results (default 10, max 100)."},"offset":{"type":"integer","description":"Pagination offset (default 0)."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversations.create","description":"Create a new Kustomer conversation.","parameters":{"type":"object","properties":{"customerId":{"type":"string","description":"The Kustomer ID of the customer this conversation belongs to."},"name":{"type":"string","description":"A short subject or title for the conversation (max 256 characters)."},"status":{"type":"string","description":"The initial status of the conversation (e.g. open, pending, closed)."},"priority":{"type":"integer","description":"Conversation priority from 1 (lowest) to 5 (highest)."},"direction":{"type":"string","description":"Direction (inbound, outbound)."},"externalId":{"type":"string","description":"A unique identifier from your own system (max 256 characters)."},"replyChannel":{"type":"string","description":"The channel used to reply (e.g. email, sms, web)."}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.get","description":"Retrieve a Kustomer conversation by ID.","parameters":{"type":"object","properties":{"conversationId":{"type":"string","description":"The Kustomer ID of the conversation."}},"required":["conversationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversations.update","description":"Update a Kustomer conversation.","parameters":{"type":"object","properties":{"conversationId":{"type":"string","description":"The Kustomer ID of the conversation to update."},"name":{"type":"string","description":"Conversation subject or title."},"status":{"type":"string","description":"Conversation status."},"priority":{"type":"integer","description":"Conversation priority from 1 to 5."}},"required":["conversationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"conversations.close","description":"Close a Kustomer conversation by setting its status to \"done\".","parameters":{"type":"object","properties":{"conversationId":{"type":"string","description":"The Kustomer ID of the conversation to close."}},"required":["conversationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customObjects.get","description":"Retrieve custom objects of a specific class.","parameters":{"type":"object","properties":{"klassName":{"type":"string","description":"The API name of the custom object class (e.g. MyCustomClass)."},"fromDate":{"type":"string","description":"Filter by creation/update date (ISO 8601 format, e.g. 2024-01-01)."},"limit":{"type":"integer","description":"Maximum number of results (default 10, max 100)."},"offset":{"type":"integer","description":"Pagination offset (default 0)."}},"required":["klassName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customObjects.create","description":"Create a new custom object.","parameters":{"type":"object","properties":{"klassName":{"type":"string","description":"The API name of the custom object class."},"customerId":{"type":"string","description":"Associated customer ID if applicable."},"data":{"type":"object","description":"Custom object attributes and values."}},"required":["klassName","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"lagrowthmachine","displayName":"LaGrowthMachine","description":"Multichannel sales automation (LinkedIn, email, Twitter). Create or update leads in audiences, list campaigns and audiences, and read campaign stats.","auth":{"kind":"api-key","hint":"Get your API key at app.lagrowthmachine.com/settings/api. Sent as the 'apikey' query parameter on every request."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"campaigns.list","description":"List campaigns with pagination.","parameters":{"type":"object","properties":{"skip":{"type":"integer","description":"Pagination offset."},"limit":{"type":"integer","description":"Maximum results to return."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"audiences.list","description":"List the audiences in the workspace.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaign.get_stats","description":"Get engagement statistics for a campaign.","parameters":{"type":"object","properties":{"campaignId":{"type":"string","description":"Campaign ID."}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lead.create_or_update","description":"Create or update a lead in an audience, which starts it through the audience's workflow.","parameters":{"type":"object","properties":{"audience":{"type":"string","description":"Audience name or identifier."},"proEmail":{"type":"string","description":"Professional email."},"persoEmail":{"type":"string","description":"Personal email."},"linkedinUrl":{"type":"string","description":"LinkedIn profile URL."},"firstname":{"type":"string","description":"First name."},"lastname":{"type":"string","description":"Last name."},"companyName":{"type":"string","description":"Company name."},"jobTitle":{"type":"string","description":"Job title."}},"required":["audience"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"lead-connector","displayName":"LeadConnector","description":"Manage HighLevel (LeadConnector) contacts, opportunities, tasks, notes, campaigns, and workflows.","auth":{"kind":"oauth2","authorizationUrl":"https://marketplace.gohighlevel.com/oauth/chooselocation","tokenUrl":"https://services.leadconnectorhq.com/oauth/token","scopes":["contacts.readonly","contacts.write","opportunities.readonly","opportunities.write","campaigns.readonly","workflows.readonly","locations.readonly"],"clientIdEnv":"LEAD_CONNECTOR_OAUTH_CLIENT_ID","clientSecretEnv":"LEAD_CONNECTOR_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.create","description":"Create a contact in a HighLevel sub-account (location).","parameters":{"type":"object","properties":{"locationId":{"type":"string","description":"HighLevel sub-account id the contact belongs to."},"firstName":{"type":"string"},"lastName":{"type":"string"},"name":{"type":"string","description":"Full display name; used when first/last are not supplied."},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"address1":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"country":{"type":"string"},"postalCode":{"type":"string"},"website":{"type":"string"},"timezone":{"type":"string"},"companyName":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"customFields":{"type":"array","items":{"type":"object"},"description":"Array of { id|key, field_value } entries."},"source":{"type":"string"}},"required":["locationId"]},"requiredScopes":["contacts.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Patch attributes of an existing HighLevel contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"address1":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"country":{"type":"string"},"postalCode":{"type":"string"},"website":{"type":"string"},"timezone":{"type":"string"},"companyName":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"customFields":{"type":"array","items":{"type":"object"}},"source":{"type":"string"}},"required":["contactId"]},"requiredScopes":["contacts.write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.search","description":"Search contacts in a sub-account by email, phone, or free-text query.","parameters":{"type":"object","properties":{"locationId":{"type":"string"},"query":{"type":"string","description":"Free-text search across name/email/phone."},"email":{"type":"string"},"phone":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"startAfter":{"type":"number","description":"Page cursor (ms since epoch of the prior page boundary)."},"startAfterId":{"type":"string","description":"Page cursor id from the prior response."}},"required":["locationId"]},"requiredScopes":["contacts.readonly"],"class":"read"},{"name":"contacts.notes.add","description":"Attach a note to a HighLevel contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"userId":{"type":"string","description":"Authoring user id; defaults to the token owner when omitted."},"body":{"type":"string","description":"Note body (plain text or HTML)."}},"required":["contactId","body"]},"requiredScopes":["contacts.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.campaigns.add","description":"Add a contact to a marketing campaign.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"campaignId":{"type":"string"}},"required":["contactId","campaignId"]},"requiredScopes":["contacts.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.workflows.add","description":"Enroll a contact in an automation workflow.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"workflowId":{"type":"string"},"eventStartTime":{"type":"string","description":"ISO-8601 timestamp to start workflow execution."}},"required":["contactId","workflowId"]},"requiredScopes":["contacts.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.create","description":"Create an opportunity within a pipeline stage.","parameters":{"type":"object","properties":{"locationId":{"type":"string"},"pipelineId":{"type":"string"},"pipelineStageId":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["open","won","lost","abandoned"]},"contactId":{"type":"string"},"monetaryValue":{"type":"number"},"assignedTo":{"type":"string","description":"Assignee user id."},"source":{"type":"string"},"customFields":{"type":"array","items":{"type":"object"}}},"required":["locationId","pipelineId","pipelineStageId","name"]},"requiredScopes":["opportunities.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.update","description":"Update an opportunity status, value, stage, or assignment.","parameters":{"type":"object","properties":{"opportunityId":{"type":"string"},"pipelineId":{"type":"string"},"pipelineStageId":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["open","won","lost","abandoned"]},"monetaryValue":{"type":"number"},"assignedTo":{"type":"string"},"customFields":{"type":"array","items":{"type":"object"}}},"required":["opportunityId"]},"requiredScopes":["opportunities.write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.create","description":"Create a task on a HighLevel contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"title":{"type":"string"},"body":{"type":"string","description":"Task description."},"dueDate":{"type":"string","description":"ISO-8601 due date."},"completed":{"type":"boolean"},"assignedTo":{"type":"string","description":"Assignee user id."}},"required":["contactId","title","dueDate"]},"requiredScopes":["contacts.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update a task on a HighLevel contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"taskId":{"type":"string"},"title":{"type":"string"},"body":{"type":"string"},"dueDate":{"type":"string"},"completed":{"type":"boolean"},"assignedTo":{"type":"string"}},"required":["contactId","taskId"]},"requiredScopes":["contacts.write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"leadfeeder","displayName":"Leadfeeder","description":"Identify the company behind a website-visitor IP address, returning firmographic details and a confidence score.","auth":{"kind":"api-key","hint":"API key from Leadfeeder (Dealfront) Settings -> API keys. Sent in the X-API-KEY request header."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"ip.enrich","description":"Resolve an IPv4 or IPv6 address to the company that owns it, including name, domain, industry, size, revenue, location, and confidence.","parameters":{"type":"object","properties":{"ip":{"type":"string","description":"Valid IPv4 or shortened IPv6 address to enrich, e.g. 185.70.216.139."}},"required":["ip"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"leadmagic","displayName":"LeadMagic","description":"B2B data enrichment API for finding and validating work emails, mobile numbers, and enriching people and company profiles.","auth":{"kind":"api-key","hint":"API key from LeadMagic Settings -> API. Sent as the X-API-Key header."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"credits.get","description":"Return the current API key credit balance. Free, no credits consumed.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"email.find","description":"Find a verified work email from a person's name and company (charged only when an email is found).","parameters":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"domain":{"type":"string"},"company_name":{"type":"string"}},"required":["first_name","last_name","domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"email.validate","description":"Validate an email address and return valid/invalid/unknown (charged only for definitive results).","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"profile.search","description":"Enrich a B2B profile from a profile URL or username.","parameters":{"type":"object","properties":{"profile_url":{"type":"string"}},"required":["profile_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"mobile.find","description":"Find a mobile phone number from a profile URL or email (charged only on a successful match).","parameters":{"type":"object","properties":{"profile_url":{"type":"string"},"work_email":{"type":"string"},"personal_email":{"type":"string"}},"required":["profile_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"company.search","description":"Enrich a company's firmographics from its domain, name, or profile URL (charged per company found).","parameters":{"type":"object","properties":{"company_domain":{"type":"string"},"company_name":{"type":"string"},"profile_url":{"type":"string"}},"required":["company_domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false}]},{"kind":"leap-ai","displayName":"Leap AI","description":"Trigger Leap AI hosted workflows and fetch their completion state. Workflows execute asynchronously and may invoke any chain of model + tool steps the tenant has configured.","auth":{"kind":"api-key","hint":"Leap AI API key (Workflows → Settings → API). Sent as a bearer token on every request."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"workflows.run","description":"Kick off a run of a Leap AI workflow. The call returns immediately with a workflow run ID; the run itself proceeds asynchronously and must be polled via workflows.getRun until it reports a terminal state. An optional webhook URL can be supplied to receive a push notification on completion.","parameters":{"type":"object","properties":{"workflow_id":{"type":"string","description":"ID of the Leap workflow to invoke. Copied from the workflow detail page in the Leap dashboard."},"webhook_url":{"type":"string","description":"Optional HTTPS URL Leap will POST to with the run’s final output when the workflow reaches a terminal state."},"input":{"type":"object","description":"Input variables bound into the workflow’s global scope. Shape is workflow-specific and defined by the workflow’s declared inputs.","additionalProperties":true}},"required":["workflow_id","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"workflows.getRun","description":"Fetch the current state of a previously-kicked-off Leap workflow run. Returns the run status, any intermediate step output, and — once the run reaches a terminal state — the workflow’s final output payload.","parameters":{"type":"object","properties":{"workflow_run_id":{"type":"string","description":"Workflow run ID returned by a prior workflows.run call (or surfaced in the Leap dashboard)."}},"required":["workflow_run_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"leexi","displayName":"Leexi","description":"Fetch call recordings, transcripts, and summaries from the Leexi AI Notetaker.","auth":{"kind":"api-key","hint":"Leexi API Key ID and Key Secret, issued at app.leexi.ai/settings/api_keys and sent as HTTP Basic credentials."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.get","description":"Get a single Leexi call by its identifier, including transcript and summary metadata.","parameters":{"type":"object","properties":{"callId":{"type":"string","description":"Leexi call identifier as returned by the new.call.created webhook."}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"lemlist","displayName":"Lemlist","description":"Manage Lemlist outbound campaigns: add/update/remove leads, mark leads interested or not interested, pause or resume leads, unsubscribe leads, and search leads.","auth":{"kind":"api-key","hint":"Lemlist API key from Settings → Integrations → API. Sent as ?access_token= on every request."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"leads.search","description":"Search for a lead by email across the workspace.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Lead email to look up."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.add.to.campaign","description":"Add a lead to a specific campaign.","parameters":{"type":"object","properties":{"campaignId":{"type":"string","description":"Lemlist campaign id."},"email":{"type":"string","description":"Lead email (required)."},"firstName":{"type":"string"},"lastName":{"type":"string"},"picture":{"type":"string"},"phone":{"type":"string"},"linkedinUrl":{"type":"string"},"companyName":{"type":"string"},"companyDomain":{"type":"string"},"icebreaker":{"type":"string"},"jobTitle":{"type":"string"},"deduplicate":{"type":"boolean"},"linkedinEnrichment":{"type":"boolean"},"findEmail":{"type":"boolean"},"verifyEmail":{"type":"boolean"},"findPhone":{"type":"boolean"}},"required":["campaignId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update.in.campaign","description":"Update fields on an existing lead in a campaign.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"},"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"picture":{"type":"string"},"phone":{"type":"string"},"linkedinUrl":{"type":"string"},"companyName":{"type":"string"},"companyDomain":{"type":"string"},"icebreaker":{"type":"string"},"jobTitle":{"type":"string"}},"required":["campaignId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"leads.remove.from.campaign","description":"Remove a lead from a campaign (destructive).","parameters":{"type":"object","properties":{"campaignId":{"type":"string"},"email":{"type":"string"}},"required":["campaignId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.mark.interested.in.campaign","description":"Mark a lead in one campaign as interested.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"},"email":{"type":"string"}},"required":["campaignId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.mark.not.interested.in.campaign","description":"Mark a lead in one campaign as not interested.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"},"email":{"type":"string"}},"required":["campaignId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.mark.interested.all.campaigns","description":"Mark a lead in every campaign they appear in as interested.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.mark.not.interested.all.campaigns","description":"Mark a lead in every campaign they appear in as not interested.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.pause.in.campaigns","description":"Pause a lead in all campaigns, or in a specific campaign when campaignId is provided.","parameters":{"type":"object","properties":{"email":{"type":"string"},"campaignId":{"type":"string","description":"Optional. Limit pause to one campaign."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.resume.in.campaigns","description":"Resume a paused lead in all campaigns, or in a specific campaign when campaignId is provided.","parameters":{"type":"object","properties":{"email":{"type":"string"},"campaignId":{"type":"string","description":"Optional. Limit resume to one campaign."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.unsubscribe","description":"Unsubscribe a lead from the workspace.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"unsubscribes.remove","description":"Remove a lead from the workspace unsubscribe list (destructive).","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"lemon-squeezy","displayName":"Lemon Squeezy","description":"Lemon Squeezy payment gateway: list products, orders, subscriptions, and customers, and create hosted checkout sessions.","auth":{"kind":"api-key","hint":"Lemon Squeezy API key from Settings → API. Sent as Authorization: Bearer ."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"products.list","description":"List products in a store with pagination.","parameters":{"type":"object","properties":{"storeId":{"type":"string"},"page":{"type":"integer","minimum":1},"perPage":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.list","description":"List orders, optionally filtered by store, customer email, or status.","parameters":{"type":"object","properties":{"storeId":{"type":"string"},"userEmail":{"type":"string"},"status":{"type":"string","enum":["pending","failed","paid","refunded"]},"page":{"type":"integer","minimum":1},"perPage":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.get","description":"Get a single order by id.","parameters":{"type":"object","properties":{"orderId":{"type":"string"}},"required":["orderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.list","description":"List subscriptions, optionally filtered by store or order item.","parameters":{"type":"object","properties":{"storeId":{"type":"string"},"orderItemId":{"type":"string"},"page":{"type":"integer","minimum":1},"perPage":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.list","description":"List customers, optionally filtered by store or email.","parameters":{"type":"object","properties":{"storeId":{"type":"string"},"email":{"type":"string"},"page":{"type":"integer","minimum":1},"perPage":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"checkouts.create","description":"Create a hosted checkout for a variant. Returns a checkout object whose attributes.url is the hosted payment page.","parameters":{"type":"object","properties":{"storeId":{"type":"string"},"variantId":{"type":"string"},"customerEmail":{"type":"string"},"customerName":{"type":"string"},"customPrice":{"type":"integer","minimum":1},"discountCode":{"type":"string"},"redirectUrl":{"type":"string"},"expiresAt":{"type":"string"},"customData":{"type":"object"}},"required":["storeId","variantId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.cancel","description":"Cancel a subscription. The subscription remains active until the end of the current billing period, after which it transitions to cancelled.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.issueRefund","description":"Issue a refund for an order. Omit `amount` to refund the full order total; otherwise pass an integer amount in cents (the smallest currency unit) for a partial refund.","parameters":{"type":"object","properties":{"id":{"type":"string"},"amount":{"type":"integer","minimum":1,"description":"Optional partial-refund amount in cents. Omit for a full refund."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"lets-calendar","displayName":"LetsCalendar","description":"Push contacts into LetsCalendar campaigns and read campaign metadata for scheduling and outreach flows.","auth":{"kind":"api-key","hint":"LetsCalendar client_key and secret_key issued from the workspace API settings. The connector sends them as HTTP Basic credentials on every request."},"category":"calendar","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.add.to.campaign","description":"Add a contact to a LetsCalendar campaign. Mirrors the activepieces add.contact.to.campaign action — campaign_id selects the campaign, the remaining fields populate the contact record.","parameters":{"type":"object","properties":{"campaign_id":{"type":"string","description":"The unique identifier of the campaign to add the contact to."},"firstname":{"type":"string","description":"First name of the contact (max 150 characters).","maxLength":150},"lastname":{"type":"string","description":"Last name of the contact (max 150 characters).","maxLength":150},"email":{"type":"string","description":"A valid email address for the contact (max 150 characters).","maxLength":150,"format":"email"},"loginurl":{"type":"string","description":"Login URL to send to the contact for the campaign portal."},"username":{"type":"string","description":"Username to associate with the contact in the campaign portal."},"password":{"type":"string","description":"Password to associate with the contact in the campaign portal."}},"required":["campaign_id","firstname","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.get","description":"Read a LetsCalendar campaign by id. Useful as a precheck before pushing contacts, and as the read pair to the new.campaign trigger.","parameters":{"type":"object","properties":{"campaign_id":{"type":"string","description":"The unique identifier of the campaign to read."}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.list","description":"List campaigns in the workspace. Backs the new.campaign trigger.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Max campaigns to return."},"cursor":{"type":"string","description":"Opaque pagination cursor returned by a previous page."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"letta","displayName":"Letta","description":"Build and manage stateful agents with Letta: create agents from templates, send messages, and manage identities.","auth":{"kind":"api-key","hint":"Letta API key (required for Letta Cloud) or leave empty for self-hosted."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"agents.create-from-template","description":"Create an agent from a template.","parameters":{"type":"object","properties":{"templateVersion":{"type":"string"},"agentName":{"type":"string"},"tags":{"type":"object"},"memoryVariables":{"type":"object"},"toolVariables":{"type":"object"},"initialMessageSequence":{"type":"object"}},"required":["templateVersion"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"agents.list","description":"List all agents.","parameters":{"type":"object","properties":{"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"agents.get","description":"Get details of a specific agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string"}},"required":["agentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"agents.send-message","description":"Send a message to an agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string"},"input":{"type":"string"},"maxSteps":{"type":"integer"}},"required":["agentId","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"identities.create","description":"Create an identity for agent interactions.","parameters":{"type":"object","properties":{"identifierKey":{"type":"string"},"identityType":{"type":"string"},"projectId":{"type":"string"},"properties":{"type":"object"}},"required":["identifierKey","identityType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"identities.list","description":"List identities.","parameters":{"type":"object","properties":{"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"identities.get","description":"Get details of a specific identity.","parameters":{"type":"object","properties":{"identityId":{"type":"string"}},"required":["identityId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"lever","displayName":"Lever","description":"Search and mutate Lever ATS opportunities (candidates), postings, requisitions, and notes.","auth":{"kind":"oauth2","authorizationUrl":"https://auth.lever.co/authorize","tokenUrl":"https://auth.lever.co/oauth/token","scopes":["offline_access","opportunities:read:admin","opportunities:write:admin","postings:read:admin","postings:write:admin","requisitions:read:admin","requisitions:write:admin","users:read:admin","stages:read:admin","archive_reasons:read:admin","sources:read:admin"],"clientIdEnv":"LEVER_OAUTH_CLIENT_ID","clientSecretEnv":"LEVER_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"opportunities.search","description":"List Lever opportunities (candidates) with optional filters.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Filter to opportunities for a candidate email."},"posting_id":{"type":"string"},"stage_id":{"type":"string"},"archived":{"type":"boolean"},"archived_posting_id":{"type":"string"},"tag":{"type":"string"},"contact_id":{"type":"string"},"source":{"type":"string"},"created_at_start":{"type":"integer","description":"Epoch ms."},"created_at_end":{"type":"integer","description":"Epoch ms."},"updated_at_start":{"type":"integer"},"updated_at_end":{"type":"integer"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"string"},"expand":{"type":"string","description":"Comma-sep list e.g. \"applications,stage,owner,followers\"."}}},"requiredScopes":["opportunities:read:admin"],"class":"read"},{"name":"opportunities.get","description":"Read a single Lever opportunity by id.","parameters":{"type":"object","properties":{"opportunityId":{"type":"string"},"expand":{"type":"string"}},"required":["opportunityId"]},"requiredScopes":["opportunities:read:admin"],"class":"read"},{"name":"opportunities.create","description":"Create a candidate opportunity. perform_as is required (the Lever user id taking the action).","parameters":{"type":"object","properties":{"perform_as":{"type":"string","description":"Lever user id (passed as query param)."},"name":{"type":"string"},"headline":{"type":"string"},"emails":{"type":"array","items":{"type":"string","format":"email"}},"phones":{"type":"array","items":{"type":"object"}},"links":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"sources":{"type":"array","items":{"type":"string"}},"origin":{"type":"string","enum":["applied","sourced","referred","university","agency","internal"]},"owner":{"type":"string"},"stage":{"type":"string"},"postings":{"type":"array","items":{"type":"string"}},"contact":{"type":"string"}},"required":["perform_as"]},"requiredScopes":["opportunities:write:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.addNote","description":"Add a note to a Lever opportunity.","parameters":{"type":"object","properties":{"opportunityId":{"type":"string"},"perform_as":{"type":"string"},"value":{"type":"string","description":"Note body."},"secret":{"type":"boolean"}},"required":["opportunityId","perform_as","value"]},"requiredScopes":["opportunities:write:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.advanceStage","description":"Move a Lever opportunity to a different stage.","parameters":{"type":"object","properties":{"opportunityId":{"type":"string"},"perform_as":{"type":"string"},"stage":{"type":"string","description":"Target stage id."}},"required":["opportunityId","perform_as","stage"]},"requiredScopes":["opportunities:write:admin"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"opportunities.archive","description":"Archive a Lever opportunity with a reason.","parameters":{"type":"object","properties":{"opportunityId":{"type":"string"},"perform_as":{"type":"string"},"reason":{"type":"string","description":"Archive reason id."},"requisitionId":{"type":"string","description":"Optional hired-against requisition id."}},"required":["opportunityId","perform_as","reason"]},"requiredScopes":["opportunities:write:admin"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"postings.search","description":"List Lever job postings with optional state / team / location filters.","parameters":{"type":"object","properties":{"state":{"type":"string","enum":["published","internal","closed","draft","pending","rejected"]},"team":{"type":"string"},"department":{"type":"string"},"location":{"type":"string"},"commitment":{"type":"string"},"level":{"type":"string"},"group":{"type":"string","enum":["team","department","location","commitment","level"]},"tag":{"type":"string"},"created_at_start":{"type":"integer"},"created_at_end":{"type":"integer"},"updated_at_start":{"type":"integer"},"updated_at_end":{"type":"integer"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"string"}}},"requiredScopes":["postings:read:admin"],"class":"read"},{"name":"postings.get","description":"Read a single Lever posting by id.","parameters":{"type":"object","properties":{"postingId":{"type":"string"}},"required":["postingId"]},"requiredScopes":["postings:read:admin"],"class":"read"},{"name":"postings.create","description":"Create a Lever posting.","parameters":{"type":"object","properties":{"perform_as":{"type":"string"},"text":{"type":"string","description":"Posting title."},"state":{"type":"string","enum":["published","internal","closed","draft","pending","rejected"]},"distributionChannels":{"type":"array","items":{"type":"string"}},"user":{"type":"string","description":"Hiring manager Lever user id."},"owner":{"type":"string","description":"Posting owner Lever user id."},"hiringManager":{"type":"string"},"categories":{"type":"object"},"tags":{"type":"array","items":{"type":"string"}},"content":{"type":"object","description":"Posting body sections."},"country":{"type":"string"},"followers":{"type":"array","items":{"type":"string"}},"reqCode":{"type":"string"},"requisitionCodes":{"type":"array","items":{"type":"string"}}},"required":["perform_as","text"]},"requiredScopes":["postings:write:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"requisitions.search","description":"List Lever requisitions.","parameters":{"type":"object","properties":{"requisition_code":{"type":"string"},"status":{"type":"string","enum":["open","onHold","closed","draft"]},"created_at_start":{"type":"integer"},"created_at_end":{"type":"integer"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"string"}}},"requiredScopes":["requisitions:read:admin"],"class":"read"},{"name":"requisitions.get","description":"Read a single Lever requisition by id.","parameters":{"type":"object","properties":{"requisitionId":{"type":"string"}},"required":["requisitionId"]},"requiredScopes":["requisitions:read:admin"],"class":"read"},{"name":"users.search","description":"List Lever users (recruiters, hiring managers).","parameters":{"type":"object","properties":{"email":{"type":"string"},"access_role":{"type":"string","enum":["super_admin","admin","team_member","limited_team_member","interviewer"]},"deactivated":{"type":"boolean"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"string"}}},"requiredScopes":["users:read:admin"],"class":"read"},{"name":"stages.list","description":"List configured Lever pipeline stages.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"string"}}},"requiredScopes":["stages:read:admin"],"class":"read"},{"name":"archive_reasons.list","description":"List configured Lever archive reasons (required for archiving opportunities).","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"string"}}},"requiredScopes":["archive_reasons:read:admin"],"class":"read"},{"name":"sources.list","description":"List configured Lever opportunity sources.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"string"}}},"requiredScopes":["sources:read:admin"],"class":"read"}]},{"kind":"lightfunnels","displayName":"Lightfunnels","description":"Manage Lightfunnels products, orders, customers and funnels.","auth":{"kind":"oauth2","authorizationUrl":"https://app.lightfunnels.com/oauth/authorize","tokenUrl":"https://api.lightfunnels.com/oauth/token","scopes":["read","write"],"clientIdEnv":"LIGHTFUNNELS_OAUTH_CLIENT_ID","clientSecretEnv":"LIGHTFUNNELS_OAUTH_CLIENT_SECRET"},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"list.products","description":"List Lightfunnels products.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"},"query":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.product","description":"Get a single Lightfunnels product by id.","parameters":{"type":"object","properties":{"productId":{"type":"string"}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"create.product","description":"Create a Lightfunnels product.","parameters":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"compare_at_price":{"type":"number"},"sku":{"type":"string"},"published":{"type":"boolean"}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.order","description":"Get a single Lightfunnels order by id.","parameters":{"type":"object","properties":{"orderId":{"type":"string"}},"required":["orderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"list.orders","description":"List Lightfunnels orders.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"},"status":{"type":"string"},"funnel_id":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cancel.order","description":"Cancel a Lightfunnels order. Destructive — agent must surface confirmation.","parameters":{"type":"object","properties":{"orderId":{"type":"string"},"reason":{"type":"string"},"refund":{"type":"boolean"}},"required":["orderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.customer","description":"Create a Lightfunnels customer record.","parameters":{"type":"object","properties":{"email":{"type":"string","format":"email"},"first_name":{"type":"string"},"last_name":{"type":"string"},"phone":{"type":"string"},"accepts_marketing":{"type":"boolean"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.customer","description":"Get a single Lightfunnels customer by id.","parameters":{"type":"object","properties":{"customerId":{"type":"string"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"list.customers","description":"List Lightfunnels customers.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"},"query":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.funnel","description":"Get a Lightfunnels funnel by id.","parameters":{"type":"object","properties":{"funnelId":{"type":"string"}},"required":["funnelId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"linear","displayName":"Linear","description":"Query, create, and update Linear issues, comments, projects, and teams via the Linear GraphQL API.","auth":{"kind":"oauth2","authorizationUrl":"https://linear.app/oauth/authorize","tokenUrl":"https://api.linear.app/oauth/token","scopes":["read","write","issues:create","comments:create"],"clientIdEnv":"LINEAR_OAUTH_CLIENT_ID","clientSecretEnv":"LINEAR_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"viewer.get","description":"Return the authenticated Linear user and their organization.","parameters":{"type":"object","properties":{}},"requiredScopes":["read"],"class":"read"},{"name":"issues.get","description":"Read a single Linear issue by id or identifier (e.g. ENG-123). Pass `{ variables: { id: \"ENG-1\" } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},"required":["variables"]},"requiredScopes":["read"],"class":"read"},{"name":"issues.search","description":"Search Linear issues with a GraphQL IssueFilter; supports cursor pagination. Pass `{ variables: { filter, first, after, orderBy } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"filter":{"type":"object"},"first":{"type":"integer","minimum":1,"maximum":250},"after":{"type":"string"},"orderBy":{"type":"string","enum":["createdAt","updatedAt"]}}}},"required":["variables"]},"requiredScopes":["read"],"class":"read"},{"name":"issues.create","description":"Create a Linear issue. Pass `{ variables: { input: IssueCreateInput } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"input":{"type":"object","properties":{"teamId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"priority":{"type":"integer","minimum":0,"maximum":4},"assigneeId":{"type":"string"},"stateId":{"type":"string"},"projectId":{"type":"string"},"labelIds":{"type":"array","items":{"type":"string"}}},"required":["teamId","title"]}},"required":["input"]}},"required":["variables"]},"requiredScopes":["issues:create"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.update","description":"Update fields on an existing Linear issue. Pass `{ variables: { id, input: IssueUpdateInput } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"id":{"type":"string"},"input":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"priority":{"type":"integer","minimum":0,"maximum":4},"assigneeId":{"type":"string"},"stateId":{"type":"string"},"projectId":{"type":"string"},"labelIds":{"type":"array","items":{"type":"string"}}}}},"required":["id","input"]}},"required":["variables"]},"requiredScopes":["write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"issues.delete","description":"Archive (delete) a Linear issue. Pass `{ variables: { id } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},"required":["variables"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Add a comment to a Linear issue. Pass `{ variables: { input: CommentCreateInput } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"input":{"type":"object","properties":{"issueId":{"type":"string"},"body":{"type":"string"},"parentId":{"type":"string"}},"required":["issueId","body"]}},"required":["input"]}},"required":["variables"]},"requiredScopes":["comments:create"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.list","description":"List comments matching a Linear CommentFilter; cursor paginated. Pass `{ variables: { filter, first, after } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"filter":{"type":"object"},"first":{"type":"integer","minimum":1,"maximum":250},"after":{"type":"string"}}}},"required":["variables"]},"requiredScopes":["read"],"class":"read"},{"name":"projects.list","description":"List Linear projects matching an optional ProjectFilter. Pass `{ variables: { filter, first, after } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"filter":{"type":"object"},"first":{"type":"integer","minimum":1,"maximum":250},"after":{"type":"string"}}}},"required":["variables"]},"requiredScopes":["read"],"class":"read"},{"name":"projects.create","description":"Create a Linear project. Pass `{ variables: { input: ProjectCreateInput } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"input":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"teamIds":{"type":"array","items":{"type":"string"}},"startDate":{"type":"string"},"targetDate":{"type":"string"},"leadId":{"type":"string"}},"required":["name","teamIds"]}},"required":["input"]}},"required":["variables"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"teams.list","description":"List Linear teams visible to the authenticated user. Pass `{ variables: { first, after } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"first":{"type":"integer","minimum":1,"maximum":250},"after":{"type":"string"}}}},"required":["variables"]},"requiredScopes":["read"],"class":"read"}]},{"kind":"linka","displayName":"Linka","description":"Manage Linka (Sperse-powered) marketplace contacts, subscriptions, invoices, and products.","auth":{"kind":"api-key","hint":"Linka / Sperse API key (sent as X-API-Key on every request)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.get","description":"Get a Linka contact by Sperse contact ID.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.upsert","description":"Add or update a Linka contact (mirrors activepieces addOrUpdateContact).","parameters":{"type":"object","properties":{"contactId":{"type":"number"},"contactXref":{"type":"string"},"matchExisting":{"type":"boolean"},"overrideLists":{"type":"boolean"},"ignoreInvalidValues":{"type":"boolean"},"importType":{"type":"string"},"createUser":{"type":"boolean"},"sendWelcomeEmail":{"type":"boolean"},"fields":{"type":"object"}},"required":["importType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.upsert.extended","description":"Add or update a Linka contact with extended profile fields (mirrors addOrUpdateContactExtended).","parameters":{"type":"object","properties":{"contactId":{"type":"number"},"contactXref":{"type":"string"},"matchExisting":{"type":"boolean"},"overrideLists":{"type":"boolean"},"ignoreInvalidValues":{"type":"boolean"},"importType":{"type":"string"},"createUser":{"type":"boolean"},"sendWelcomeEmail":{"type":"boolean"},"userPassword":{"type":"string"},"fields":{"type":"object"},"social":{"type":"object"},"company":{"type":"object"},"tracking":{"type":"object"}},"required":["importType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.upsert","description":"Add or update a Linka subscription for a contact.","parameters":{"type":"object","properties":{"contactId":{"type":"number"},"contactXref":{"type":"string"},"subscriptionXref":{"type":"string"},"productCode":{"type":"string"},"status":{"type":"string"},"startDate":{"type":"string"},"endDate":{"type":"string"},"fields":{"type":"object"}},"required":["productCode"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.create","description":"Create a Linka invoice for a contact.","parameters":{"type":"object","properties":{"contactId":{"type":"number"},"contactXref":{"type":"string"},"invoiceXref":{"type":"string"},"currency":{"type":"string"},"dueDate":{"type":"string"},"lineItems":{"type":"array"},"notes":{"type":"string"}},"required":["lineItems"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.create","description":"Create a Linka product / catalog entry.","parameters":{"type":"object","properties":{"productCode":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"currency":{"type":"string"},"category":{"type":"string"},"active":{"type":"boolean"},"fields":{"type":"object"}},"required":["productCode","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"linkedin","displayName":"LinkedIn","description":"Read the connected LinkedIn member profile and create / delete member posts and comments via the LinkedIn REST API.","auth":{"kind":"oauth2","authorizationUrl":"https://www.linkedin.com/oauth/v2/authorization","tokenUrl":"https://www.linkedin.com/oauth/v2/accessToken","scopes":["openid","profile","email","w_member_social"],"clientIdEnv":"LINKEDIN_OAUTH_CLIENT_ID","clientSecretEnv":"LINKEDIN_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"advisory","capabilities":[{"name":"userinfo","description":"Return the OpenID-Connect userinfo for the connected LinkedIn member (sub, name, given_name, family_name, picture, email, email_verified, locale).","parameters":{"type":"object","properties":{}},"requiredScopes":["openid","profile","email"],"class":"read"},{"name":"shares.create","description":"Create a published text or article share on the connected member feed through LinkedIn's self-serve UGC Posts API. `author` is the connected member URN, `text` is the share commentary, and an optional `url` creates an article card.","parameters":{"type":"object","properties":{"author":{"type":"string","description":"URN of the connected member (urn:li:person:{sub})."},"text":{"type":"string","description":"Share text."},"url":{"type":"string","description":"Optional URL for an article card."},"title":{"type":"string","description":"Optional article-card title."},"description":{"type":"string","description":"Optional article-card description."},"visibility":{"type":"string","enum":["PUBLIC","CONNECTIONS"],"default":"PUBLIC"}},"required":["author","text"]},"requiredScopes":["w_member_social"],"class":"mutation","cas":"none","externalEffect":true},{"name":"posts.create","description":"Create a LinkedIn member post on the REST Posts API. `author` is the connected member URN (e.g. `urn:li:person:{sub}`). `commentary` is the post text; `distribution.feedDistribution` defaults to `MAIN_FEED`; `lifecycleState` defaults to `PUBLISHED`. Append-only — caller owns dedupe via idempotencyKey.","parameters":{"type":"object","properties":{"author":{"type":"string","description":"URN of the connected member post author (urn:li:person:{sub})."},"commentary":{"type":"string","description":"Post text body."},"visibility":{"type":"string","enum":["PUBLIC","CONNECTIONS","LOGGED_IN","CONTAINER"],"default":"PUBLIC"},"distribution":{"type":"object","description":"Distribution policy. Defaults to { feedDistribution: \"MAIN_FEED\", targetEntities: [], thirdPartyDistributionChannels: [] }."},"content":{"type":"object","description":"Optional rich-media content block ({ article: {...} } | { media: {...} } | { multiImage: {...} } | { poll: {...} } | { carousel: {...} })."},"lifecycleState":{"type":"string","enum":["PUBLISHED","DRAFT"],"default":"PUBLISHED"},"isReshareDisabledByAuthor":{"type":"boolean","default":false}},"required":["author","commentary"]},"requiredScopes":["w_member_social"],"class":"mutation","cas":"none","externalEffect":true},{"name":"posts.delete","description":"Delete a post by its URL-encoded URN. Idempotent on the URN — replays after success return 404 and the engine maps that to a no-op.","parameters":{"type":"object","properties":{"postUrn":{"type":"string"}},"required":["postUrn"]},"requiredScopes":["w_member_social"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Create a top-level comment on a share / post as the connected member. `actor` is the member URN posting the comment; `message.text` is the comment text. Append-only — caller owns dedupe via idempotencyKey.","parameters":{"type":"object","properties":{"shareUrn":{"type":"string","description":"URL-encoded URN of the parent share (urn:li:share:* or urn:li:ugcPost:*)."},"actor":{"type":"string","description":"URN of the commenting member."},"message":{"type":"object","description":"Comment body `{ text: string, attributes?: [...] }`."},"parentComment":{"type":"string","description":"Optional URN of a parent comment for threaded replies."}},"required":["shareUrn","actor","message"]},"requiredScopes":["w_member_social"],"class":"mutation","cas":"none","externalEffect":true},{"name":"comments.update","description":"Edit the text of an existing comment by its URN. Only the original comment actor can edit. Verified via read-after-write because LinkedIn returns no ETag.","parameters":{"type":"object","properties":{"shareUrn":{"type":"string"},"commentUrn":{"type":"string","description":"URL-encoded URN of the comment to update."},"actor":{"type":"string"},"message":{"type":"object"}},"required":["shareUrn","commentUrn","actor","message"]},"requiredScopes":["w_member_social"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"comments.delete","description":"Delete a comment by URN. `actor` must be the comment author. Idempotent on the URN.","parameters":{"type":"object","properties":{"shareUrn":{"type":"string"},"commentUrn":{"type":"string"},"actor":{"type":"string"}},"required":["shareUrn","commentUrn","actor"]},"requiredScopes":["w_member_social"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"linkup","displayName":"Linkup","description":"Web search engine for AI apps. Run grounded web searches and fetch live webpage content via the Linkup API.","auth":{"kind":"api-key","hint":"Linkup API key from the Linkup console."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"search","description":"Run a natural-language web search grounded by Linkup. Supports standard or deep retrieval, structured output, and domain/date filters.","parameters":{"type":"object","properties":{"q":{"type":"string"},"depth":{"type":"string","enum":["standard","deep"]},"outputType":{"type":"string","enum":["searchResults","sourcedAnswer","structured"]},"structuredOutputSchema":{"type":"string"},"includeSources":{"type":"boolean"},"includeImages":{"type":"boolean"},"includeInlineCitations":{"type":"boolean"},"fromDate":{"type":"string"},"toDate":{"type":"string"},"includeDomains":{"type":"array","items":{"type":"string"}},"excludeDomains":{"type":"array","items":{"type":"string"}},"maxResults":{"type":"integer"}},"required":["q","depth","outputType"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"fetch","description":"Fetch a single webpage through Linkup, optionally rendering JavaScript and extracting images or raw HTML.","parameters":{"type":"object","properties":{"url":{"type":"string"},"renderJs":{"type":"boolean"},"includeRawHtml":{"type":"boolean"},"extractImages":{"type":"boolean"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"llmrails","displayName":"LLM Rails","description":"Run hybrid semantic search against an LLM Rails datastore and optionally summarize the results.","auth":{"kind":"api-key","hint":"LLM Rails API key (workspace settings → API keys). Sent as a bearer token on every request."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"datastore.search","description":"Search a datastore using a natural-language query. Supports hybrid (dense + sparse) retrieval and optional answer summarization over the matched chunks.","parameters":{"type":"object","properties":{"datastoreId":{"type":"string","description":"Identifier of the LLM Rails datastore to search. Visible in the LLM Rails UI as the datastore slug or UUID."},"text":{"type":"string","description":"Natural-language search query."},"hybrid":{"type":"boolean","description":"When true, combine dense embedding similarity with sparse keyword scoring. When false, dense-only retrieval is used."},"summarize":{"type":"boolean","description":"When true, LLM Rails synthesizes a summary answer over the retrieved chunks in addition to returning the raw matches."}},"required":["datastoreId","text","hybrid","summarize"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"lobstermail","displayName":"LobsterMail","description":"Provision LobsterMail inboxes, send transactional email, and search received messages.","auth":{"kind":"api-key","hint":"LobsterMail API key from Settings → API Keys (starts with lm_)."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.get","description":"Fetch the LobsterMail account associated with the current API key.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"inboxes.create","description":"Create a new inbox under the account. Domain defaults to lobstermail.ai when omitted.","parameters":{"type":"object","properties":{"displayName":{"type":"string"},"localPart":{"type":"string"},"domain":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"inboxes.get","description":"Fetch a single inbox by ID.","parameters":{"type":"object","properties":{"inboxId":{"type":"string"}},"required":["inboxId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"inboxes.list","description":"List inboxes on the account.","parameters":{"type":"object","properties":{"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"inboxes.delete","description":"Permanently delete an inbox and detach its email address.","parameters":{"type":"object","properties":{"inboxId":{"type":"string"}},"required":["inboxId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"emails.send","description":"Send a transactional email from an inbox. At least one of body_text or body_html is required by the API.","parameters":{"type":"object","properties":{"inboxId":{"type":"string"},"to":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body_text":{"type":"string"},"body_html":{"type":"string"},"cc":{"type":"array","items":{"type":"string"}},"in_reply_to":{"type":"string"},"thread_id":{"type":"string"}},"required":["inboxId","to","subject"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"emails.list","description":"List emails on an inbox, optionally filtered by direction, unread state, or attachment presence.","parameters":{"type":"object","properties":{"inboxId":{"type":"string"},"direction":{"type":"string","enum":["inbound","outbound"]},"unread_only":{"type":"boolean"},"has_attachments":{"type":"boolean"},"limit":{"type":"integer"}},"required":["inboxId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"emails.get","description":"Fetch a single email by ID (prefix eml_), including full body and attachment metadata.","parameters":{"type":"object","properties":{"email_id":{"type":"string"}},"required":["email_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"emails.search","description":"Search emails across the account. Searches subjects (highest priority), senders, and body previews; optionally narrowed by sender or attachment presence.","parameters":{"type":"object","properties":{"query":{"type":"string"},"from":{"type":"string"},"has_attachments":{"type":"boolean"},"limit":{"type":"integer"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"localai","displayName":"LocalAI","description":"Call a self-hosted LocalAI instance over its OpenAI-compatible REST surface: list available models and run chat completions.","auth":{"kind":"api-key","hint":"Optional LocalAI access token. The connection must also store the instance base URL (e.g. https://localai.example.com) in the base_url metadata field."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"models.list","description":"List models served by the LocalAI instance.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"ask.local.ai","description":"Run a chat completion against the LocalAI instance. Mirrors the activepieces askLocalAI action: a single prompt with sampling controls and optional role/system messages.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model id from /v1/models. LocalAI serves whatever model files are installed on the host; there is no fixed enum."},"prompt":{"type":"string","description":"User prompt forwarded as the final user-role message."},"roles":{"type":"array","description":"Optional preceding messages (system / assistant / prior user turns). When omitted only the prompt is sent.","items":{"type":"object","properties":{"role":{"type":"string","enum":["system","user","assistant"]},"content":{"type":"string"}},"required":["role","content"]}},"temperature":{"type":"number","description":"Sampling temperature. Lower values make the model more deterministic."},"maxTokens":{"type":"integer","description":"Maximum number of tokens to generate across prompt + completion.","minimum":1},"topP":{"type":"number","description":"Nucleus-sampling cutoff. 0.1 keeps only the top 10% probability mass."},"frequencyPenalty":{"type":"number","description":"Frequency penalty in [-2, 2]. Positive values discourage token repetition by frequency.","minimum":-2,"maximum":2},"presencePenalty":{"type":"number","description":"Presence penalty in [-2, 2]. Positive values encourage new topics.","minimum":-2,"maximum":2}},"required":["model","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"lofty","displayName":"Lofty","description":"Create and update leads and transactions in Lofty for real estate agents.","auth":{"kind":"api-key","hint":"Lofty API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"leads.create","description":"Create a lead in Lofty.","parameters":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"source":{"type":"string"},"leadType":{"type":"string"},"minPrice":{"type":"number"},"maxPrice":{"type":"number"},"city":{"type":"string"},"state":{"type":"string"},"zipcode":{"type":"string"},"beds":{"type":"number"},"baths":{"type":"number"},"tags":{"type":"array","items":{"type":"string"}},"note":{"type":"string"},"sendWelcomeEmail":{"type":"boolean"},"emailOptIn":{"type":"boolean"}},"required":["firstName","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update","description":"Update a lead in Lofty.","parameters":{"type":"object","properties":{"leadId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"source":{"type":"string"},"leadType":{"type":"string"},"minPrice":{"type":"number"},"maxPrice":{"type":"number"},"city":{"type":"string"},"state":{"type":"string"},"zipcode":{"type":"string"},"beds":{"type":"number"},"baths":{"type":"number"},"tags":{"type":"array","items":{"type":"string"}},"note":{"type":"string"},"emailOptIn":{"type":"boolean"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"transactions.create","description":"Create a transaction in Lofty.","parameters":{"type":"object","properties":{"leadId":{"type":"string"},"transactionDate":{"type":"string"},"transactionType":{"type":"string"},"amount":{"type":"number"},"propertyAddress":{"type":"string"},"propertyCity":{"type":"string"},"propertyState":{"type":"string"},"propertyZipcode":{"type":"string"},"beds":{"type":"number"},"baths":{"type":"number"},"sqft":{"type":"number"},"mlsNumber":{"type":"string"},"closingDate":{"type":"string"}},"required":["leadId","transactionType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.update","description":"Update a transaction in Lofty.","parameters":{"type":"object","properties":{"transactionId":{"type":"string"},"transactionDate":{"type":"string"},"transactionType":{"type":"string"},"amount":{"type":"number"},"propertyAddress":{"type":"string"},"propertyCity":{"type":"string"},"propertyState":{"type":"string"},"propertyZipcode":{"type":"string"},"beds":{"type":"number"},"baths":{"type":"number"},"sqft":{"type":"number"},"mlsNumber":{"type":"string"},"closingDate":{"type":"string"}},"required":["transactionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"leads.delete","description":"Delete a lead by id.","parameters":{"type":"object","properties":{"leadId":{"type":"string"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.create","description":"Create a task on a lead.","parameters":{"type":"object","properties":{"leadId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"dueDate":{"type":"string"},"priority":{"type":"string"},"assigneeId":{"type":"string"},"status":{"type":"string"}},"required":["leadId","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"logrocket","displayName":"LogRocket","description":"Request AI-generated session highlights and identify users in LogRocket.","auth":{"kind":"api-key","hint":"LogRocket API key (Settings → Project Setup → API Keys)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"highlights.request","description":"Request AI-generated highlights for a project; results are POSTed to webhookUrl when ready.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"LogRocket organization ID (slug or numeric ID)."},"appId":{"type":"string","description":"LogRocket app/project ID. Either appId or projectId is required."},"projectId":{"type":"string","description":"LogRocket project ID (alias of appId for newer projects)."},"webhookUrl":{"type":"string","description":"URL the highlights service will POST results to when the request completes."},"userEmail":{"type":"string","description":"Filter sessions to a single user by email."},"timeRangeStart":{"type":"integer","description":"Unix milliseconds — inclusive lower bound on session start."},"timeRangeEnd":{"type":"integer","description":"Unix milliseconds — exclusive upper bound on session start."},"markdown":{"type":"boolean","description":"Render highlights as markdown rather than plain text."}},"required":["orgId","webhookUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.identify","description":"Identify a user / upsert trait metadata against an existing LogRocket app.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"LogRocket organization ID."},"appId":{"type":"string","description":"LogRocket app/project ID."},"userId":{"type":"string","description":"Unique identifier for the user being identified."},"name":{"type":"string","description":"Display name to attach to the user."},"email":{"type":"string","description":"Email address to attach to the user."},"timestamp":{"type":"integer","description":"Unix milliseconds — when these traits were observed. Defaults to server time."},"traits":{"type":"object","description":"Arbitrary key/value pairs to merge into the user profile."}},"required":["orgId","appId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"highlights.ready","description":"Read the latest highlights request for a project — exposes the same payload the highlightsReady webhook would deliver, so callers without an inbound webhook can poll.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"LogRocket organization ID."},"appId":{"type":"string","description":"LogRocket app/project ID."},"requestId":{"type":"string","description":"Highlights request ID returned by highlights.request. Omit to fetch the most recent."},"status":{"type":"string","description":"Filter by request status (pending, complete, failed) when listing."},"limit":{"type":"integer","description":"Maximum number of requests to return when listing."}},"required":["orgId","appId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"logsnag","displayName":"LogSnag","description":"Track project events, identify users, and update insight counters in LogSnag.","auth":{"kind":"api-key","hint":"LogSnag project API token (Authorization: Bearer …)."},"category":"comms","defaultConsistencyModel":"advisory","capabilities":[{"name":"create.event","description":"Publish an event to a LogSnag channel. Mirrors the activepieces createEvent action — project, channel, and event are required; description, icon, notify, and tags are optional.","parameters":{"type":"object","properties":{"project":{"type":"string","description":"LogSnag project slug the event belongs to."},"channel":{"type":"string","description":"Channel within the project (e.g. \"signups\")."},"event":{"type":"string","description":"Short event title shown in the LogSnag feed."},"description":{"type":"string","description":"Optional longer body for the event."},"icon":{"type":"string","description":"Optional single emoji shown next to the event."},"notify":{"type":"boolean","description":"When true, send a push notification to subscribers."},"tags":{"type":"object","description":"Free-form key/value tags. Keys must be lowercase and dash-separated."},"user_id":{"type":"string","description":"Optional user identifier to attach to the event."},"parser":{"type":"string","enum":["markdown","text"],"description":"Renderer for description."},"timestamp":{"type":"integer","description":"Optional unix-seconds timestamp; defaults to now."}},"required":["project","channel","event"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"identify.user","description":"Attach trait properties to a user identifier inside a LogSnag project. Properties are merged server-side.","parameters":{"type":"object","properties":{"project":{"type":"string"},"user_id":{"type":"string","description":"Stable user identifier."},"properties":{"type":"object","description":"Trait key/value pairs to merge."}},"required":["project","user_id","properties"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"group.identify","description":"Attach trait properties to a group (org/team) identifier inside a LogSnag project.","parameters":{"type":"object","properties":{"project":{"type":"string"},"group_id":{"type":"string"},"properties":{"type":"object"}},"required":["project","group_id","properties"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"insight.publish","description":"Upsert a numeric insight tile on a LogSnag project dashboard.","parameters":{"type":"object","properties":{"project":{"type":"string"},"title":{"type":"string","description":"Human-readable insight title."},"value":{"type":"number","description":"Numeric value to display."},"icon":{"type":"string","description":"Optional emoji icon."}},"required":["project","title","value"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"insight.mutate","description":"Atomically increment, decrement, or set an insight value by title. Use this for counters that must not race.","parameters":{"type":"object","properties":{"project":{"type":"string"},"title":{"type":"string"},"value":{"type":"object","description":"Atomic mutation, e.g. { \"$inc\": 1 } or { \"$set\": 42 }."},"icon":{"type":"string"}},"required":["project","title","value"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"lokalise","displayName":"Lokalise","description":"Manage Lokalise translation projects: read projects, keys, translations, and comments; create or update keys, translations, tasks, projects, and comments.","auth":{"kind":"api-key","hint":"Lokalise API token, sent as the X-Api-Token header."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"projects.create","description":"Create a new Lokalise project.","parameters":{"type":"object","properties":{"name":{"type":"string"},"team_id":{"type":"string"},"description":{"type":"string"},"base_lang_iso":{"type":"string"},"languages":{"type":"array","items":{"type":"object"}},"project_type":{"type":"string"},"is_segmentation_enabled":{"type":"boolean"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.get","description":"Retrieve a single Lokalise project.","parameters":{"type":"object","properties":{"project_id":{"type":"string"}},"required":["project_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"keys.create","description":"Create one or more translation keys in a project.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"keys":{"type":"array","items":{"type":"object"}},"use_automations":{"type":"boolean"}},"required":["project_id","keys"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"keys.get","description":"Retrieve a single key from a project.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"key_id":{"type":"string"},"disable_references":{"type":"boolean"}},"required":["project_id","key_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"keys.update","description":"Update an existing translation key.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"key_id":{"type":"string"},"key_name":{"type":"string"},"description":{"type":"string"},"platforms":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"merge_tags":{"type":"boolean"},"is_plural":{"type":"boolean"},"plural_name":{"type":"string"},"is_hidden":{"type":"boolean"},"is_archived":{"type":"boolean"},"context":{"type":"string"},"char_limit":{"type":"integer"}},"required":["project_id","key_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"keys.delete","description":"Delete a translation key from a project.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"key_id":{"type":"string"}},"required":["project_id","key_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"translations.get","description":"Retrieve a single translation by id.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"translation_id":{"type":"string"},"disable_references":{"type":"boolean"}},"required":["project_id","translation_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"translations.update","description":"Update a translation by id.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"translation_id":{"type":"string"},"translation":{"type":"string"},"is_unverified":{"type":"boolean"},"is_reviewed":{"type":"boolean"},"custom_translation_status_ids":{"type":"array","items":{"type":"integer"}}},"required":["project_id","translation_id","translation"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.create","description":"Create a translation or review task within a project.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"title":{"type":"string"},"task_type":{"type":"string"},"keys":{"type":"array","items":{"type":"integer"}},"languages":{"type":"array","items":{"type":"object"}},"source_language_iso":{"type":"string"},"due_date":{"type":"string"},"auto_close_languages":{"type":"boolean"},"auto_close_task":{"type":"boolean"},"closing_tags":{"type":"array","items":{"type":"string"}},"do_lock_translations":{"type":"boolean"},"mark_verified":{"type":"boolean"},"save_ai_translation_to_tm":{"type":"boolean"},"apply_ai_tm_100_matches":{"type":"boolean"}},"required":["project_id","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Add a comment to a key in a project.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"key_id":{"type":"string"},"comment":{"type":"string"}},"required":["project_id","key_id","comment"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.get","description":"Retrieve a single comment on a key.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"key_id":{"type":"string"},"comment_id":{"type":"string"}},"required":["project_id","key_id","comment_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"loops","displayName":"Loops","description":"Send transactional and marketing emails. Manage contacts, trigger automations, and send campaigns.","auth":{"kind":"api-key","hint":"Loops API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.create","description":"Create a new contact or update an existing one.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the contact."},"firstName":{"type":"string","description":"First name of the contact."},"lastName":{"type":"string","description":"Last name of the contact."},"userId":{"type":"string","description":"Internal user ID for this contact."},"subscribed":{"type":"boolean","description":"Whether the contact is subscribed to marketing emails."},"userGroup":{"type":"string","description":"Segment or group to assign the contact."},"source":{"type":"string","description":"Source where this contact came from."},"customProperties":{"type":"object","description":"Additional custom properties as key-value pairs."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.find","description":"Find a contact by email address.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the contact to find."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.delete","description":"Delete a contact by email address.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the contact to delete."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"events.send","description":"Send an event to trigger automations or updates for a contact.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the contact."},"eventName":{"type":"string","description":"Name of the event."},"properties":{"type":"object","description":"Event properties as key-value pairs."}},"required":["email","eventName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"emails.sendTransactional","description":"Send a transactional email to a contact.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the recipient."},"transactionalId":{"type":"string","description":"ID of the transactional email template."},"dataVariables":{"type":"object","description":"Template variables as key-value pairs."}},"required":["email","transactionalId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"lucidya","displayName":"Lucidya","description":"Query Lucidya social listening data, channels, mentions, sentiment, and tickets for AI-powered CX workflows.","auth":{"kind":"api-key","hint":"Lucidya API key from the workspace integrations panel; sent as Authorization: Bearer ."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.get","description":"Fetch the authenticated Lucidya workspace metadata (plan, limits, locale).","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"channels.list","description":"List configured social channels (Twitter/X, Instagram, Facebook, TikTok, etc.) under the workspace.","parameters":{"type":"object","properties":{"type":{"type":"string"},"page":{"type":"integer"},"per_page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"channels.get","description":"Fetch a single channel by id.","parameters":{"type":"object","properties":{"channel_id":{"type":"string"}},"required":["channel_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"mentions.search","description":"Search public mentions across configured channels with optional date range, language, sentiment, and channel filters.","parameters":{"type":"object","properties":{"query":{"type":"string"},"channel_id":{"type":"string"},"language":{"type":"string"},"sentiment":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"page":{"type":"integer"},"per_page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"mentions.get","description":"Fetch a single mention by id with full author, content, and sentiment payload.","parameters":{"type":"object","properties":{"mention_id":{"type":"string"}},"required":["mention_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"mentions.assign","description":"Assign a mention to an agent for follow-up in the unified inbox.","parameters":{"type":"object","properties":{"mention_id":{"type":"string"},"agent_id":{"type":"string"}},"required":["mention_id","agent_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"mentions.tag","description":"Add one or more tags to a mention for categorisation and reporting.","parameters":{"type":"object","properties":{"mention_id":{"type":"string"},"tags":{"type":"array"}},"required":["mention_id","tags"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"mentions.reply","description":"Post a public reply to a mention on its originating channel.","parameters":{"type":"object","properties":{"mention_id":{"type":"string"},"message":{"type":"string"},"attachments":{"type":"array"}},"required":["mention_id","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.list","description":"List CX tickets created from mentions, optionally filtered by status, priority, or assignee.","parameters":{"type":"object","properties":{"status":{"type":"string"},"priority":{"type":"string"},"assignee_id":{"type":"string"},"page":{"type":"integer"},"per_page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tickets.get","description":"Fetch a single ticket with its full conversation history.","parameters":{"type":"object","properties":{"ticket_id":{"type":"string"}},"required":["ticket_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tickets.create","description":"Create a CX ticket from a mention or stand-alone subject for manual triage.","parameters":{"type":"object","properties":{"subject":{"type":"string"},"description":{"type":"string"},"mention_id":{"type":"string"},"priority":{"type":"string"},"assignee_id":{"type":"string"},"tags":{"type":"array"}},"required":["subject"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.update","description":"Update ticket status, priority, assignee, or tags.","parameters":{"type":"object","properties":{"ticket_id":{"type":"string"},"status":{"type":"string"},"priority":{"type":"string"},"assignee_id":{"type":"string"},"tags":{"type":"array"}},"required":["ticket_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"analytics.sentiment","description":"Aggregate sentiment breakdown (positive/neutral/negative) for a query and date range.","parameters":{"type":"object","properties":{"query":{"type":"string"},"channel_id":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"granularity":{"type":"string"}},"required":["from","to"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"analytics.volume","description":"Time-series mention volume for a query and date range bucketed by granularity.","parameters":{"type":"object","properties":{"query":{"type":"string"},"channel_id":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"granularity":{"type":"string"}},"required":["from","to"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"analytics.topics","description":"AI-extracted topic clusters with mention counts for a query and date range.","parameters":{"type":"object","properties":{"query":{"type":"string"},"channel_id":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"limit":{"type":"integer"}},"required":["from","to"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reports.list","description":"List saved analytics reports under the workspace.","parameters":{"type":"object","properties":{"page":{"type":"integer"},"per_page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reports.get","description":"Fetch a single saved report definition by id.","parameters":{"type":"object","properties":{"report_id":{"type":"string"}},"required":["report_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"lusha","displayName":"Lusha","description":"Search and enrich B2B contact and company data via the Lusha API.","auth":{"kind":"api-key","hint":"API key from the Lusha dashboard. Sent as the `api_key` header on every request."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"search.companies","description":"Search the Lusha company database. Pass a `requestBody` matching the Lusha prospecting search schema; pagination is appended by the caller.","parameters":{"type":"object","properties":{"requestBody":{"type":"object","description":"JSON body for the company search request (filters, etc.)."},"resultLimit":{"type":"integer","description":"Maximum number of companies to return (Lusha caps at 10000).","minimum":1,"maximum":10000}},"required":["requestBody"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"enrich.companies","description":"Enrich a set of companies previously returned by `search.companies`. Lusha treats enrich as a billed credit-consuming call, so it is modeled as a mutation.","parameters":{"type":"object","properties":{"searchResults":{"type":"object","description":"The search-results envelope returned by `search.companies`."},"resultLimit":{"type":"integer","description":"Maximum number of companies to enrich.","minimum":1,"maximum":10000}},"required":["searchResults"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"search.contacts","description":"Search the Lusha contact database. Pass a `requestBody` matching the Lusha prospecting contact search schema.","parameters":{"type":"object","properties":{"requestBody":{"type":"object","description":"JSON body for the contact search request."},"resultLimit":{"type":"integer","description":"Maximum number of contacts to return (Lusha caps at 10000).","minimum":1,"maximum":10000}},"required":["requestBody"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"enrich.contacts","description":"Enrich a set of contacts previously returned by `search.contacts`. Consumes Lusha credits.","parameters":{"type":"object","properties":{"searchResults":{"type":"object","description":"The search-results envelope returned by `search.contacts`."},"resultLimit":{"type":"integer","description":"Maximum number of contacts to enrich.","minimum":1,"maximum":10000}},"required":["searchResults"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.create","description":"Create a prospect list. Returns the new list id.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Name of the prospect list."},"description":{"type":"string","description":"Optional description."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.add","description":"Add prospects to an existing list.","parameters":{"type":"object","properties":{"listId":{"type":"string","description":"Id of the target prospect list."},"contactIds":{"type":"array","items":{"type":"string"},"description":"Lusha contact ids to add to the list."}},"required":["listId","contactIds"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.delete","description":"Delete a prospect list by id.","parameters":{"type":"object","properties":{"listId":{"type":"string"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"luxury-presence","displayName":"Luxury Presence","description":"Push real-estate buyer/seller leads into Luxury Presence and read leads back out of the agent CRM.","auth":{"kind":"api-key","hint":"Luxury Presence API key issued in the admin console (Settings → Integrations → API). Sent on every request as the X-API-Key header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"leads.create","description":"Create a new lead in the agent`s Luxury Presence CRM. Mirrors the inbound shape consumed by the LP `new.lead` webhook.","parameters":{"type":"object","properties":{"firstName":{"type":"string","description":"Lead first name."},"lastName":{"type":"string","description":"Lead last name."},"email":{"type":"string","format":"email","description":"Lead email address. At least one of email/phone is required by LP."},"phone":{"type":"string","description":"Lead phone number in E.164 form. At least one of email/phone is required by LP."},"message":{"type":"string","description":"Free-form inquiry text from the lead (the body of their first contact)."},"source":{"type":"string","description":"Origin tag recorded against the lead (e.g. \"facebook-ad\", \"open-house\"). Surfaces as `source` in the LP admin."},"tags":{"type":"array","description":"Optional list of LP lead-tag strings to apply at creation time.","items":{"type":"string"}},"propertyInterest":{"type":"object","description":"Optional structured interest hint for the agent.","properties":{"address":{"type":"string"},"listingId":{"type":"string"},"priceMin":{"type":"integer"},"priceMax":{"type":"integer"},"bedrooms":{"type":"integer"},"bathrooms":{"type":"number"}}}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update","description":"Patch an existing LP lead by id (status change, agent reassignment, tag edits).","parameters":{"type":"object","properties":{"leadId":{"type":"string","description":"LP-assigned lead identifier."},"status":{"type":"string","description":"Pipeline status string recognised by the tenant`s LP workflow."},"assignedAgentId":{"type":"string","description":"LP user-id of the agent that should own this lead."},"tags":{"type":"array","description":"Replacement set of tag strings for this lead.","items":{"type":"string"}},"notes":{"type":"string","description":"Free-form private note appended to the lead by this update."}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"leads.list","description":"List leads in the LP CRM, optionally filtered by status, source, or assigned agent.","parameters":{"type":"object","properties":{"status":{"type":"string","description":"Filter by pipeline status."},"source":{"type":"string","description":"Filter by origin tag."},"assignedAgentId":{"type":"string","description":"Filter to leads owned by a specific LP agent."},"updatedSince":{"type":"string","format":"date-time","description":"ISO-8601 lower bound on `updatedAt` for incremental sync."},"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string","description":"Opaque pagination cursor returned by a prior leads.list response."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.get","description":"Fetch a single lead by LP-assigned id.","parameters":{"type":"object","properties":{"leadId":{"type":"string"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"magical-api","displayName":"Magical API","description":"Magical API resume intelligence and LinkedIn enrichment. Parse, review, or score resumes against a job description, and fetch LinkedIn profile or company snapshots by username / website.","auth":{"kind":"api-key","hint":"Magical API key from the magicalapi.com dashboard. Sent in the api-key header on every request."},"category":"crm","defaultConsistencyModel":"advisory","capabilities":[{"name":"resume.parse","description":"Submit a resume URL for structured parsing. Returns either the parsed result or a request_id to poll with the same call when the model is still working.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Direct link to a publicly accessible resume file (PDF, DOC, or DOCX)."},"request_id":{"type":"string","description":"Optional. request_id returned by a prior parse.resume submit; pass it back to fetch the completed result without re-billing the parse."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"resume.review","description":"Run a qualitative review of a resume against an optional job description. Returns either the review result or a request_id to poll with the same call.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Direct link to a publicly accessible resume file (PDF, DOC, or DOCX)."},"job_description":{"type":"string","description":"Optional. Job description text the resume should be reviewed against; omit for an unanchored review."},"request_id":{"type":"string","description":"Optional. request_id returned by a prior resume.review submit; pass it back to fetch the completed result without re-billing the review."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"resume.score","description":"Compute a numeric fit score for a resume against a job description. Returns either the score or a request_id to poll with the same call.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Direct link to a publicly accessible resume file (PDF, DOC, or DOCX)."},"job_description":{"type":"string","description":"Job description text the resume should be scored against."},"request_id":{"type":"string","description":"Optional. request_id returned by a prior resume.score submit; pass it back to fetch the completed result without re-billing the score."}},"required":["url","job_description"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"profile.get","description":"Fetch a LinkedIn profile data snapshot by profile username (the slug from the linkedin.com/in/ URL).","parameters":{"type":"object","properties":{"profile_name":{"type":"string","description":"Username slug from the LinkedIn profile URL (e.g. the \"drewstone\" in linkedin.com/in/drewstone)."}},"required":["profile_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.get","description":"Fetch a LinkedIn company data snapshot. Resolves by company_username (LinkedIn company slug), company_name, or company_website; at least one must be supplied.","parameters":{"type":"object","properties":{"company_username":{"type":"string","description":"Company slug from the LinkedIn company URL (e.g. the \"tangle-network\" in linkedin.com/company/tangle-network)."},"company_name":{"type":"string","description":"Free-text company name to resolve."},"company_website":{"type":"string","description":"Company website URL to resolve."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"mailchain","displayName":"Mailchain","description":"Send emails and retrieve authenticated user information via Mailchain.","auth":{"kind":"api-key","hint":"Mailchain API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"user.get","description":"Get authenticated user information.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"email.send","description":"Send an email via Mailchain.","parameters":{"type":"object","properties":{"to":{"type":"string"},"subject":{"type":"string"},"body":{"type":"string"}},"required":["to","subject","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.inbox.list","description":"List messages in the inbox for a Mailchain address. Optional `page` and `limit` paginate results.","parameters":{"type":"object","properties":{"address":{"type":"string","description":"Mailchain address whose inbox to list."},"page":{"type":"number","description":"Optional 1-based page number."},"limit":{"type":"number","description":"Optional page size."}},"required":["address"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"mailchimp","displayName":"Mailchimp","description":"Manage Mailchimp audiences, contacts, and campaigns through the Marketing API v3.0.","auth":{"kind":"oauth2","authorizationUrl":"https://login.mailchimp.com/oauth2/authorize","tokenUrl":"https://login.mailchimp.com/oauth2/token","scopes":[],"clientIdEnv":"MAILCHIMP_OAUTH_CLIENT_ID","clientSecretEnv":"MAILCHIMP_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"lists.list","description":"List Mailchimp audiences (lists) the connected account can access.","parameters":{"type":"object","properties":{"count":{"type":"number","description":"Page size; defaults to 10, max 1000."},"offset":{"type":"number","description":"Number of records to skip."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.get","description":"Read a single Mailchimp audience by list id.","parameters":{"type":"object","properties":{"listId":{"type":"string"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"segments.list","description":"List the segments of a Mailchimp audience. Use a segment id in `campaigns.create` recipients to target a slice — and to carve out a control/holdout slice for measuring true lift.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"count":{"type":"number"},"offset":{"type":"number"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"members.search","description":"List members of a Mailchimp audience.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"count":{"type":"number"},"offset":{"type":"number"},"status":{"type":"string","description":"Filter by subscriber status (subscribed, unsubscribed, cleaned, pending, transactional)."}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"members.get","description":"Read a Mailchimp audience member by subscriber hash (MD5 of the lowercased email).","parameters":{"type":"object","properties":{"listId":{"type":"string"},"subscriberHash":{"type":"string"}},"required":["listId","subscriberHash"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"members.upsert","description":"Idempotent upsert of a Mailchimp audience member; PUT against the subscriber hash creates or updates.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"subscriberHash":{"type":"string","description":"MD5 hex digest of the lowercased email address."},"fields":{"type":"object","description":"Mailchimp member body; typically includes email_address, status_if_new, merge_fields, tags."}},"required":["listId","subscriberHash","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"members.update-tags","description":"Add or remove tags on a Mailchimp audience member.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"subscriberHash":{"type":"string"},"fields":{"type":"object","description":"Body shaped as `{ tags: [{ name, status: \"active\"|\"inactive\" }] }`."}},"required":["listId","subscriberHash","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.list","description":"List Mailchimp campaigns.","parameters":{"type":"object","properties":{"count":{"type":"number"},"offset":{"type":"number"},"status":{"type":"string","description":"save, paused, schedule, sending, sent."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.send","description":"Send a Mailchimp campaign immediately (campaign must already be configured).","parameters":{"type":"object","properties":{"campaignId":{"type":"string"}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"members.delete-permanent","description":"Permanently delete a Mailchimp audience member (irreversible — the member cannot be re-imported under the same email).","parameters":{"type":"object","properties":{"listId":{"type":"string"},"subscriberHash":{"type":"string","description":"MD5 hex digest of the lowercased email address."}},"required":["listId","subscriberHash"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.create","description":"Create a Mailchimp campaign. Body matches the Marketing API v3.0 campaign create schema.","parameters":{"type":"object","properties":{"fields":{"type":"object","description":"Campaign body; typically `{ type: \"regular\", recipients: { list_id }, settings: { subject_line, from_name, reply_to } }`."}},"required":["fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.set-content","description":"Set the content of a draft Mailchimp campaign. `campaigns.create` only makes an empty shell — this puts the generated email body in. Body matches the v3.0 campaign-content schema, e.g. `{ html }` or `{ plain_text }` or `{ template: { id, sections } }`.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"},"fields":{"type":"object","description":"Campaign content body; typically `{ html }`. PUT replaces the content wholesale."}},"required":["campaignId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"reports.list","description":"List campaign performance reports. Each entry carries the open/click/unsubscribe/abuse rates and (when an ecommerce store is connected) revenue — the feedback signal the optimizer reads to learn what worked.","parameters":{"type":"object","properties":{"count":{"type":"number"},"offset":{"type":"number"},"type":{"type":"string","description":"Filter by campaign type, e.g. regular, plaintext, rss."},"since_send_time":{"type":"string","description":"ISO 8601 lower bound on send time, e.g. 2026-06-01T00:00:00Z — read only recent sends."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reports.get","description":"Read the performance report for one sent campaign: opens, clicks, unsubscribes, abuse_reports (the complaint signal), bounces, list_stats, and ecommerce { total_orders, total_spent, total_revenue }. This is the reward+guardrail signal for the optimization loop.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"mailer-lite","displayName":"MailerLite","description":"Manage MailerLite subscribers and groups in the email marketing platform.","auth":{"kind":"api-key","hint":"MailerLite API token (Integrations → API). Sent as Authorization: Bearer."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"subscribers.upsert","description":"Create or update a subscriber by email. Mirrors the activepieces createOrUpdateSubscriber action.","parameters":{"type":"object","properties":{"email":{"type":"string"},"fields":{"type":"object","description":"Custom subscriber field values keyed by MailerLite field name (e.g. name, last_name, company)."},"groups":{"type":"array","items":{"type":"string"},"description":"Group IDs the subscriber should belong to after upsert."},"status":{"type":"string","enum":["active","unsubscribed","unconfirmed","bounced","junk"],"description":"Defaults to active when omitted."},"subscribed_at":{"type":"string","description":"ISO-8601 timestamp recording when consent was captured."},"opted_in_at":{"type":"string","description":"ISO-8601 timestamp recording when double opt-in confirmation occurred."},"ip_address":{"type":"string","description":"IP address recorded at signup."},"optin_ip":{"type":"string","description":"IP address recorded at opt-in confirmation."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.groups.add","description":"Add an existing subscriber to a group. Mirrors the activepieces addSubscriberToGroupAction.","parameters":{"type":"object","properties":{"subscriberId":{"type":"string","description":"MailerLite subscriber ID or email."},"groupId":{"type":"string"}},"required":["subscriberId","groupId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.groups.remove","description":"Remove a subscriber from a group. Mirrors the activepieces removeSubscriberFromGroupAction (destructive).","parameters":{"type":"object","properties":{"subscriberId":{"type":"string","description":"MailerLite subscriber ID or email."},"groupId":{"type":"string"}},"required":["subscriberId","groupId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.find","description":"Look up a subscriber by ID or email. Mirrors the activepieces findSubscriberAction.","parameters":{"type":"object","properties":{"searchValue":{"type":"string","description":"Subscriber ID or email address to resolve."}},"required":["searchValue"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.delete","description":"Delete a subscriber from the account (DELETE /subscribers/{subscriberId}). Removes the record entirely — distinct from setting status=unsubscribed.","parameters":{"type":"object","properties":{"subscriberId":{"type":"string","description":"MailerLite subscriber ID or email."}},"required":["subscriberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.create","description":"Create a regular email campaign (POST /campaigns). Returns the draft campaign ID needed by campaigns.schedule.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Campaign name (internal label)."},"type":{"type":"string","enum":["regular","ab","resend"],"description":"Campaign type; defaults to regular."},"emails":{"type":"array","description":"Per-variant email definitions (subject, from, from_name, content). Regular campaigns expect a single entry.","items":{"type":"object"}},"groups":{"type":"array","items":{"type":"string"},"description":"Group IDs the campaign should target."},"segments":{"type":"array","items":{"type":"string"},"description":"Segment IDs the campaign should target."},"language_id":{"type":"string","description":"Optional MailerLite language ID."}},"required":["name","emails"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.schedule","description":"Schedule (or immediately send) a previously-created draft campaign (POST /campaigns/{campaignId}/schedule). Pass delivery=instant for immediate send or delivery=scheduled with a schedule.date payload.","parameters":{"type":"object","properties":{"campaignId":{"type":"string","description":"Draft campaign ID returned by campaigns.create."},"delivery":{"type":"string","enum":["instant","scheduled","timezone_based"],"description":"Delivery strategy; instant sends immediately, scheduled honors schedule.date."},"schedule":{"type":"object","description":"Schedule payload required when delivery=scheduled or timezone_based. Shape `{ date: ISO8601, timezone_id?: string }`.","properties":{"date":{"type":"string","description":"ISO-8601 send time."},"timezone_id":{"type":"string"}}}},"required":["campaignId","delivery"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"mailercheck","displayName":"Mailercheck","description":"MailerCheck is an easy-to-use email and campaign analysis tool. Anyone using an email service provider can keep their email lists clean and their campaigns deliverable.","auth":{"kind":"api-key","hint":"MailerCheck personal access token from Account → API. Sent as a bearer token."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"verify.an.email.address","description":"Verify the deliverability of an email address. Returns a status (valid, invalid, accept_all, disposable, role, unknown) and detailed checks.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"The email address to verify.","format":"email"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false}]},{"kind":"maileroo","displayName":"Maileroo","description":"Send transactional email through Maileroo (raw send, template send) and verify recipient addresses via the verification API. One connection carries either a domain-scoped Sending Key or an account-scoped Verification Key.","auth":{"kind":"api-key","hint":"Maileroo Sending Key (Domains → your domain → API → Create Sending Key) for /send and /send-template, OR Verification Key (Verifications page) for /check. Sent as the `X-API-Key` header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"email.send","description":"Send a transactional email (POST /send). Provide either `html` or `plain` (or both) — Maileroo rejects payloads with no body. The sender domain must already be verified for the Sending Key in use.","parameters":{"type":"object","properties":{"from":{"type":"string","description":"Verified sender address. Must belong to a domain authorized by the Sending Key."},"from_name":{"type":"string","description":"Optional display name attached to the sender."},"to":{"type":"array","items":{"type":"string","description":"RFC-5322 mailbox. Either bare `user@example.com` or `\"Name\" `."},"description":"Primary recipient list. At least one entry required."},"cc":{"type":"array","items":{"type":"string","description":"RFC-5322 mailbox. Either bare `user@example.com` or `\"Name\" `."}},"bcc":{"type":"array","items":{"type":"string","description":"RFC-5322 mailbox. Either bare `user@example.com` or `\"Name\" `."}},"reply_to":{"type":"string","description":"RFC-5322 mailbox. Either bare `user@example.com` or `\"Name\" `."},"subject":{"type":"string"},"tags":{"type":"array","items":{"type":"string"},"description":"Tags surfaced in Maileroo analytics and webhook payloads."},"tracking":{"type":"object","description":"Opt-in tracking flags. Omitted fields fall back to the account default.","properties":{"opens":{"type":"boolean"},"clicks":{"type":"boolean"},"unsubscribe":{"type":"boolean"}}},"headers":{"type":"object","description":"Custom RFC-5322 headers (`{ \"X-Campaign\": \"welcome\" }`).","additionalProperties":{"type":"string"}},"attachments":{"type":"array","items":{"type":"object","properties":{"file_name":{"type":"string","description":"Filename shown to the recipient."},"content_type":{"type":"string","description":"MIME type (e.g. application/pdf)."},"content":{"type":"string","description":"Base64-encoded file content."},"inline":{"type":"boolean","description":"If true the attachment renders inline (used with HTML img src=\"cid:...\")."}},"required":["file_name","content_type","content"]}},"html":{"type":"string","description":"HTML body. At least one of html / plain is required."},"plain":{"type":"string","description":"Plain-text body. At least one of html / plain is required."}},"required":["from","to","subject"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"email.send.template","description":"Send an email rendered from a stored Maileroo template (POST /send-template). `template_id` selects the template; `template_data` fills its `{{variable}}` placeholders. Sender, recipients, subject, and tracking flags behave the same as `email.send`.","parameters":{"type":"object","properties":{"from":{"type":"string","description":"Verified sender address. Must belong to a domain authorized by the Sending Key."},"from_name":{"type":"string","description":"Optional display name attached to the sender."},"to":{"type":"array","items":{"type":"string","description":"RFC-5322 mailbox. Either bare `user@example.com` or `\"Name\" `."},"description":"Primary recipient list. At least one entry required."},"cc":{"type":"array","items":{"type":"string","description":"RFC-5322 mailbox. Either bare `user@example.com` or `\"Name\" `."}},"bcc":{"type":"array","items":{"type":"string","description":"RFC-5322 mailbox. Either bare `user@example.com` or `\"Name\" `."}},"reply_to":{"type":"string","description":"RFC-5322 mailbox. Either bare `user@example.com` or `\"Name\" `."},"subject":{"type":"string"},"tags":{"type":"array","items":{"type":"string"},"description":"Tags surfaced in Maileroo analytics and webhook payloads."},"tracking":{"type":"object","description":"Opt-in tracking flags. Omitted fields fall back to the account default.","properties":{"opens":{"type":"boolean"},"clicks":{"type":"boolean"},"unsubscribe":{"type":"boolean"}}},"headers":{"type":"object","description":"Custom RFC-5322 headers (`{ \"X-Campaign\": \"welcome\" }`).","additionalProperties":{"type":"string"}},"attachments":{"type":"array","items":{"type":"object","properties":{"file_name":{"type":"string","description":"Filename shown to the recipient."},"content_type":{"type":"string","description":"MIME type (e.g. application/pdf)."},"content":{"type":"string","description":"Base64-encoded file content."},"inline":{"type":"boolean","description":"If true the attachment renders inline (used with HTML img src=\"cid:...\")."}},"required":["file_name","content_type","content"]}},"template_id":{"type":"integer","description":"Numeric template identifier (Templates page)."},"template_data":{"type":"object","description":"Key/value map applied to the template. Values are JSON-serialized before substitution.","additionalProperties":true}},"required":["from","to","subject","template_id","template_data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"email.verify","description":"Verify a single email address (POST https://verify.maileroo.net/check). Returns deliverability, role-account, disposable, free-provider, and MX-record signals. Requires the Verification API key — the Sending Key is rejected here.","parameters":{"type":"object","properties":{"email_address":{"type":"string","description":"Mailbox to verify, e.g. `user@example.com`."}},"required":["email_address"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"mailgun","displayName":"Mailgun","description":"Send transactional email through Mailgun and read delivery events, domain stats, and bounce suppressions.","auth":{"kind":"api-key","hint":"Mailgun private API key. Encode `api:` as base64 and store that as the credential token — Mailgun authenticates via HTTP Basic."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"messages.send","description":"Send an email via /{domain}/messages. Provide `from`, recipients, subject, and at least one of `text` or `html`.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Mailgun sending domain, e.g. mg.example.com"},"from":{"type":"string"},"to":{"type":"string","description":"Comma-separated recipient addresses."},"cc":{"type":"string"},"bcc":{"type":"string"},"h:Reply-To":{"type":"string"},"subject":{"type":"string"},"text":{"type":"string"},"html":{"type":"string"}},"required":["domain","from","to","subject"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"email.validate","description":"Validate an email address through Mailgun /v4/address/validate. Marked mutation because Mailgun bills per call.","parameters":{"type":"object","properties":{"address":{"type":"string","description":"Email address to validate."},"provider_lookup":{"type":"boolean"}},"required":["address"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"mailing_list.member.add","description":"Add (or upsert) a member on a mailing list. Catalog `upsert=true` maps to the Mailgun `upsert=yes` flag.","parameters":{"type":"object","properties":{"list":{"type":"string","description":"Mailing list address, e.g. devs@mg.example.com."},"address":{"type":"string"},"name":{"type":"string"},"vars":{"type":"string","description":"JSON-encoded custom variables."},"subscribed":{"type":"boolean"},"upsert":{"type":"boolean"}},"required":["list","address"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.list","description":"Page Mailgun events for a domain. Filter by event type, severity, and time window.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"event":{"type":"string","description":"Event filter: delivered, failed, opened, clicked, unsubscribed, complained, accepted."},"severity":{"type":"string","description":"permanent or temporary — only meaningful for failed events."},"begin":{"type":"string","description":"RFC 2822 date."},"end":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":300}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"domain.stats","description":"Aggregate delivery statistics for a domain over a time window.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"event":{"type":"string","description":"Comma-separated event types: accepted,delivered,failed,opened,clicked,unsubscribed,complained."},"duration":{"type":"string","description":"Aggregation window, e.g. 1h, 24h, 7d, 30d."},"start":{"type":"string"},"end":{"type":"string"},"resolution":{"type":"string","description":"hour, day, or month."}},"required":["domain","event"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bounces.list","description":"List bounce suppression records for a domain.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":10000}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"make","displayName":"Make","description":"Run Make (Integromat) scenarios, inspect executions, and POST payloads to scenario webhooks.","auth":{"kind":"api-key","hint":"Make API token from Profile > API. Sent as `Authorization: Token `. Connection also requires the zone host (https://eu1.make.com, https://us1.make.com, etc.) and the teamId."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"scenarios.list","description":"List scenarios in a Make team. teamId is required by the API.","parameters":{"type":"object","properties":{"teamId":{"type":"string"},"organizationId":{"type":"string"},"pg":{"type":"object","description":"Pagination object; use {\"sortBy\":\"name\",\"limit\":50,\"offset\":0}."}},"required":["teamId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scenarios.get","description":"Read a single Make scenario by id.","parameters":{"type":"object","properties":{"scenarioId":{"type":"string"}},"required":["scenarioId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scenarios.run","description":"Manually run a Make scenario. `data` is optional input that flows into the scenario as the trigger bundle.","parameters":{"type":"object","properties":{"scenarioId":{"type":"string"},"data":{"type":"object","description":"Optional trigger bundle."},"responsive":{"type":"boolean","description":"When true, the request waits for the scenario to finish and returns the result inline. When false (default), the call returns an execution id and the agent polls executions.get."}},"required":["scenarioId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"scenarios.activate","description":"Activate a Make scenario so its trigger schedule fires.","parameters":{"type":"object","properties":{"scenarioId":{"type":"string"}},"required":["scenarioId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"scenarios.deactivate","description":"Deactivate a Make scenario.","parameters":{"type":"object","properties":{"scenarioId":{"type":"string"}},"required":["scenarioId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"executions.list","description":"List executions for a scenario.","parameters":{"type":"object","properties":{"scenarioId":{"type":"string"},"pg":{"type":"object","description":"Pagination object."}},"required":["scenarioId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"executions.get","description":"Read a single execution by id, including status and node outputs.","parameters":{"type":"object","properties":{"scenarioId":{"type":"string"},"executionId":{"type":"string"}},"required":["scenarioId","executionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"hooks.trigger","description":"POST a payload to a Make scenario \"Custom Webhook\" trigger URL. `hookId` is the unique hook segment from the webhook URL (the host is set by the connection).","parameters":{"type":"object","properties":{"hookId":{"type":"string"},"payload":{"type":"object"}},"required":["hookId","payload"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"manychat","displayName":"Manychat","description":"Automations for Instagram, WhatsApp, TikTok, and Messenger marketing.","auth":{"kind":"api-key","hint":"Manychat API key (Settings → API)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"subscribers.find.by.custom.field","description":"Find a subscriber by the value of a custom field.","parameters":{"type":"object","properties":{"field_id":{"type":"string"},"field_value":{"type":"string"}},"required":["field_id","field_value"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.find.by.name","description":"Find a subscriber by name.","parameters":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.create","description":"Create a Manychat subscriber.","parameters":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"phone":{"type":"string"},"whatsapp_phone":{"type":"string"},"email":{"type":"string"},"gender":{"type":"string"},"has_opt_in_sms":{"type":"boolean"},"has_opt_in_email":{"type":"boolean"},"consent_phrase":{"type":"string"}},"required":["first_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.send.content","description":"Send content (text or media) to a subscriber across a Manychat-supported platform.","parameters":{"type":"object","properties":{"subscriber_id":{"type":"string"},"platform":{"type":"string"},"content_type":{"type":"string"},"text_content":{"type":"string"},"media_url":{"type":"string"},"message_tag":{"type":"string"}},"required":["subscriber_id","content_type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.custom_field.set","description":"Set the value of a subscriber's custom field.","parameters":{"type":"object","properties":{"subscriber_id":{"type":"string"},"field_id":{"type":"string"},"field_value":{}},"required":["subscriber_id","field_id","field_value"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"subscribers.tag.add","description":"Add a tag to a subscriber.","parameters":{"type":"object","properties":{"subscriber_id":{"type":"string"},"tag_name":{"type":"string"}},"required":["subscriber_id","tag_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.tag.remove","description":"Remove a tag from a subscriber.","parameters":{"type":"object","properties":{"subscriber_id":{"type":"string"},"tag_name":{"type":"string"}},"required":["subscriber_id","tag_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"marketo","displayName":"Marketo","description":"Manage Marketo leads, static lists, and smart campaigns through the REST API v1.","auth":{"kind":"oauth2","grantType":"client_credentials","tokenUrl":"{restEndpoint}/identity/oauth/token","scopes":[],"clientIdEnv":"MARKETO_OAUTH_CLIENT_ID","clientSecretEnv":"MARKETO_OAUTH_CLIENT_SECRET","tokenClientAuthMethod":"client_secret_post","pkce":"unsupported","urlTemplateMetadata":{"restEndpoint":{"kind":"base-url","allowedBaseUrlSuffixes":[".mktorest.com"]}}},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"leads.search","description":"Look up leads by a filter field (e.g. email, id, leadId). Marketo returns up to 300 records per page.","parameters":{"type":"object","properties":{"filterType":{"type":"string","description":"Field name to filter by, e.g. \"email\", \"id\", \"cookie\", or any custom lead field marked searchable."},"filterValues":{"type":"string","description":"Comma-separated list of values to match against filterType (max 300 values)."},"fields":{"type":"string","description":"Comma-separated list of Marketo lead fields to return; omit for the default set."},"batchSize":{"type":"number","description":"Page size, 1-300; defaults to 300."},"nextPageToken":{"type":"string","description":"Paging token from a previous response."}},"required":["filterType","filterValues"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.get","description":"Read a single lead by Marketo lead id.","parameters":{"type":"object","properties":{"leadId":{"type":"string","description":"Marketo internal lead id (integer-as-string)."},"fields":{"type":"string","description":"Comma-separated Marketo lead fields to return."}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.describe","description":"Describe the lead schema — returns the full set of fields available on the lead object including custom fields.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.upsert","description":"Create or update one or more leads. Idempotent on the lookupField (default \"email\"); body shape `{ action, lookupField, input }`.","parameters":{"type":"object","properties":{"action":{"type":"string","description":"Operation: createOnly, updateOnly, createOrUpdate (default), createDuplicate."},"lookupField":{"type":"string","description":"Field Marketo uses to match existing leads (default \"email\")."},"input":{"type":"array","description":"Array of lead records keyed by Marketo field names.","items":{"type":"object"}},"partitionName":{"type":"string","description":"Optional lead partition name when the workspace has multiple partitions."}},"required":["input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.search","description":"List static lists. Filter by id, name, programName, or workspaceName.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Comma-separated list ids to filter."},"name":{"type":"string","description":"Comma-separated list names to filter."},"batchSize":{"type":"number"},"nextPageToken":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.get","description":"Read a single Marketo static list by id.","parameters":{"type":"object","properties":{"listId":{"type":"string"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.add-leads","description":"Add one or more leads to a static list. Body shape `{ input: [{ id }] }`.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"input":{"type":"array","description":"Array of `{ id }` objects referencing Marketo lead ids.","items":{"type":"object","properties":{"id":{"type":"number"}},"required":["id"]}}},"required":["listId","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.remove-leads","description":"Remove one or more leads from a static list. Body shape `{ input: [{ id }] }`.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"input":{"type":"array","description":"Array of `{ id }` objects referencing Marketo lead ids.","items":{"type":"object","properties":{"id":{"type":"number"}},"required":["id"]}}},"required":["listId","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.search","description":"List smart campaigns. Filter by id, name, programName, or workspaceName.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Comma-separated campaign ids."},"name":{"type":"string","description":"Comma-separated campaign names."},"programName":{"type":"string"},"workspaceName":{"type":"string"},"batchSize":{"type":"number"},"nextPageToken":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.trigger","description":"Request execution of a trigger campaign for one or more leads. Body shape `{ input: { leads: [{ id }], tokens?: [{ name, value }] } }`.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"},"input":{"type":"object","description":"Marketo trigger payload: `{ leads: [{ id }], tokens?: [{ name, value }] }`.","properties":{"leads":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"}},"required":["id"]}},"tokens":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}},"required":["name","value"]}}},"required":["leads"]}},"required":["campaignId","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"activities.search","description":"Fetch lead activities since a paging token. Caller obtains the initial token from /rest/v1/activities/pagingtoken.json.","parameters":{"type":"object","properties":{"nextPageToken":{"type":"string","description":"Marketo paging token bounding the activity window."},"activityTypeIds":{"type":"string","description":"Comma-separated activity type ids; up to 10 per call."},"leadIds":{"type":"string","description":"Comma-separated lead ids; up to 30 per call."},"assetIds":{"type":"string"},"listId":{"type":"string"},"batchSize":{"type":"number"}},"required":["nextPageToken","activityTypeIds"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"mastodon","displayName":"Mastodon","description":"Post statuses to a Mastodon instance and read public / account / home timelines. Works against any Mastodon-compatible host (mastodon.social, fosstodon.org, self-hosted) — the instance base URL is per-connection metadata.","auth":{"kind":"api-key","hint":"Mastodon access token issued by the target instance (Preferences → Development → New Application). The instance base URL is captured separately on the connection as the `baseUrl` metadata field."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"post.status","description":"Publish a status (toot) on behalf of the authenticated account. Maps to the activepieces `postStatus` action and the public `POST /api/v1/statuses` endpoint. `media_ids` must already be uploaded via `/api/v2/media`; `visibility` controls public / unlisted / private / direct delivery.","parameters":{"type":"object","properties":{"status":{"type":"string"},"media_ids":{"type":"array","items":{"type":"string"}},"in_reply_to_id":{"type":"string"},"sensitive":{"type":"boolean"},"spoiler_text":{"type":"string"},"visibility":{"type":"string","enum":["public","unlisted","private","direct"]},"language":{"type":"string"},"scheduled_at":{"type":"string"}},"required":["status"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"account.verify","description":"Fetch the authenticated account (`GET /api/v1/accounts/verify_credentials`). Doubles as a credential-health probe and source-of-truth for the connection owner.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"status.get","description":"Read a single status by id (`GET /api/v1/statuses/{id}`). Used to resolve a permalink, fetch counts after posting, or verify a mutation landed.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"timeline.home","description":"Read the authenticated user's home timeline (`GET /api/v1/timelines/home`). Drives \"new status in home timeline\" style triggers via cursor (`max_id` / `since_id`) diffing.","parameters":{"type":"object","properties":{"max_id":{"type":"string"},"since_id":{"type":"string"},"min_id":{"type":"string"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"timeline.public","description":"Read the public (federated) or local timeline (`GET /api/v1/timelines/public`). Set `local=true` for instance-local posts; `only_media=true` to filter to media-bearing statuses.","parameters":{"type":"object","properties":{"local":{"type":"boolean"},"remote":{"type":"boolean"},"only_media":{"type":"boolean"},"max_id":{"type":"string"},"since_id":{"type":"string"},"min_id":{"type":"string"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"account.statuses","description":"List statuses authored by an account (`GET /api/v1/accounts/{id}/statuses`). Backs \"new post by account\" polling and lets flows resolve recent context for a specific user.","parameters":{"type":"object","properties":{"id":{"type":"string"},"exclude_replies":{"type":"boolean"},"exclude_reblogs":{"type":"boolean"},"only_media":{"type":"boolean"},"pinned":{"type":"boolean"},"tagged":{"type":"string"},"max_id":{"type":"string"},"since_id":{"type":"string"},"min_id":{"type":"string"},"limit":{"type":"integer"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"matomo","displayName":"Matomo","description":"Open-source web analytics — add annotations against tracked sites in a self-hosted Matomo install.","auth":{"kind":"api-key","hint":"Matomo \"Token Auth\" from your account profile. The connection must also store the Matomo `domain` (e.g. https://matomo.example.com) and `siteId`."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"annotations.add","description":"Add an annotation to a tracked Matomo site on a given date, optionally marking it starred. Mirrors the catalog `add.annotation` action.","parameters":{"type":"object","properties":{"idSite":{"type":"string","description":"The Matomo site id the annotation will be attached to."},"note":{"type":"string","description":"Annotation text."},"date":{"type":"string","description":"Date for the annotation in YYYY-MM-DD format."},"starred":{"type":"integer","enum":[0,1],"description":"1 to star the annotation, 0 otherwise."}},"required":["idSite","note","date"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"matrix","displayName":"Matrix","description":"Send messages and read room state on a Matrix homeserver.","auth":{"kind":"api-key","hint":"Matrix access token (Element: Settings -> Help & About -> Advanced)."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.whoami","description":"Return the Matrix user id the access token belongs to.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rooms.resolveAlias","description":"Resolve a Matrix room alias (e.g. #room:server.tld) to its canonical room id.","parameters":{"type":"object","properties":{"roomAlias":{"type":"string","description":"Room alias including the leading #."}},"required":["roomAlias"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rooms.joined","description":"List the room ids the authenticated user is currently joined to.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rooms.members","description":"List the members of a Matrix room.","parameters":{"type":"object","properties":{"roomId":{"type":"string"}},"required":["roomId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rooms.state","description":"Read the full state of a Matrix room.","parameters":{"type":"object","properties":{"roomId":{"type":"string"}},"required":["roomId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"send.message","description":"Send a message event into a Matrix room. txnId MUST be a client-generated transaction id; reusing the same txnId for the same room is a no-op on the homeserver.","parameters":{"type":"object","properties":{"roomId":{"type":"string","description":"Matrix room id (already resolved from any alias)."},"txnId":{"type":"string","description":"Client-side dedupe key; pass the idempotency token."},"body":{"type":"string","description":"Message body (plain text)."},"msgtype":{"type":"string","description":"Matrix msgtype, defaults to m.text."},"format":{"type":"string","description":"Optional org.matrix.custom.html when sending formatted_body."},"formatted_body":{"type":"string","description":"Optional HTML body when format=org.matrix.custom.html."}},"required":["roomId","txnId","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rooms.join","description":"Join a room by id or alias.","parameters":{"type":"object","properties":{"roomIdOrAlias":{"type":"string"}},"required":["roomIdOrAlias"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rooms.leave","description":"Leave a Matrix room.","parameters":{"type":"object","properties":{"roomId":{"type":"string"}},"required":["roomId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"mattermost","displayName":"Mattermost","description":"Post messages to Mattermost channels via a bot token on a self-hosted or cloud workspace.","auth":{"kind":"api-key","hint":"Mattermost bot personal access token; sent as `Authorization: Bearer `. The workspace URL is held alongside the token in connection metadata."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"send.message","description":"Send a message (post) to a Mattermost channel.","parameters":{"type":"object","properties":{"channel_id":{"type":"string","description":"The channel to send the message to. Found in the channel info dialog near the start-call button."},"message":{"type":"string","description":"The text of the message to send."},"root_id":{"type":"string","description":"Optional post id to reply to as a thread."},"props":{"type":"object","description":"Optional post properties (e.g. attachments, override_username)."}},"required":["channel_id","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update_post","description":"Edit an existing post (replace its message text). Mattermost rewrites the post in place and marks it `edit_at`.","parameters":{"type":"object","properties":{"post_id":{"type":"string","description":"The id of the post to update."},"message":{"type":"string","description":"The new text of the post."}},"required":["post_id","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"delete_post","description":"Soft-delete a post by id. Mattermost marks the post as deleted; the row remains for audit.","parameters":{"type":"object","properties":{"post_id":{"type":"string","description":"The id of the post to delete."}},"required":["post_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"add_reaction","description":"Add an emoji reaction to a post on behalf of `user_id`. Mattermost dedupes the (user, post, emoji) triple server-side.","parameters":{"type":"object","properties":{"user_id":{"type":"string","description":"The id of the user adding the reaction (typically the bot user id)."},"post_id":{"type":"string","description":"The id of the post being reacted to."},"emoji_name":{"type":"string","description":"Emoji name without colons, e.g. \"thumbsup\"."}},"required":["user_id","post_id","emoji_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"mautic","displayName":"Mautic","description":"Manage Mautic contacts, companies, and segments in the open-source marketing automation platform.","auth":{"kind":"api-key","hint":"Mautic Basic Auth credentials (username + password) with API access enabled. Connection metadata must include the install baseUrl (e.g. https://mautic.example.com)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.search","description":"Search Mautic contacts. Supports the Mautic `search` query syntax (e.g. \"email:user@example.com\").","parameters":{"type":"object","properties":{"search":{"type":"string"},"start":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":200},"orderBy":{"type":"string"},"orderByDir":{"type":"string","enum":["asc","desc"]},"published":{"type":"boolean"},"minimal":{"type":"boolean"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.get","description":"Read a single Mautic contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"integer"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create a Mautic contact. Standard fields (email, firstname, lastname) and any custom field aliases may be supplied at the top level.","parameters":{"type":"object","properties":{"contact":{"type":"object","properties":{"email":{"type":"string","format":"email"},"firstname":{"type":"string"},"lastname":{"type":"string"},"company":{"type":"string"},"position":{"type":"string"},"phone":{"type":"string"},"mobile":{"type":"string"},"address1":{"type":"string"},"address2":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zipcode":{"type":"string"},"country":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"ipAddress":{"type":"string"},"owner":{"type":"integer"}}}},"required":["contact"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update (PATCH) a Mautic contact by id. Only the supplied fields are modified; omit a field to leave it untouched.","parameters":{"type":"object","properties":{"contactId":{"type":"integer"},"contact":{"type":"object","properties":{"email":{"type":"string","format":"email"},"firstname":{"type":"string"},"lastname":{"type":"string"},"company":{"type":"string"},"position":{"type":"string"},"phone":{"type":"string"},"mobile":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"owner":{"type":"integer"}}}},"required":["contactId","contact"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.delete","description":"Delete a Mautic contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"integer"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.segments.add","description":"Add a contact to a segment (list).","parameters":{"type":"object","properties":{"contactId":{"type":"integer"},"segmentId":{"type":"integer"}},"required":["contactId","segmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.segments.remove","description":"Remove a contact from a segment (list).","parameters":{"type":"object","properties":{"contactId":{"type":"integer"},"segmentId":{"type":"integer"}},"required":["contactId","segmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"segments.search","description":"List or search Mautic segments (contact lists).","parameters":{"type":"object","properties":{"search":{"type":"string"},"start":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":200},"orderBy":{"type":"string"},"orderByDir":{"type":"string","enum":["asc","desc"]},"published":{"type":"boolean"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"segments.get","description":"Read a single Mautic segment by id.","parameters":{"type":"object","properties":{"segmentId":{"type":"integer"}},"required":["segmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.search","description":"List or search Mautic companies.","parameters":{"type":"object","properties":{"search":{"type":"string"},"start":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":200},"orderBy":{"type":"string"},"orderByDir":{"type":"string","enum":["asc","desc"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.get","description":"Read a single Mautic company by id.","parameters":{"type":"object","properties":{"companyId":{"type":"integer"}},"required":["companyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.create","description":"Create a Mautic company record.","parameters":{"type":"object","properties":{"company":{"type":"object","properties":{"companyname":{"type":"string"},"companyemail":{"type":"string","format":"email"},"companyaddress1":{"type":"string"},"companyaddress2":{"type":"string"},"companycity":{"type":"string"},"companystate":{"type":"string"},"companyzipcode":{"type":"string"},"companycountry":{"type":"string"},"companyphone":{"type":"string"},"companywebsite":{"type":"string"},"companyindustry":{"type":"string"},"companyfax":{"type":"string"},"companyannual_revenue":{"type":"number"},"companynumber_of_employees":{"type":"integer"},"companydescription":{"type":"string"}},"required":["companyname"]}},"required":["company"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"companies.update","description":"Update a Mautic company by id.","parameters":{"type":"object","properties":{"companyId":{"type":"integer"},"company":{"type":"object","properties":{"companyname":{"type":"string"},"companyemail":{"type":"string","format":"email"},"companyphone":{"type":"string"},"companywebsite":{"type":"string"},"companyindustry":{"type":"string"},"companydescription":{"type":"string"}}}},"required":["companyId","company"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"medullar","displayName":"Medullar","description":"AI-powered discovery & insight platform that acts as your extended digital mind.","auth":{"kind":"api-key","hint":"Medullar API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"spaces.list","description":"List all spaces.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"spaces.create","description":"Create a new space.","parameters":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"spaces.rename","description":"Rename an existing space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"}},"required":["spaceId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"spaces.delete","description":"Delete a space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"}},"required":["spaceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.add","description":"Add a record to a space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"content":{"type":"string"},"url":{"type":"string"}},"required":["spaceId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"ask.space","description":"Ask a question to a space with AI analysis.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"message":{"type":"string"},"reasoning":{"type":"boolean"}},"required":["spaceId","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"meetgeek-ai","displayName":"MeetGeek","description":"AI meeting assistant: list and inspect recorded meetings, pull transcripts, highlights, and summary insights, and upload new recordings for transcription.","auth":{"kind":"api-key","hint":"MeetGeek API key — sent as `Authorization: Bearer ` against https://api.meetgeek.ai/v1."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"meetings.list","description":"List past meetings belonging to a MeetGeek team.","parameters":{"type":"object","properties":{"teamId":{"type":"string","description":"MeetGeek team id."}},"required":["teamId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"meetings.get","description":"Return metadata for a single meeting by id (participants, host, duration, summary).","parameters":{"type":"object","properties":{"meetingId":{"type":"string","description":"The MeetGeek meeting id."}},"required":["meetingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"meetings.transcript","description":"Return the time-coded transcript for a meeting. The response is an array of utterances with speaker, start/end offsets, and text.","parameters":{"type":"object","properties":{"meetingId":{"type":"string","description":"The MeetGeek meeting id."}},"required":["meetingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"meetings.highlights","description":"Return the AI-generated highlights (key moments, action items, decisions) for a single meeting.","parameters":{"type":"object","properties":{"meetingId":{"type":"string","description":"The MeetGeek meeting id."}},"required":["meetingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"meetings.summaryInsights","description":"Return the summary and AI-generated insights for one MeetGeek meeting.","parameters":{"type":"object","properties":{"meetingId":{"type":"string","description":"The MeetGeek meeting id."}},"required":["meetingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"recordings.upload","description":"Submit a recording for asynchronous transcription. MeetGeek fetches `downloadUrl` directly, so the URL must be publicly reachable (e.g. an S3 signed link). The response carries the queued meeting id you can poll via `meetings.get`.","parameters":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Publicly reachable URL MeetGeek will GET to fetch the audio/video file. Required."},"languageCode":{"type":"string","description":"BCP-47 language code (e.g. en-US, es-ES, fr-FR)."},"templateName":{"type":"string","description":"Optional MeetGeek meeting template name used to drive analysis."}},"required":["downloadUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"mem","displayName":"Mem","description":"Capture and organize notes in Mem.ai — append raw content as mems and create or delete structured notes.","auth":{"kind":"api-key","hint":"Mem.ai API key from the Mem integrations settings."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"mem.create","description":"Append raw content into the Mem inbox. Optional instructions and context guide how Mem processes the input.","parameters":{"type":"object","properties":{"input":{"type":"string"},"instructions":{"type":"string"},"context":{"type":"string"}},"required":["input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.create","description":"Create a Markdown note in Mem. The first line of content is treated as the title. Optional id assigns a UUID and add_to_collections attaches the note to collections.","parameters":{"type":"object","properties":{"content":{"type":"string"},"id":{"type":"string"},"add_to_collections":{"type":"object"}},"required":["content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.delete","description":"Delete a note from Mem by its ID.","parameters":{"type":"object","properties":{"note_id":{"type":"string"}},"required":["note_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"messagebird","displayName":"Bird","description":"Send SMS messages and list message history via the Bird (MessageBird) channel API.","auth":{"kind":"api-key","hint":"Bird API Access Key from Settings > Security > Access Keys."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"send.sms","description":"Send an SMS message through a Bird SMS channel.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string","description":"Bird workspace identifier."},"channelId":{"type":"string","description":"SMS channel identifier within the workspace."},"recipient":{"type":"string","description":"E.164 phone number to send the message to."},"message":{"type":"string","description":"Body of the SMS message."},"reference":{"type":"string","description":"Caller-supplied identifier echoed on delivery receipts."},"scheduledFor":{"type":"string","description":"ISO-8601 UTC timestamp; omit to send immediately."}},"required":["workspaceId","channelId","recipient","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"list.messages","description":"List messages sent through a Bird SMS channel within a time window.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string","description":"Bird workspace identifier."},"channelId":{"type":"string","description":"SMS channel identifier within the workspace."},"status":{"type":"string","description":"Filter messages by status (e.g. accepted, sent, delivered, failed)."},"startAt":{"type":"string","description":"ISO-8601 UTC start of the lookup window."},"endAt":{"type":"string","description":"ISO-8601 UTC end of the lookup window; must be within 7 days of startAt."},"pageToken":{"type":"string","description":"Pagination token returned by a prior page; omit on the first call."}},"required":["workspaceId","channelId","status","startAt","endAt"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"metabase","displayName":"Metabase","description":"Query Metabase questions, dashboards, and generate reports with preview rendering.","auth":{"kind":"api-key","hint":"Metabase API key from settings -> authentication -> API keys"},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"questions.get","description":"Retrieve a Metabase question (saved query) by ID.","parameters":{"type":"object","properties":{"questionId":{"type":"string","description":"Metabase question ID"}},"required":["questionId"]},"requiredScopes":[],"class":"read"},{"name":"questions.preview","description":"Get a PNG preview image of a Metabase question.","parameters":{"type":"object","properties":{"questionId":{"type":"string","description":"Metabase question ID"},"waitTime":{"type":"integer","description":"Seconds to wait for rendering (1-10)","minimum":1,"maximum":10}},"required":["questionId","waitTime"]},"requiredScopes":[],"class":"read"},{"name":"dashboards.get_questions","description":"Retrieve all questions on a Metabase dashboard.","parameters":{"type":"object","properties":{"dashboardId":{"type":"string","description":"Metabase dashboard ID"}},"required":["dashboardId"]},"requiredScopes":[],"class":"read"},{"name":"questions.graph_render","description":"Get a rendered graph/visualization for a question as PNG.","parameters":{"type":"object","properties":{"questionId":{"type":"string","description":"Metabase question ID"},"graphName":{"type":"string","description":"Graph name (without file extension)"}},"required":["questionId","graphName"]},"requiredScopes":[],"class":"read"},{"name":"questions.embed","description":"Enable embedding for a question with optional parameters.","parameters":{"type":"object","properties":{"questionId":{"type":"string","description":"Metabase question ID"},"enabled":{"type":"boolean","description":"Enable or disable embedding"},"parameters":{"type":"object","description":"Dashboard parameters to apply (slug -> value)"}},"required":["questionId","enabled"]},"requiredScopes":[],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"microsoft-365-people","displayName":"Microsoft 365 People","description":"Manage Microsoft 365 personal contacts and contact folders via Microsoft Graph.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["offline_access","Contacts.ReadWrite","User.Read"],"clientIdEnv":"MS_OAUTH_CLIENT_ID","clientSecretEnv":"MS_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.contact","description":"Create a personal contact in the signed-in user's default contacts folder, or in a specific folder when contactFolderId is supplied.","parameters":{"type":"object","properties":{"contactFolderId":{"type":"string"},"givenName":{"type":"string"},"surname":{"type":"string"},"displayName":{"type":"string"},"middleName":{"type":"string"},"nickName":{"type":"string"},"title":{"type":"string"},"companyName":{"type":"string"},"department":{"type":"string"},"jobTitle":{"type":"string"},"emailAddresses":{"type":"array","items":{"type":"object"}},"businessPhones":{"type":"array","items":{"type":"string"}},"homePhones":{"type":"array","items":{"type":"string"}},"mobilePhone":{"type":"string"},"businessAddress":{"type":"object"},"homeAddress":{"type":"object"},"otherAddress":{"type":"object"},"personalNotes":{"type":"string"},"birthday":{"type":"string"}}},"requiredScopes":["Contacts.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.contact.folder","description":"Create a new contact folder under the user's default contacts folder, or as a child of parentFolderId when supplied.","parameters":{"type":"object","properties":{"displayName":{"type":"string"},"parentFolderId":{"type":"string"}},"required":["displayName"]},"requiredScopes":["Contacts.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"delete.contact","description":"Delete a personal contact by id from the signed-in mailbox.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":["Contacts.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.contact.folder","description":"Read a contact folder by id, optionally narrowing fields via $select.","parameters":{"type":"object","properties":{"contactFolderId":{"type":"string"},"$select":{"type":"string"}},"required":["contactFolderId"]},"requiredScopes":["Contacts.ReadWrite"],"class":"read"},{"name":"search.contacts","description":"Search the signed-in user contacts using OData $search/$filter with optional $top, $select, and $orderby.","parameters":{"type":"object","properties":{"$search":{"type":"string"},"$filter":{"type":"string"},"$select":{"type":"string"},"$top":{"type":"integer"},"$orderby":{"type":"string"},"contactFolderId":{"type":"string"}}},"requiredScopes":["Contacts.ReadWrite"],"class":"read"},{"name":"update.contact","description":"Patch fields on an existing personal contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"patch":{"type":"object"}},"required":["contactId","patch"]},"requiredScopes":["Contacts.ReadWrite"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"microsoft-365-planner","displayName":"Microsoft 365 Planner","description":"Create, read, update, and delete Microsoft 365 Planner plans, buckets, and tasks via Microsoft Graph.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["offline_access","Tasks.ReadWrite","Group.ReadWrite.All"],"clientIdEnv":"MS_OAUTH_CLIENT_ID","clientSecretEnv":"MS_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.plan","description":"Create a new Planner plan owned by a Microsoft 365 group. The owner must be a group id with a Planner-enabled group container.","parameters":{"type":"object","properties":{"owner":{"type":"string","description":"Microsoft 365 group id that will own the plan."},"title":{"type":"string","description":"Display title for the plan."}},"required":["owner","title"]},"requiredScopes":["Tasks.ReadWrite","Group.ReadWrite.All"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"find.aplan","description":"Read a Planner plan by id.","parameters":{"type":"object","properties":{"planId":{"type":"string"}},"required":["planId"]},"requiredScopes":["Tasks.ReadWrite"],"class":"read"},{"name":"update.plan","description":"Patch fields on a Planner plan. The caller must thread the resource @odata.etag through the If-Match header (handled by the optimistic-read-verify CAS path).","parameters":{"type":"object","properties":{"planId":{"type":"string"},"patch":{"type":"object","properties":{"title":{"type":"string"}}}},"required":["planId","patch"]},"requiredScopes":["Tasks.ReadWrite"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.bucket","description":"Create a Planner bucket inside an existing plan. orderHint controls placement among siblings; omit to let Graph assign a default.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Display name for the bucket."},"planId":{"type":"string","description":"Plan id this bucket belongs to."},"orderHint":{"type":"string","description":"Optional Planner orderHint string controlling placement among sibling buckets."}},"required":["name","planId"]},"requiredScopes":["Tasks.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.abucket","description":"Read a Planner bucket by id.","parameters":{"type":"object","properties":{"bucketId":{"type":"string"}},"required":["bucketId"]},"requiredScopes":["Tasks.ReadWrite"],"class":"read"},{"name":"update.bucket","description":"Patch fields on a Planner bucket. Requires the bucket @odata.etag in If-Match (optimistic-read-verify).","parameters":{"type":"object","properties":{"bucketId":{"type":"string"},"patch":{"type":"object","properties":{"name":{"type":"string"},"orderHint":{"type":"string"}}}},"required":["bucketId","patch"]},"requiredScopes":["Tasks.ReadWrite"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"delete.bucket","description":"Delete a Planner bucket. Requires the bucket @odata.etag in If-Match (etag-if-match).","parameters":{"type":"object","properties":{"bucketId":{"type":"string"}},"required":["bucketId"]},"requiredScopes":["Tasks.ReadWrite"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"create.task","description":"Create a Planner task inside a plan (and optionally a specific bucket). assignments is a map keyed by user id whose value carries the assignment payload.","parameters":{"type":"object","properties":{"planId":{"type":"string"},"bucketId":{"type":"string"},"title":{"type":"string"},"assignments":{"type":"object","description":"Map of userId → { @odata.type: \"microsoft.graph.plannerAssignment\", orderHint }."},"dueDateTime":{"type":"string","description":"ISO-8601 timestamp."},"startDateTime":{"type":"string","description":"ISO-8601 timestamp."},"priority":{"type":"integer","minimum":0,"maximum":10,"description":"Planner priority 0–10 (1=urgent, 3=important, 5=medium, 9=low)."},"percentComplete":{"type":"integer","minimum":0,"maximum":100}},"required":["planId","title"]},"requiredScopes":["Tasks.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"find.task","description":"Read a Planner task by id.","parameters":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"]},"requiredScopes":["Tasks.ReadWrite"],"class":"read"},{"name":"update.task","description":"Patch fields on a Planner task. Requires the task @odata.etag in If-Match (optimistic-read-verify).","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"patch":{"type":"object","properties":{"title":{"type":"string"},"bucketId":{"type":"string"},"assignments":{"type":"object"},"dueDateTime":{"type":"string"},"startDateTime":{"type":"string"},"priority":{"type":"integer","minimum":0,"maximum":10},"percentComplete":{"type":"integer","minimum":0,"maximum":100},"orderHint":{"type":"string"},"assigneePriority":{"type":"string"}}}},"required":["taskId","patch"]},"requiredScopes":["Tasks.ReadWrite"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"delete.task","description":"Delete a Planner task. Requires the task @odata.etag in If-Match (etag-if-match).","parameters":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"]},"requiredScopes":["Tasks.ReadWrite"],"class":"mutation","cas":"etag-if-match","externalEffect":true}]},{"kind":"microsoft-calendar","displayName":"Microsoft Calendar (Outlook 365)","description":"Let your agent check availability and book against an Outlook / Microsoft 365 calendar. Conflict-resolved via Graph's getSchedule pre-flight; etag-guarded on event updates.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["https://graph.microsoft.com/Calendars.ReadWrite","offline_access"],"clientIdEnv":"MS_OAUTH_CLIENT_ID","clientSecretEnv":"MS_OAUTH_CLIENT_SECRET"},"category":"calendar","defaultConsistencyModel":"authoritative","capabilities":[{"name":"list_availability","class":"read","description":"Look up busy windows on the connected Outlook calendar between timeMin and timeMax (RFC3339 timestamps).","parameters":{"type":"object","properties":{"timeMin":{"type":"string","description":"ISO8601 lower bound (inclusive)"},"timeMax":{"type":"string","description":"ISO8601 upper bound (exclusive)"}},"required":["timeMin","timeMax"]}},{"name":"book_slot","class":"mutation","description":"Reserve a time window on the connected Outlook calendar. Returns conflict + alternatives if the slot is no longer free.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"start":{"type":"string","description":"ISO8601 start time"},"end":{"type":"string","description":"ISO8601 end time"},"summary":{"type":"string","description":"Event title (subject)"},"description":{"type":"string","description":"Optional event body"},"attendees":{"type":"array","items":{"type":"string","description":"attendee email"}},"calendarId":{"type":"string","description":"Target calendar id; defaults to the user's primary calendar (/me/events) when omitted."},"location":{"type":"object","description":"Graph location resource, e.g. { displayName: \"Room 1\" }."},"recurrence":{"type":"object","description":"Graph patternedRecurrence resource ({ pattern, range })."},"isOnlineMeeting":{"type":"boolean","description":"Provision an online meeting (Teams) for the event."},"onlineMeetingProvider":{"type":"string","description":"Online meeting provider, e.g. 'teamsForBusiness'."},"reminderMinutesBeforeStart":{"type":"integer","description":"Minutes before start to fire the reminder."},"isAllDay":{"type":"boolean","description":"Mark the event as all-day (start/end must be midnight-aligned)."},"categories":{"type":"array","items":{"type":"string","description":"Outlook category name"}},"importance":{"type":"string","description":"Event importance: 'low' | 'normal' | 'high'."}},"required":["start","end","summary"]}},{"name":"delete_event","class":"mutation","description":"Delete an event by id from the connected Outlook calendar. Graph returns 204 on success; a re-delete of a missing event surfaces as 404 mapped to an idempotent tombstone. Honors If-Match against the event etag when the caller supplies expectedEtag.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"eventId":{"type":"string","description":"Graph event id to delete."}},"required":["eventId"]}},{"name":"list_events","class":"read","description":"List actual event objects on a calendar with OData paging/filtering ($top, $skip, $filter, $select, $orderby, $search). Targets the user's primary calendar (/me/events) unless calendarId is supplied. Distinct from list_availability, which returns busy windows.","parameters":{"type":"object","properties":{"calendarId":{"type":"string","description":"Calendar id; defaults to the user's primary calendar when omitted."},"$top":{"type":"integer","description":"Max events to return (OData page size)."},"$skip":{"type":"integer","description":"Number of events to skip (OData paging offset)."},"$filter":{"type":"string","description":"OData $filter expression."},"$select":{"type":"string","description":"Comma-separated event fields to project."},"$orderby":{"type":"string","description":"OData $orderby expression."},"$search":{"type":"string","description":"OData $search query."}}}}]},{"kind":"microsoft-dynamics-365-business-central","displayName":"Microsoft Dynamics 365 Business Central","description":"Read, create, update, delete, and search records in Microsoft Dynamics 365 Business Central — customers, vendors, items, sales invoices, sales orders, journal lines, and any custom OData entity the tenant exposes through the BC v2.0 API.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["https://api.businesscentral.dynamics.com/Financials.ReadWrite.All","https://api.businesscentral.dynamics.com/user_impersonation","offline_access"],"clientIdEnv":"BUSINESS_CENTRAL_OAUTH_CLIENT_ID","clientSecretEnv":"BUSINESS_CENTRAL_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.create","description":"Create a record in a Business Central entity set scoped to a company (Activepieces: Create Record).","parameters":{"type":"object","properties":{"companyId":{"type":"string","description":"Business Central company id (GUID). Required for every record operation because the API namespaces entities under companies({companyId})."},"entitySetName":{"type":"string","description":"OData entity set name on the Business Central API — e.g. customers, vendors, items, salesInvoices, salesOrders, journalLines, dimensions, generalLedgerEntries. Standard and custom entities both work."},"fields":{"type":"object","description":"Field name -> value payload. Field names match the Business Central entity schema (camelCase, e.g. displayName, number, lineType)."},"tenantId":{"type":"string","description":"Azure AD tenant id (GUID) hosting the Business Central environment. Stored on the data source as metadata.tenantId at connect time."},"environment":{"type":"string","description":"Business Central environment name (e.g. \"production\" or \"Sandbox-EU\"). Stored on the data source as metadata.environment at connect time."}},"required":["companyId","entitySetName","fields"]},"requiredScopes":["https://api.businesscentral.dynamics.com/Financials.ReadWrite.All"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.delete","description":"Delete a record from a Business Central entity set by id (Activepieces: Delete Record).","parameters":{"type":"object","properties":{"companyId":{"type":"string","description":"Business Central company id (GUID). Required for every record operation because the API namespaces entities under companies({companyId})."},"entitySetName":{"type":"string","description":"OData entity set name on the Business Central API — e.g. customers, vendors, items, salesInvoices, salesOrders, journalLines, dimensions, generalLedgerEntries. Standard and custom entities both work."},"recordId":{"type":"string","description":"Business Central record id (GUID) of the entity to delete."},"tenantId":{"type":"string","description":"Azure AD tenant id (GUID) hosting the Business Central environment. Stored on the data source as metadata.tenantId at connect time."},"environment":{"type":"string","description":"Business Central environment name (e.g. \"production\" or \"Sandbox-EU\"). Stored on the data source as metadata.environment at connect time."}},"required":["companyId","entitySetName","recordId"]},"requiredScopes":["https://api.businesscentral.dynamics.com/Financials.ReadWrite.All"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"records.get","description":"Read a single Business Central record by id (Activepieces: Get Record). Returns the entity payload plus its `@odata.etag` for downstream CAS updates.","parameters":{"type":"object","properties":{"companyId":{"type":"string","description":"Business Central company id (GUID). Required for every record operation because the API namespaces entities under companies({companyId})."},"entitySetName":{"type":"string","description":"OData entity set name on the Business Central API — e.g. customers, vendors, items, salesInvoices, salesOrders, journalLines, dimensions, generalLedgerEntries. Standard and custom entities both work."},"recordId":{"type":"string","description":"Business Central record id (GUID) of the entity to read."},"expand":{"type":"string","description":"Optional OData $expand expression for navigation properties (e.g. \"dimensionSetLines,salesInvoiceLines\")."},"tenantId":{"type":"string","description":"Azure AD tenant id (GUID) hosting the Business Central environment. Stored on the data source as metadata.tenantId at connect time."},"environment":{"type":"string","description":"Business Central environment name (e.g. \"production\" or \"Sandbox-EU\"). Stored on the data source as metadata.environment at connect time."}},"required":["companyId","entitySetName","recordId"]},"requiredScopes":["https://api.businesscentral.dynamics.com/Financials.ReadWrite.All"],"class":"read"},{"name":"records.search","description":"Search records in a Business Central entity set with OData $filter / $top / $orderby (Activepieces: Search Records).","parameters":{"type":"object","properties":{"companyId":{"type":"string","description":"Business Central company id (GUID). Required for every record operation because the API namespaces entities under companies({companyId})."},"entitySetName":{"type":"string","description":"OData entity set name on the Business Central API — e.g. customers, vendors, items, salesInvoices, salesOrders, journalLines, dimensions, generalLedgerEntries. Standard and custom entities both work."},"filter":{"type":"string","description":"OData $filter expression, e.g. \"displayName eq 'Adatum Corporation'\" or \"totalAmountIncludingTax gt 1000\"."},"orderby":{"type":"string","description":"OData $orderby expression, e.g. \"lastModifiedDateTime desc\"."},"top":{"type":"integer","minimum":1,"maximum":20000,"description":"OData $top page size. BC caps the page at 20,000 rows."},"skip":{"type":"integer","minimum":0,"description":"OData $skip offset for paging."},"select":{"type":"string","description":"Optional OData $select to narrow the projection, e.g. \"id,number,displayName\"."},"tenantId":{"type":"string","description":"Azure AD tenant id (GUID) hosting the Business Central environment. Stored on the data source as metadata.tenantId at connect time."},"environment":{"type":"string","description":"Business Central environment name (e.g. \"production\" or \"Sandbox-EU\"). Stored on the data source as metadata.environment at connect time."}},"required":["companyId","entitySetName"]},"requiredScopes":["https://api.businesscentral.dynamics.com/Financials.ReadWrite.All"],"class":"read"},{"name":"records.update","description":"Patch a Business Central record by id (Activepieces: Update Record). Only the supplied fields are written; everything else is preserved.","parameters":{"type":"object","properties":{"companyId":{"type":"string","description":"Business Central company id (GUID). Required for every record operation because the API namespaces entities under companies({companyId})."},"entitySetName":{"type":"string","description":"OData entity set name on the Business Central API — e.g. customers, vendors, items, salesInvoices, salesOrders, journalLines, dimensions, generalLedgerEntries. Standard and custom entities both work."},"recordId":{"type":"string","description":"Business Central record id (GUID) of the entity to update."},"fields":{"type":"object","description":"Field name -> value patch payload. Field names match the Business Central entity schema."},"tenantId":{"type":"string","description":"Azure AD tenant id (GUID) hosting the Business Central environment. Stored on the data source as metadata.tenantId at connect time."},"environment":{"type":"string","description":"Business Central environment name (e.g. \"production\" or \"Sandbox-EU\"). Stored on the data source as metadata.environment at connect time."}},"required":["companyId","entitySetName","recordId","fields"]},"requiredScopes":["https://api.businesscentral.dynamics.com/Financials.ReadWrite.All"],"class":"mutation","cas":"etag-if-match","externalEffect":true}]},{"kind":"microsoft-dynamics-crm","displayName":"Microsoft Dynamics CRM","description":"Read, create, update, and delete records in Microsoft Dynamics 365 (Dataverse Web API v9.2).","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["offline_access","https://globaldisco.crm.dynamics.com/user_impersonation"],"clientIdEnv":"MICROSOFT_DYNAMICS_CRM_OAUTH_CLIENT_ID","clientSecretEnv":"MICROSOFT_DYNAMICS_CRM_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.get","description":"Read a single record from a Dataverse entity set by GUID. entitySet is the pluralized logical name (e.g. \"accounts\", \"contacts\", \"leads\", \"opportunities\").","parameters":{"type":"object","properties":{"entitySet":{"type":"string"},"recordId":{"type":"string"},"$select":{"type":"string"},"$expand":{"type":"string"}},"required":["entitySet","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.create","description":"Create a new record in a Dataverse entity set. fields is an OData JSON body keyed by logical attribute names; lookups are written as `@odata.bind` references.","parameters":{"type":"object","properties":{"entitySet":{"type":"string"},"fields":{"type":"object"}},"required":["entitySet","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Patch attributes on an existing record. Dataverse PATCH against an entity-set key performs an upsert; pass If-Match via the cas policy when update-only semantics are required.","parameters":{"type":"object","properties":{"entitySet":{"type":"string"},"recordId":{"type":"string"},"fields":{"type":"object"}},"required":["entitySet","recordId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"records.delete","description":"Delete a record from a Dataverse entity set by GUID.","parameters":{"type":"object","properties":{"entitySet":{"type":"string"},"recordId":{"type":"string"}},"required":["entitySet","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"microsoft-excel-365","displayName":"Microsoft Excel 365","description":"Read and update Excel workbooks, worksheets, tables, ranges, and rows via Microsoft Graph.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["offline_access","Files.ReadWrite","Sites.ReadWrite.All","User.Read"],"clientIdEnv":"MS_OAUTH_CLIENT_ID","clientSecretEnv":"MS_OAUTH_CLIENT_SECRET"},"category":"spreadsheet","defaultConsistencyModel":"authoritative","capabilities":[{"name":"get.workbooks","description":"List workbook (.xlsx) drive items in the user OneDrive, optionally narrowing via $search/$filter/$top.","parameters":{"type":"object","properties":{"$search":{"type":"string"},"$filter":{"type":"string"},"$top":{"type":"integer"},"$select":{"type":"string"}}},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"find.workbook","description":"Resolve a workbook drive item by exact filename within the user OneDrive root.","parameters":{"type":"object","properties":{"fileName":{"type":"string"}},"required":["fileName"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"get.worksheets","description":"List worksheets contained in a workbook.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"}},"required":["workbookId"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"get.worksheet","description":"Read a single worksheet by id or name within a workbook.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"}},"required":["workbookId","worksheetId"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"find.worksheet","description":"Locate a worksheet by name within a workbook using OData $filter on name.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"name":{"type":"string"}},"required":["workbookId","name"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"get.worksheet.rows","description":"Read the used range of a worksheet as a row-major value matrix (values only by default).","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"},"valuesOnly":{"type":"boolean"}},"required":["workbookId","worksheetId"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"get.worksheet.columns","description":"Read worksheet columns metadata for a worksheet.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"}},"required":["workbookId","worksheetId"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"get.range","description":"Read a specific A1-style range from a worksheet (e.g. Sheet1!A1:D10).","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"},"address":{"type":"string"}},"required":["workbookId","worksheetId","address"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"get.row","description":"Read a single row from a worksheet by 1-based row index (translated to an A1 address on the used range).","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"},"address":{"type":"string"}},"required":["workbookId","worksheetId","address"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"find.row","description":"Search a table column for a value, returning the matching row.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"tableId":{"type":"string"},"columnId":{"type":"string"},"value":{}},"required":["workbookId","tableId","columnId","value"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"get.table.columns","description":"List columns of a table within a workbook.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"tableId":{"type":"string"}},"required":["workbookId","tableId"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"get.table.rows","description":"List rows of a table within a workbook (server-paged via $top/$skip).","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"tableId":{"type":"string"},"$top":{"type":"integer"},"$skip":{"type":"integer"}},"required":["workbookId","tableId"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"lookup.table.column","description":"Read the data body range of a single table column to drive lookups.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"tableId":{"type":"string"},"columnId":{"type":"string"}},"required":["workbookId","tableId","columnId"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"create.workbook","description":"Create a new empty .xlsx workbook in the user OneDrive root.","parameters":{"type":"object","properties":{"fileName":{"type":"string"},"conflictBehavior":{"type":"string","enum":["rename","replace","fail"]}},"required":["fileName"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"delete.workbook","description":"Delete a workbook drive item by id.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"}},"required":["workbookId"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"add.worksheet","description":"Add a new worksheet to a workbook with an optional sheet name.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"name":{"type":"string"}},"required":["workbookId"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.worksheet","description":"Create a worksheet within a workbook (alias of add.worksheet).","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"name":{"type":"string"}},"required":["workbookId"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"delete.worksheet","description":"Delete a worksheet by id or name from a workbook.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"}},"required":["workbookId","worksheetId"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rename.worksheet","description":"Rename a worksheet (PATCH the worksheet name field).","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"},"name":{"type":"string"}},"required":["workbookId","worksheetId","name"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"clear.worksheet","description":"Clear the entire used range of a worksheet (values, formats, or all).","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"},"applyTo":{"type":"string","enum":["All","Formats","Contents"]}},"required":["workbookId","worksheetId"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"clear.range","description":"Clear an A1-style range within a worksheet.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"},"address":{"type":"string"},"applyTo":{"type":"string","enum":["All","Formats","Contents"]}},"required":["workbookId","worksheetId","address"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"clear.column","description":"Clear an entire column within a worksheet by A1 column address (e.g. B:B).","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"},"address":{"type":"string"},"applyTo":{"type":"string","enum":["All","Formats","Contents"]}},"required":["workbookId","worksheetId","address"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"clear.row","description":"Clear an entire row within a worksheet by A1 row address (e.g. 5:5).","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"},"address":{"type":"string"},"applyTo":{"type":"string","enum":["All","Formats","Contents"]}},"required":["workbookId","worksheetId","address"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"delete.row","description":"Delete a worksheet row by A1 address, shifting cells up.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"},"address":{"type":"string"}},"required":["workbookId","worksheetId","address"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"append.row","description":"Append a single row of values to a table within a workbook.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"tableId":{"type":"string"},"values":{"type":"array"}},"required":["workbookId","tableId","values"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"append.multiple.rows","description":"Append multiple rows of values to a table in a single batch.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"tableId":{"type":"string"},"values":{"type":"array"}},"required":["workbookId","tableId","values"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"append.table.rows","description":"Append rows to a table at a specific index (or end when omitted).","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"tableId":{"type":"string"},"index":{"type":"integer"},"values":{"type":"array"}},"required":["workbookId","tableId","values"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.row","description":"Update the values of an existing range within a worksheet.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"},"address":{"type":"string"},"values":{"type":"array"}},"required":["workbookId","worksheetId","address","values"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.table","description":"Convert a worksheet range into a table, optionally treating the first row as the header.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"},"address":{"type":"string"},"hasHeaders":{"type":"boolean"}},"required":["workbookId","worksheetId","address"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"delete.table","description":"Delete a table from a workbook by id or name.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"tableId":{"type":"string"}},"required":["workbookId","tableId"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"convert.to.range","description":"Convert a table back into a normal worksheet range.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"tableId":{"type":"string"}},"required":["workbookId","tableId"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"microsoft-graph","displayName":"Microsoft Graph (Identity & Directory)","description":"Query the Microsoft 365 directory — look up users by email, list organizations, enumerate groups, and resolve group membership. Read-only identity surface shared across the Outlook, Teams, SharePoint, and OneDrive adapters.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["https://graph.microsoft.com/User.Read","https://graph.microsoft.com/User.Read.All","https://graph.microsoft.com/Group.Read.All","https://graph.microsoft.com/GroupMember.Read.All","https://graph.microsoft.com/Organization.Read.All","offline_access"],"clientIdEnv":"MS_OAUTH_CLIENT_ID","clientSecretEnv":"MS_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"get_me","class":"read","description":"Return the connected user (id, displayName, mail, userPrincipalName, jobTitle).","parameters":{"type":"object","properties":{}}},{"name":"lookup_user","class":"read","description":"Look up a Microsoft 365 user by primary email (matches mail OR userPrincipalName).","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]}},{"name":"list_users","class":"read","description":"List directory users, optionally narrowed by a $search prefix on displayName / mail.","parameters":{"type":"object","properties":{"search":{"type":"string","description":"Optional displayName/mail prefix."},"top":{"type":"integer","minimum":1,"maximum":100,"default":25}}}},{"name":"list_groups","class":"read","description":"List Azure AD groups, optionally narrowed by a $search prefix on displayName.","parameters":{"type":"object","properties":{"search":{"type":"string","description":"Optional displayName prefix."},"top":{"type":"integer","minimum":1,"maximum":100,"default":25}}}},{"name":"list_group_members","class":"read","description":"List the user / group members of a directory group.","parameters":{"type":"object","properties":{"groupId":{"type":"string"},"top":{"type":"integer","minimum":1,"maximum":100,"default":50}},"required":["groupId"]}},{"name":"get_organization","class":"read","description":"Return the tenant organization record (id, displayName, verifiedDomains).","parameters":{"type":"object","properties":{}}}]},{"kind":"microsoft-onenote","displayName":"Microsoft OneNote","description":"Create notebooks, sections, and pages in Microsoft OneNote and append content to existing pages via the Microsoft Graph OneNote API.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["offline_access","Notes.ReadWrite","Notes.ReadWrite.All","User.Read"],"clientIdEnv":"MICROSOFT_ONENOTE_OAUTH_CLIENT_ID","clientSecretEnv":"MICROSOFT_ONENOTE_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"notebooks.list","description":"List the signed-in user's OneNote notebooks. Use $top to page, $filter to narrow by displayName.","parameters":{"type":"object","properties":{"$top":{"type":"integer"},"$filter":{"type":"string"},"$select":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sections.list","description":"List sections in a given notebook. notebookId is the Graph notebook id (e.g. \"1-abcdef…\").","parameters":{"type":"object","properties":{"notebookId":{"type":"string"},"$top":{"type":"integer"},"$filter":{"type":"string"}},"required":["notebookId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pages.list","description":"List pages in a section. sectionId is the Graph section id; pages are returned in OneNote's default order (most-recently-modified first).","parameters":{"type":"object","properties":{"sectionId":{"type":"string"},"$top":{"type":"integer"},"$filter":{"type":"string"},"$search":{"type":"string"}},"required":["sectionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pages.getContent","description":"Get the HTML body of a OneNote page. Pass includeIDs=true to receive data-id attributes for use with the page-update PATCH endpoint.","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"includeIDs":{"type":"boolean"}},"required":["pageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"notebooks.create","description":"Create a new OneNote notebook owned by the signed-in user. displayName is required and must be unique across the user's notebooks.","parameters":{"type":"object","properties":{"displayName":{"type":"string"}},"required":["displayName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sections.create","description":"Create a section inside an existing notebook. notebookId pins the parent.","parameters":{"type":"object","properties":{"notebookId":{"type":"string"},"displayName":{"type":"string"}},"required":["notebookId","displayName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pages.create","description":"Create a new page in a OneNote section by POSTing OneNote-flavored HTML (full document with and <body>). Callers must supply text/html content; this capability uses /me/onenote/pages directly, which requires a sectionId query parameter.","parameters":{"type":"object","properties":{"sectionId":{"type":"string"},"html":{"type":"string"}},"required":["sectionId","html"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pages.createInSection","description":"Create a page inside a specific section (alias of pages.create that POSTs to the section subpath). html is OneNote-flavored HTML with <title> and <body>.","parameters":{"type":"object","properties":{"sectionId":{"type":"string"},"html":{"type":"string"}},"required":["sectionId","html"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pages.createImage","description":"Create a page whose body embeds an image. html must reference the image either by absolute URL (<img src=\"https://…\">) or by data-URI (<img src=\"data:image/png;base64,…\">). For multipart uploads with named parts, use the upstream Graph multipart endpoint directly.","parameters":{"type":"object","properties":{"sectionId":{"type":"string"},"html":{"type":"string"}},"required":["sectionId","html"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pages.append","description":"Append (or otherwise patch) content to an existing OneNote page. revisions is a JSON array of OneNote PATCH commands; each entry is { target, action, position, content }. Common form: [{\"target\":\"body\",\"action\":\"append\",\"content\":\"<p>…</p>\"}].","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"revisions":{"type":"array"}},"required":["pageId","revisions"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"microsoft-power-bi","displayName":"Microsoft Power BI","description":"Create push datasets in Microsoft Power BI and stream rows into their tables.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["offline_access","https://analysis.windows.net/powerbi/api/Dataset.ReadWrite.All","https://analysis.windows.net/powerbi/api/Workspace.Read.All"],"clientIdEnv":"MS_OAUTH_CLIENT_ID","clientSecretEnv":"MS_OAUTH_CLIENT_SECRET"},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.dataset","description":"Create a Power BI push dataset in a workspace (group). The dataset payload describes table schemas; defaultMode \"Push\" is required for downstream rows.push calls.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"Power BI workspace (group) id that will own the dataset."},"name":{"type":"string","description":"Display name for the dataset within the workspace."},"defaultMode":{"type":"string","enum":["Push","Streaming","PushStreaming"],"description":"Dataset mode. Push is the default for REST-fed datasets; Streaming/PushStreaming enable real-time tiles."},"tables":{"type":"array","description":"Table schemas. Each entry carries { name, columns: [{ name, dataType }] } per the Power BI dataset spec.","items":{"type":"object"}},"relationships":{"type":"array","description":"Optional relationship definitions between tables.","items":{"type":"object"}}},"required":["groupId","name","tables"]},"requiredScopes":["https://analysis.windows.net/powerbi/api/Dataset.ReadWrite.All"],"class":"mutation","cas":"none","externalEffect":true},{"name":"push.rows.to.dataset.table","description":"Append rows to a table inside an existing Power BI push dataset. Power BI enforces a 10k-rows-per-request / 1MB-payload cap; callers must batch upstream.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"Power BI workspace (group) id that owns the dataset."},"datasetId":{"type":"string","description":"Push dataset id returned by create.dataset."},"tableName":{"type":"string","description":"Name of the table inside the dataset to receive the rows."},"rows":{"type":"array","description":"Row objects whose keys match the table column names defined at dataset creation.","items":{"type":"object"}}},"required":["groupId","datasetId","tableName","rows"]},"requiredScopes":["https://analysis.windows.net/powerbi/api/Dataset.ReadWrite.All"],"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"microsoft-teams","displayName":"Microsoft Teams","description":"Post messages from the agent into Microsoft Teams channels and 1:1/group chats, list teams and channels, and look up users by email. Advisory surface — Teams posts are informational, not transactional.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["https://graph.microsoft.com/ChannelMessage.Send","https://graph.microsoft.com/Chat.ReadWrite","https://graph.microsoft.com/Team.ReadBasic.All","https://graph.microsoft.com/Channel.ReadBasic.All","https://graph.microsoft.com/User.Read","https://graph.microsoft.com/User.ReadBasic.All","openid","profile","offline_access"],"clientIdEnv":"MS_OAUTH_CLIENT_ID","clientSecretEnv":"MS_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"advisory","capabilities":[{"name":"post_channel_message","class":"mutation","description":"Post a message to a Teams channel as the connected user. Append-only — no CAS.","cas":"none","externalEffect":true,"parameters":{"type":"object","properties":{"teamId":{"type":"string","description":"Graph team id (group id)."},"channelId":{"type":"string","description":"Graph channel id."},"content":{"type":"string","description":"Message body."},"contentType":{"type":"string","enum":["text","html"],"default":"text","description":"Body format — text or html."}},"required":["teamId","channelId","content"]}},{"name":"post_chat_message","class":"mutation","description":"Post a message to a 1:1 or group chat as the connected user. Append-only — no CAS.","cas":"none","externalEffect":true,"parameters":{"type":"object","properties":{"chatId":{"type":"string","description":"Graph chat id (e.g. 19:meeting_… or 19:…@thread.v2)."},"content":{"type":"string","description":"Message body."},"contentType":{"type":"string","enum":["text","html"],"default":"text","description":"Body format — text or html."}},"required":["chatId","content"]}},{"name":"list_channel_messages","class":"read","description":"List recent messages in a Teams channel (most recent first).","parameters":{"type":"object","properties":{"teamId":{"type":"string"},"channelId":{"type":"string"},"top":{"type":"integer","minimum":1,"maximum":50,"default":20}},"required":["teamId","channelId"]}},{"name":"list_joined_teams","class":"read","description":"List teams the connected user has joined.","parameters":{"type":"object","properties":{}}},{"name":"list_team_channels","class":"read","description":"List channels in a Team the connected user can see.","parameters":{"type":"object","properties":{"teamId":{"type":"string"}},"required":["teamId"]}},{"name":"lookup_user","class":"read","description":"Look up a Microsoft 365 user by primary email (UPN or mail address).","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]}}]},{"kind":"microsoft-todo","displayName":"Microsoft To Do","description":"Manage Microsoft To Do task lists and tasks via the Microsoft Graph todo API — list/create/update/complete/delete tasks, manage task lists, attach files.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["offline_access","Tasks.ReadWrite","User.Read"],"clientIdEnv":"MICROSOFT_TODO_OAUTH_CLIENT_ID","clientSecretEnv":"MICROSOFT_TODO_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"taskLists.list","description":"List the signed-in user's To Do task lists. Use $top to page, $filter to narrow by displayName.","parameters":{"type":"object","properties":{"$top":{"type":"integer"},"$filter":{"type":"string"},"$select":{"type":"string"},"$skip":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"taskLists.findByName","description":"Find a task list by exact displayName via a Graph $filter eq query.","parameters":{"type":"object","properties":{"displayName":{"type":"string"}},"required":["displayName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"taskLists.create","description":"Create a new To Do task list owned by the signed-in user.","parameters":{"type":"object","properties":{"displayName":{"type":"string"}},"required":["displayName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"taskLists.update","description":"Rename or otherwise update an existing task list. listId pins the target.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"displayName":{"type":"string"}},"required":["listId","displayName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.list","description":"List tasks in a To Do task list. listId is the Graph todoTaskList id.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"$top":{"type":"integer"},"$filter":{"type":"string"},"$select":{"type":"string"},"$orderby":{"type":"string"},"$skip":{"type":"integer"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.get","description":"Get a single task by id from a specific task list.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"taskId":{"type":"string"}},"required":["listId","taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.findByTitle","description":"Find tasks in a list whose title exactly matches via a Graph $filter eq query.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"title":{"type":"string"},"$top":{"type":"integer"}},"required":["listId","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.create","description":"Create a new task in a task list. body is JSON in todoTask shape (e.g. {\"title\":\"…\",\"body\":{\"content\":\"…\",\"contentType\":\"text\"},\"dueDateTime\":{\"dateTime\":\"2026-06-01T17:00:00\",\"timeZone\":\"UTC\"},\"importance\":\"normal\"}).","parameters":{"type":"object","properties":{"listId":{"type":"string"},"task":{"type":"object"}},"required":["listId","task"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update an existing task. Pass only the fields to change in patch (Graph PATCH semantics).","parameters":{"type":"object","properties":{"listId":{"type":"string"},"taskId":{"type":"string"},"patch":{"type":"object"}},"required":["listId","taskId","patch"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.complete","description":"Mark a task as completed by PATCHing status=completed. Graph also sets completedDateTime server-side when status transitions to completed.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"taskId":{"type":"string"}},"required":["listId","taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.delete","description":"Delete a task from a task list. Irreversible.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"taskId":{"type":"string"}},"required":["listId","taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.addAttachment","description":"Attach a small file (< 3MB) to a task via the taskFileAttachment endpoint. contentBytes must be base64-encoded.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"taskId":{"type":"string"},"name":{"type":"string"},"contentType":{"type":"string"},"contentBytes":{"type":"string"}},"required":["listId","taskId","name","contentBytes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"millionverifier","displayName":"MillionVerifier","description":"Verify the deliverability of an email address through MillionVerifier.","auth":{"kind":"api-key","hint":"MillionVerifier API key from the account dashboard."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"verify.email","description":"Verify whether an email address is deliverable. Returns MillionVerifier result codes (ok, catch_all, unknown, error, disposable, invalid) plus quality, subresult, and free/role flags.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"The email address to verify."},"timeout":{"type":"integer","description":"Maximum seconds to wait for the verification result. Defaults to 10 if omitted; range 2..60.","minimum":2,"maximum":60}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"mind-studio","displayName":"MindStudio","description":"Run MindStudio apps and workflows with variable inputs.","auth":{"kind":"api-key","hint":"MindStudio API Bearer token."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"workflows.run","description":"Run a MindStudio workflow by App ID.","parameters":{"type":"object","properties":{"appId":{"type":"string","description":"The MindStudio app ID to run."},"workflow":{"type":"string","description":"Workflow name to run (without the .flow extension)."},"variables":{"type":"object","description":"Key-value variables passed to the app."},"callbackUrl":{"type":"string","description":"URL to receive the execution result asynchronously."},"includeBillingCost":{"type":"boolean","description":"Return the billing cost in the response."}},"required":["appId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"mindee","displayName":"Mindee","description":"Run Mindee document-AI predictions against off-the-shelf or custom APIs.","auth":{"kind":"api-key","hint":"Mindee API key from https://platform.mindee.com/api-keys."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"mindee.predict.document","description":"Submit a document URL to a Mindee prediction API and receive the parsed document object.","parameters":{"type":"object","properties":{"account_name":{"type":"string","description":"Mindee account or organization name that owns the API."},"api_name":{"type":"string","description":"Mindee API product slug (for example invoices, receipts, passport)."},"api_version":{"type":"string","description":"API version to invoke. Defaults to v1."},"file":{"type":"string","description":"Remote URL of the file to parse. Supported formats: .pdf, .jpg, .png, .webp, .tiff, .heic."}},"required":["account_name","api_name","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false}]},{"kind":"miro","displayName":"Miro","description":"Read and edit Miro boards: list and search boards, read board items (sticky notes, shapes, text, cards, images, frames, connectors), create and update items, and post board content back into the source of truth.","auth":{"kind":"oauth2","authorizationUrl":"https://miro.com/oauth/authorize","tokenUrl":"https://api.miro.com/v1/oauth/token","scopes":["boards:read","boards:write","identity:read"],"clientIdEnv":"MIRO_OAUTH_CLIENT_ID","clientSecretEnv":"MIRO_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"me.get","description":"Return the authenticated Miro user.","parameters":{"type":"object","properties":{}},"requiredScopes":["identity:read"],"class":"read"},{"name":"boards.list","description":"List boards accessible to the authenticated user. Supports cursor pagination via `cursor` and team / sort filters.","parameters":{"type":"object","properties":{"team_id":{"type":"string","description":"Filter to a single team id."},"query":{"type":"string","description":"Free-text board name filter."},"owner":{"type":"string","description":"Filter by owner user id."},"limit":{"type":"integer","minimum":1,"maximum":50},"offset":{"type":"integer","minimum":0},"sort":{"type":"string","enum":["default","last_modified","last_opened","last_created","alphabetically"]}}},"requiredScopes":["boards:read"],"class":"read"},{"name":"boards.get","description":"Fetch a single Miro board by id.","parameters":{"type":"object","properties":{"board_id":{"type":"string"}},"required":["board_id"]},"requiredScopes":["boards:read"],"class":"read"},{"name":"boards.members.list","description":"List members (collaborators) of a Miro board.","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50},"offset":{"type":"integer","minimum":0}},"required":["board_id"]},"requiredScopes":["boards:read"],"class":"read"},{"name":"items.list","description":"List all items on a board, optionally filtered by item type (sticky_note, text, shape, card, image, frame, connector, embed, app_card, document).","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"type":{"type":"string","enum":["sticky_note","text","shape","card","image","frame","connector","embed","app_card","document","preview"]},"limit":{"type":"integer","minimum":1,"maximum":50},"cursor":{"type":"string"}},"required":["board_id"]},"requiredScopes":["boards:read"],"class":"read"},{"name":"items.get","description":"Fetch a single board item by id.","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"item_id":{"type":"string"}},"required":["board_id","item_id"]},"requiredScopes":["boards:read"],"class":"read"},{"name":"connectors.list","description":"List connector lines on a board (arrows / lines between items).","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50},"cursor":{"type":"string"}},"required":["board_id"]},"requiredScopes":["boards:read"],"class":"read"},{"name":"tags.list","description":"List tags defined on a board.","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50},"offset":{"type":"integer","minimum":0}},"required":["board_id"]},"requiredScopes":["boards:read"],"class":"read"},{"name":"boards.create","description":"Create a new Miro board. Accepts an optional name, description, team_id, and sharing policy. Returns the new board id used by every items.* endpoint.","parameters":{"type":"object","properties":{"name":{"type":"string","maxLength":60},"description":{"type":"string","maxLength":300},"team_id":{"type":"string"},"policy":{"type":"object","description":"Permissions + sharing policy. See https://developers.miro.com/reference/create-board for the full PolicyChange shape."}},"required":["name"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"boards.update","description":"Update a Miro board (name, description, team, or sharing policy).","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"name":{"type":"string","maxLength":60},"description":{"type":"string","maxLength":300},"team_id":{"type":"string"},"policy":{"type":"object"}},"required":["board_id"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"boards.delete","description":"Delete a Miro board (irreversible).","parameters":{"type":"object","properties":{"board_id":{"type":"string"}},"required":["board_id"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sticky_notes.create","description":"Create a sticky note on a board. `data.content` accepts plain text; `style.fillColor` is a Miro sticky-note color keyword (e.g. yellow, light_yellow, pink).","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"data":{"type":"object","properties":{"content":{"type":"string"},"shape":{"type":"string","enum":["square","rectangle"]}},"required":["content"]},"style":{"type":"object","properties":{"fillColor":{"type":"string"},"textAlign":{"type":"string","enum":["left","center","right"]},"textAlignVertical":{"type":"string","enum":["top","middle","bottom"]}}},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"},"origin":{"type":"string","enum":["center"]}}},"geometry":{"type":"object","properties":{"width":{"type":"number"},"height":{"type":"number"}}},"parent":{"type":"object","description":"Attach the sticky note to a frame: { id: <frame_item_id> }.","properties":{"id":{"type":"string"}}}},"required":["board_id","data"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sticky_notes.update","description":"Update a sticky note (content, style, position, geometry, or parent frame).","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"item_id":{"type":"string"},"data":{"type":"object"},"style":{"type":"object"},"position":{"type":"object"},"geometry":{"type":"object"},"parent":{"type":"object"}},"required":["board_id","item_id"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"text.create","description":"Create a text item on a board.","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"data":{"type":"object","properties":{"content":{"type":"string"}},"required":["content"]},"style":{"type":"object"},"position":{"type":"object"},"geometry":{"type":"object"},"parent":{"type":"object"}},"required":["board_id","data"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"shapes.create","description":"Create a shape item on a board. `data.shape` selects the geometric primitive (rectangle, round_rectangle, circle, triangle, rhombus, etc.).","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"data":{"type":"object","properties":{"shape":{"type":"string","description":"Miro shape kind; full enum at https://developers.miro.com/reference/create-shape-item."},"content":{"type":"string"}},"required":["shape"]},"style":{"type":"object"},"position":{"type":"object"},"geometry":{"type":"object"},"parent":{"type":"object"}},"required":["board_id","data"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cards.create","description":"Create a card item (title + description + assignee + due-date) on a board.","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"data":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"dueDate":{"type":"string","format":"date-time"},"assigneeId":{"type":"string"}},"required":["title"]},"style":{"type":"object"},"position":{"type":"object"},"geometry":{"type":"object"},"parent":{"type":"object"}},"required":["board_id","data"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"frames.create","description":"Create a frame on a board. Frames group items; child items can be attached via `parent.id` on item creation.","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"data":{"type":"object","properties":{"title":{"type":"string"},"format":{"type":"string","enum":["custom"]},"type":{"type":"string","enum":["freeform"]}}},"style":{"type":"object"},"position":{"type":"object"},"geometry":{"type":"object"}},"required":["board_id"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"images.create.by_url","description":"Create an image item from a public URL (Miro fetches the image server-side).","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"data":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"title":{"type":"string"}},"required":["url"]},"position":{"type":"object"},"geometry":{"type":"object"},"parent":{"type":"object"}},"required":["board_id","data"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"connectors.create","description":"Create a connector line between two items on the board. `startItem.id` and `endItem.id` reference existing item ids.","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"startItem":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"endItem":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"captions":{"type":"array","items":{"type":"object","properties":{"content":{"type":"string"}}}},"style":{"type":"object"},"shape":{"type":"string","enum":["straight","elbowed","curved"]}},"required":["board_id","startItem","endItem"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"items.delete","description":"Delete an item from a board (works across all item types).","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"item_id":{"type":"string"}},"required":["board_id","item_id"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"boards.share","description":"Invite users to a Miro board by email. Roles: viewer, commenter, editor, coowner.","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"emails":{"type":"array","items":{"type":"string","format":"email"}},"role":{"type":"string","enum":["viewer","commenter","editor","coowner"]},"message":{"type":"string"}},"required":["board_id","emails","role"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"missive","displayName":"Missive","description":"Manage Missive contacts, draft posts, and tasks, and look up contacts in shared contact books.","auth":{"kind":"api-key","hint":"Missive API token, sent as `Authorization: Bearer <token>`."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.find","description":"Search contacts in a Missive contact book, optionally filtered by free-text search, modification time, or deletion state.","parameters":{"type":"object","properties":{"contact_book":{"type":"string"},"search":{"type":"string"},"order":{"type":"string"},"limit":{"type":"integer"},"offset":{"type":"integer"},"modified_since":{"type":"integer"},"include_deleted":{"type":"boolean"}},"required":["contact_book"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create a contact in a Missive contact book. `infos` carries the emails/phones/addresses and `memberships` carries the organization or group links.","parameters":{"type":"object","properties":{"contact_book":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"middle_name":{"type":"string"},"phonetic_first_name":{"type":"string"},"phonetic_last_name":{"type":"string"},"phonetic_middle_name":{"type":"string"},"prefix":{"type":"string"},"suffix":{"type":"string"},"nickname":{"type":"string"},"file_as":{"type":"string"},"notes":{"type":"string"},"starred":{"type":"boolean"},"gender":{"type":"string"},"infos":{"type":"array","items":{"type":"object"}},"memberships":{"type":"array","items":{"type":"object"}}},"required":["contact_book"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update an existing Missive contact by id. Optionally move the contact to a different contact book.","parameters":{"type":"object","properties":{"contact_id":{"type":"string"},"move_to_contact_book":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"middle_name":{"type":"string"},"nickname":{"type":"string"},"notes":{"type":"string"},"starred":{"type":"boolean"},"gender":{"type":"string"},"infos":{"type":"array","items":{"type":"object"}},"memberships":{"type":"array","items":{"type":"object"}}},"required":["contact_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"drafts.create","description":"Create a draft post in Missive. Set `send` to deliver immediately, or pass `send_at` to schedule. Supports attachments and conversation/team metadata.","parameters":{"type":"object","properties":{"account":{"type":"string"},"subject":{"type":"string"},"body":{"type":"string"},"from_field":{"type":"object"},"to_fields":{"type":"array","items":{"type":"object"}},"cc_fields":{"type":"array","items":{"type":"object"}},"bcc_fields":{"type":"array","items":{"type":"object"}},"attachments":{"type":"array","items":{"type":"object"}},"references":{"type":"array","items":{"type":"string"}},"conversation":{"type":"string"},"conversation_subject":{"type":"string"},"conversation_color":{"type":"string"},"team":{"type":"string"},"force_team":{"type":"boolean"},"add_to_inbox":{"type":"boolean"},"add_to_team_inbox":{"type":"boolean"},"close":{"type":"boolean"},"add_shared_labels":{"type":"array","items":{"type":"string"}},"remove_shared_labels":{"type":"array","items":{"type":"string"}},"send":{"type":"boolean"},"send_at":{"type":"integer"},"auto_followup":{"type":"boolean"}},"required":["body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.create","description":"Create a task in Missive. Standalone tasks need `team`; conversation tasks need `conversation`; subtasks need `parent_task`.","parameters":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"team":{"type":"string"},"conversation":{"type":"string"},"parent_task":{"type":"string"},"assignees":{"type":"array","items":{"type":"string"}},"state":{"type":"string"},"due_at":{"type":"integer"}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"mixmax","displayName":"Mixmax","description":"Email productivity automation for Gmail: manage Mixmax code snippets and contacts (create, find, list).","auth":{"kind":"api-key","hint":"Mixmax API key, sent in the X-API-Token header."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.code.snippet","description":"Create a Mixmax code snippet with HTML content and optional syntax-highlighting metadata.","parameters":{"type":"object","properties":{"title":{"type":"string"},"html":{"type":"string"},"language":{"type":"string"},"background":{"type":"string"},"theme":{"type":"string"}},"required":["html"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.contact","description":"Create a Mixmax contact by email, with optional name and third-party enrichment.","parameters":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"},"enrich":{"type":"boolean"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"find.contact","description":"Search Mixmax contacts by email or name, optionally including linked Salesforce contacts.","parameters":{"type":"object","properties":{"query":{"type":"string"},"includeSalesforceContacts":{"type":"boolean"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"list.code.snippets","description":"List Mixmax code snippets.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"list.contacts","description":"List Mixmax contacts with optional filter and sort.","parameters":{"type":"object","properties":{"search":{"type":"string"},"sort":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"mixpanel","displayName":"Mixpanel","description":"Send product analytics events to Mixpanel and query stored event / profile data via the Service Account Query API.","auth":{"kind":"api-key","hint":"Mixpanel Project Token (for /track ingestion) plus Service Account username:secret (for the Query API). Configure API_HOST=api-eu.mixpanel.com for EU residency projects."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"events.track","description":"Send a single product event to Mixpanel /track. The Project Token, event name, distinct_id, and event properties are required by Mixpanel ingestion semantics.","parameters":{"type":"object","properties":{"event":{"type":"string","description":"Event name (e.g. \"Signup\", \"Purchase Completed\")."},"distinct_id":{"type":"string","description":"Stable identifier for the actor performing the event. Matches the Mixpanel profile distinct_id when profiles are also being written."},"event_properties":{"type":"object","description":"Extra event properties. Mixpanel reserved properties (token, time, $insert_id) are merged in by the adapter.","additionalProperties":true},"time":{"type":"integer","description":"Event timestamp in epoch seconds. Mixpanel rejects events older than 5 days for free projects."},"insert_id":{"type":"string","description":"Idempotency key for the event. Mixpanel deduplicates events with the same $insert_id within a 7-day window."}},"required":["event","distinct_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"profiles.set","description":"Set / overwrite properties on a Mixpanel user profile via /engage with the $set operation.","parameters":{"type":"object","properties":{"distinct_id":{"type":"string"},"properties":{"type":"object","description":"Profile properties to set.","additionalProperties":true}},"required":["distinct_id","properties"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.export","description":"Stream raw events from the Mixpanel Export API for a project + date range. Uses Service Account credentials via HTTP Basic over the Query API host.","parameters":{"type":"object","properties":{"project_id":{"type":"string","description":"Mixpanel Project ID."},"from_date":{"type":"string","description":"Inclusive UTC start date (YYYY-MM-DD)."},"to_date":{"type":"string","description":"Inclusive UTC end date (YYYY-MM-DD)."},"event":{"type":"array","description":"Optional list of event names to filter to.","items":{"type":"string"}},"where":{"type":"string","description":"Optional Mixpanel JQL-style filter expression."}},"required":["project_id","from_date","to_date"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"events.segmentation","description":"Aggregate counts / uniques for a single event over a date range. Returns a Mixpanel segmentation report.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"event":{"type":"string"},"from_date":{"type":"string"},"to_date":{"type":"string"},"unit":{"type":"string","description":"Granularity bucket size.","enum":["minute","hour","day","week","month"]},"type":{"type":"string","description":"Aggregation type.","enum":["general","unique","average"]},"on":{"type":"string","description":"Property expression to segment on (e.g. \"properties[\\\"plan\\\"]\")."}},"required":["project_id","event","from_date","to_date"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"profiles.query","description":"Query Mixpanel user profiles (Engage API) by selector / distinct_id. Returns a paginated list of profile documents.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"distinct_id":{"type":"string","description":"Optional exact distinct_id lookup."},"selector":{"type":"string","description":"Optional Mixpanel selector expression to filter profiles."},"page":{"type":"integer","description":"Zero-based page index when paginating."},"session_id":{"type":"string","description":"Engage pagination session id returned by the previous page. Required for page > 0."}},"required":["project_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"modelslab","displayName":"ModelsLab","description":"Submit text-to-image generations and fetch queued ModelsLab results.","auth":{"kind":"api-key","hint":"ModelsLab API key from modelslab.com/account/api-key."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"text.to.image","class":"mutation","description":"Submit a text-to-image generation. Poll images.status when ModelsLab returns processing.","parameters":{"type":"object","properties":{"prompt":{"type":"string"},"negative_prompt":{"type":"string"},"model_id":{"type":"string"},"width":{"type":"integer","minimum":256,"maximum":1024},"height":{"type":"integer","minimum":256,"maximum":1024},"num_inference_steps":{"type":"integer","minimum":20,"maximum":50},"guidance_scale":{"type":"number","minimum":1,"maximum":20},"samples":{"type":"integer","minimum":1,"maximum":4},"seed":{"type":"integer"},"safety_checker":{"type":"boolean"}},"required":["prompt"]},"cas":"none","externalEffect":true},{"name":"images.status","class":"read","description":"Fetch a queued image generation by request id.","parameters":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}}]},{"kind":"modjo","displayName":"Modjo","description":"Conversation intelligence platform. Export call records with transcripts and AI summaries, and list users and teams.","auth":{"kind":"api-key","hint":"Create an API key in Modjo (Administrator or Manager role required); copy it immediately as it is shown only once. Sent as the X-API-KEY header."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.export","description":"Retrieve a paginated list of calls with optional relations such as transcripts, AI summaries, and contacts.","parameters":{"type":"object","properties":{"page":{"type":"integer"},"perPage":{"type":"integer"},"transcript":{"type":"boolean"},"aiSummary":{"type":"boolean"},"contacts":{"type":"boolean"}},"required":["page","perPage"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.list","description":"Retrieve a paginated list of users in the Modjo workspace.","parameters":{"type":"object","properties":{"page":{"type":"integer"},"perPage":{"type":"integer"}},"required":["page","perPage"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"teams.list","description":"Retrieve a paginated list of teams in the Modjo workspace.","parameters":{"type":"object","properties":{"page":{"type":"integer"},"perPage":{"type":"integer"}},"required":["page","perPage"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"mollie","displayName":"Mollie","description":"Manage Mollie payments, orders, refunds, customers, and invoices. Automate payment processing and track payment statuses.","auth":{"kind":"api-key","hint":"Mollie API key (found in your Mollie dashboard under Developers → API keys)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"customers.create","description":"Create a Mollie customer with optional name, email, and metadata.","parameters":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"locale":{"type":"string"},"metadata":{"type":"object"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.search","description":"List or search Mollie customers with pagination.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"from":{"type":"string"},"sort":{"type":"string","enum":["name","-name","createdAt","-createdAt"]}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.create","description":"Create a Mollie order with order lines, billing address, and optional shipping address. Supports multiple payment methods and custom metadata.","parameters":{"type":"object","properties":{"amount":{"type":"string"},"currency":{"type":"string"},"orderNumber":{"type":"string"},"description":{"type":"string"},"customerId":{"type":"string"},"lines":{"type":"array","items":{"type":"object"}},"redirectUrl":{"type":"string"},"webhookUrl":{"type":"string"},"locale":{"type":"string"},"expiresAt":{"type":"string"},"testmode":{"type":"boolean"}},"required":["amount","currency","orderNumber"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.search","description":"Search Mollie orders with optional filtering by status and profile.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"status":{"type":"string","enum":["created","paid","authorized","canceled","shipping","completed","expired"]},"profileId":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"payments.create","description":"Create a Mollie payment with optional customer, mandate, and method restrictions. Supports description, metadata, and webhook configuration.","parameters":{"type":"object","properties":{"amount":{"type":"string"},"currency":{"type":"string"},"description":{"type":"string"},"customerId":{"type":"string"},"mandateId":{"type":"string"},"method":{"type":"string","enum":["creditcard","ideal","paypal","banktransfer","directdebit","kbc","belfius","girocard","eps","giropay","przelewy24","payip","klarnasliceit","klarnapaylater","klarnapaynow","klarnasliceithome","satispay","applepay","googlepay","twint","blik","voucher"]},"redirectUrl":{"type":"string"},"webhookUrl":{"type":"string"},"locale":{"type":"string"},"testmode":{"type":"boolean"}},"required":["amount","currency","description"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payments.search","description":"Search Mollie payments with optional status and profile filtering.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"status":{"type":"string","enum":["open","pending","authorized","canceled","failed","expired","paid"]},"profileId":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"refunds.create","description":"Create a refund for a Mollie payment with optional amount and description.","parameters":{"type":"object","properties":{"paymentId":{"type":"string"},"amount":{"type":"string"},"currency":{"type":"string"},"description":{"type":"string"}},"required":["paymentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"paymentlinks.create","description":"Create a Mollie payment link with optional fixed amount, billing address, and payment method restrictions.","parameters":{"type":"object","properties":{"amount":{"type":"string"},"currency":{"type":"string"},"description":{"type":"string"},"redirectUrl":{"type":"string"},"webhookUrl":{"type":"string"},"customerId":{"type":"string"},"locale":{"type":"string"},"method":{"type":"string"},"testmode":{"type":"boolean"},"reusable":{"type":"boolean"},"expiresAt":{"type":"string"}},"required":["amount","currency","description"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"monday","displayName":"monday.com","description":"Query and mutate monday.com boards, items, groups, and updates over the GraphQL v2 API.","auth":{"kind":"oauth2","authorizationUrl":"https://auth.monday.com/oauth2/authorize","tokenUrl":"https://auth.monday.com/oauth_ms/oauth/token","scopes":["me:read","boards:read","boards:write","workspaces:read","users:read","updates:read","updates:write","assets:read","tags:read","notifications:write"],"clientIdEnv":"MONDAY_OAUTH_CLIENT_ID","clientSecretEnv":"MONDAY_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"me.get","description":"Return the authenticated monday.com account holder.","parameters":{"type":"object","properties":{}},"requiredScopes":["me:read"],"class":"read"},{"name":"workspaces.list","description":"List workspaces the connected account can access.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1},"kind":{"type":"string","enum":["open","closed"]},"state":{"type":"string","enum":["active","archived","deleted","all"]}}},"requiredScopes":["workspaces:read"],"class":"read"},{"name":"boards.list","description":"List boards the connected account can read, optionally filtered by workspace, kind, or state.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1},"ids":{"type":"array","items":{"type":"string"}},"workspace_ids":{"type":"array","items":{"type":"string"}},"board_kind":{"type":"string","enum":["public","private","share"]},"state":{"type":"string","enum":["active","archived","deleted","all"]}}},"requiredScopes":["boards:read"],"class":"read"},{"name":"boards.get","description":"Fetch boards by id, including their groups and columns.","parameters":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}}},"required":["ids"]},"requiredScopes":["boards:read"],"class":"read"},{"name":"items.page","description":"Paginate items on a board using monday.com items_page cursor semantics.","parameters":{"type":"object","properties":{"boardId":{"type":"string","description":"Numeric board id as a string."},"limit":{"type":"integer","minimum":1,"maximum":500},"cursor":{"type":"string","description":"Opaque cursor returned by a previous items_page call."},"query_params":{"type":"object","description":"ItemsQuery filter (rules, operator, order_by), per monday.com schema."}},"required":["boardId"]},"requiredScopes":["boards:read"],"class":"read"},{"name":"items.get","description":"Fetch items by id with full column values.","parameters":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}}},"required":["ids"]},"requiredScopes":["boards:read"],"class":"read"},{"name":"updates.list","description":"List updates (comments) optionally scoped to a single item.","parameters":{"type":"object","properties":{"item_id":{"type":"string","description":"Item id to scope to. Omit for a global feed."},"limit":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}}},"requiredScopes":["updates:read"],"class":"read"},{"name":"items.create","description":"Create a new item on a board. column_values is a JSON map of column id → value, per monday.com column schema.","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"item_name":{"type":"string"},"group_id":{"type":"string"},"column_values":{"type":"object","description":"Column id → value map. monday accepts this as a JSON-encoded string; the runtime serializes it."},"create_labels_if_missing":{"type":"boolean"}},"required":["board_id","item_name"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"items.update_columns","description":"Change multiple column values on an existing item in a single call.","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"item_id":{"type":"string"},"column_values":{"type":"object","description":"Column id → new value map."},"create_labels_if_missing":{"type":"boolean"}},"required":["board_id","item_id","column_values"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"items.move_group","description":"Move an item from its current group into the target group on the same board.","parameters":{"type":"object","properties":{"item_id":{"type":"string"},"group_id":{"type":"string"}},"required":["item_id","group_id"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"items.archive","description":"Archive an item (recoverable, item remains in the board archive).","parameters":{"type":"object","properties":{"item_id":{"type":"string"}},"required":["item_id"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"items.delete","description":"Permanently delete an item from a board.","parameters":{"type":"object","properties":{"item_id":{"type":"string"}},"required":["item_id"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"groups.create","description":"Create a new group on a board, optionally positioned at top or bottom.","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"group_name":{"type":"string"},"position":{"type":"string","description":"before_all | after_all | <group_id> per monday schema."}},"required":["board_id","group_name"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"updates.create","description":"Post an update (comment) on an item, optionally as a reply to a parent update.","parameters":{"type":"object","properties":{"item_id":{"type":"string"},"body":{"type":"string","description":"Update body. monday accepts a subset of HTML for rich text."},"parent_id":{"type":"string","description":"Parent update id when replying to a thread."}},"required":["item_id","body"]},"requiredScopes":["updates:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"mongodb","displayName":"MongoDB","description":"Inspect MongoDB collections and indexes and run bounded structured document reads over a verified TLS connection.","auth":{"kind":"api-key","hint":"JSON with a public MongoDB host, database, user, password, optional port/auth source, and optional TLS CA. Verified TLS is mandatory."},"category":"database","defaultConsistencyModel":"authoritative","rateLimit":{"requests":120,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"mongodb.collections.list","class":"read","description":"List collections visible in the configured database.","parameters":{"type":"object","properties":{},"additionalProperties":false}},{"name":"mongodb.collections.describe","class":"read","description":"Read options and metadata for one collection.","parameters":{"type":"object","properties":{"collection":{"type":"string","minLength":1,"maxLength":120,"description":"Collection name."}},"required":["collection"],"additionalProperties":false}},{"name":"mongodb.indexes.list","class":"read","description":"List bounded index metadata for one collection.","parameters":{"type":"object","properties":{"collection":{"type":"string","minLength":1,"maxLength":120,"description":"Collection name."}},"required":["collection"],"additionalProperties":false}},{"name":"mongodb.documents.find","class":"read","description":"Read bounded documents using fixed scalar predicates, projection, and sort fields.","parameters":{"type":"object","properties":{"collection":{"type":"string","minLength":1,"maxLength":120,"description":"Collection name."},"filters":{"type":"array","maxItems":20,"items":{"type":"object","properties":{"field":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$"},"operator":{"type":"string","enum":["eq","ne","lt","lte","gt","gte"]},"value":{"type":["string","number","boolean","null"]}},"required":["field","operator","value"],"additionalProperties":false}},"fields":{"type":"array","minItems":1,"maxItems":64,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$"}},"includeId":{"type":"boolean","default":true},"sort":{"type":"array","maxItems":8,"items":{"type":"object","properties":{"field":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$"},"direction":{"type":"string","enum":["asc","desc"],"default":"asc"}},"required":["field"],"additionalProperties":false}},"limit":{"type":"integer","minimum":1,"maximum":1000,"default":100},"skip":{"type":"integer","minimum":0,"maximum":1000000,"default":0}},"required":["collection"],"additionalProperties":false}},{"name":"mongodb.documents.count","class":"read","description":"Count documents matching fixed scalar predicates within a bounded server execution time.","parameters":{"type":"object","properties":{"collection":{"type":"string","minLength":1,"maxLength":120,"description":"Collection name."},"filters":{"type":"array","maxItems":20,"items":{"type":"object","properties":{"field":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$"},"operator":{"type":"string","enum":["eq","ne","lt","lte","gt","gte"]},"value":{"type":["string","number","boolean","null"]}},"required":["field","operator","value"],"additionalProperties":false}}},"required":["collection"],"additionalProperties":false}}]},{"kind":"mycase","displayName":"MyCase","description":"Manage legal cases, clients, companies, leads, matters, activities, time, expenses, and notes in MyCase.","auth":{"kind":"oauth2","authorizationUrl":"https://auth.mycase.com/login_sessions/new","tokenUrl":"https://auth.mycase.com/tokens","scopes":[],"sendScopeParam":false,"clientIdEnv":"MYCASE_OAUTH_CLIENT_ID","clientSecretEnv":"MYCASE_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"cases.list","description":"List or incrementally synchronize legal cases.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."},"name":{"type":"string"},"case_number":{"type":"string"},"case_stage_id":{"type":"string"},"practice_area_id":{"type":"string"},"status":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cases.create","description":"Create a legal case.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cases.update","description":"Update a legal case.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"MyCase resource id."},"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["id","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"clients.list","description":"List or incrementally synchronize clients.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"clients.create","description":"Create a person/client record.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"clients.update","description":"Update a person/client record.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"MyCase resource id."},"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["id","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"companies.list","description":"List or incrementally synchronize companies.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."},"name":{"type":"string"},"email":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.create","description":"Create a company record.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"companies.update","description":"Update a company record.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"MyCase resource id."},"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["id","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"leads.list","description":"List or incrementally synchronize leads.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"},"status":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.create","description":"Create a lead.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"staff.list","description":"List firm staff who can own or participate in work.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"case-stages.list","description":"List case stages.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"case-stages.create","description":"Create a case stage.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"practice-areas.list","description":"List practice areas.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"practice-areas.create","description":"Create a practice area.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"referral-sources.list","description":"List referral sources.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"referral-sources.create","description":"Create a referral source.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"people-groups.list","description":"List people groups.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"locations.list","description":"List office and event locations.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."},"name":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"locations.create","description":"Create a location.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.list","description":"List or incrementally synchronize calendar events.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."},"start_date":{"type":"string"},"end_date":{"type":"string"},"case_id":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"events.create","description":"Create a calendar event.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.list","description":"List or incrementally synchronize tasks.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."},"due_date_start":{"type":"string"},"due_date_end":{"type":"string"},"case_id":{"type":"string"},"assignee_id":{"type":"string"},"completed":{"type":"boolean"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.create","description":"Create a task.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.list","description":"List logged calls.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."},"caller_id":{"type":"string"},"caller_type":{"type":"string","enum":["client","lead"]},"staff_id":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.create","description":"Log a call.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"time-entries.list","description":"List time entries.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."},"case_id":{"type":"string"},"staff_id":{"type":"string"},"start_date":{"type":"string"},"end_date":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"time-entries.create","description":"Create a time entry.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"expenses.list","description":"List case expenses.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."},"case_id":{"type":"string"},"staff_id":{"type":"string"},"start_date":{"type":"string"},"end_date":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"expenses.create","description":"Create a case expense.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"case-notes.create","description":"Add a note to a case.","parameters":{"type":"object","properties":{"caseId":{"type":"string","description":"MyCase resource id."},"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["caseId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"client-notes.create","description":"Add a note to a client.","parameters":{"type":"object","properties":{"clientId":{"type":"string","description":"MyCase resource id."},"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["clientId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"company-notes.create","description":"Add a note to a company.","parameters":{"type":"object","properties":{"companyId":{"type":"string","description":"MyCase resource id."},"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["companyId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"custom-fields.create","description":"Create a custom field definition.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"mysql","displayName":"MySQL","description":"Inspect schemas and run bounded parameterized reads or approved compare-and-swap writes against MySQL over verified TLS.","auth":{"kind":"api-key","hint":"JSON with host, port, user, password, optional database, and optional tlsCa. TLS and public network targets are mandatory."},"defaultConsistencyModel":"authoritative","category":"database","rateLimit":{"requests":120,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"mysql.databases.list","class":"read","description":"List databases visible to the connected MySQL user.","parameters":{"type":"object","properties":{},"additionalProperties":false}},{"name":"mysql.tables.list","class":"read","description":"List base tables and views in one database.","parameters":{"type":"object","properties":{"database":{"type":"string","minLength":1,"maxLength":64,"description":"Database name; defaults to the connection database."}},"additionalProperties":false}},{"name":"mysql.tables.describe","class":"read","description":"Read columns, types, nullability, defaults, and keys for one table.","parameters":{"type":"object","properties":{"database":{"type":"string","minLength":1,"maxLength":64,"description":"Database name; defaults to the connection database."},"table":{"type":"string","minLength":1,"maxLength":64,"description":"Table name."}},"required":["table"],"additionalProperties":false}},{"name":"mysql.query","class":"read","description":"Run one parameterized SELECT, SHOW, DESCRIBE, or EXPLAIN statement inside a read-only transaction.","parameters":{"type":"object","properties":{"statement":{"type":"string","minLength":1,"maxLength":1048576},"parameters":{"type":"array","maxItems":1000,"items":{"type":["string","number","boolean","null"]},"description":"Values bound to ? placeholders in order."}},"required":["statement"],"additionalProperties":false}},{"name":"mysql.execute","class":"mutation","description":"Run one approved parameterized INSERT, UPDATE, DELETE, or REPLACE statement and commit only when the affected-row count matches the caller expectation.","parameters":{"type":"object","properties":{"statement":{"type":"string","minLength":1,"maxLength":1048576},"parameters":{"type":"array","maxItems":1000,"items":{"type":["string","number","boolean","null"]},"description":"Values bound to ? placeholders in order."},"expectedAffectedRows":{"type":"integer","minimum":0,"maximum":10000,"description":"Commit only when MySQL reports exactly this many affected rows."}},"required":["statement","expectedAffectedRows"],"additionalProperties":false},"cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"n8n","displayName":"n8n","description":"Run, inspect, and manage n8n workflows against a self-hosted or n8n.cloud instance. Trigger workflows from agents, poll executions, and list workflows.","auth":{"kind":"api-key","hint":"n8n API key from Settings > API. Sent as `X-N8N-API-KEY: <key>`. The connection also requires the instance URL (e.g. https://workspace.app.n8n.cloud or https://n8n.example.com)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"workflows.list","description":"List workflows on the n8n instance. Returns active and inactive workflows.","parameters":{"type":"object","properties":{"active":{"type":"boolean","description":"Filter to only active or only inactive workflows."},"tags":{"type":"string","description":"Comma-separated tag names to filter by."},"limit":{"type":"integer","minimum":1,"maximum":250},"cursor":{"type":"string","description":"Pagination cursor returned by a prior call."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workflows.get","description":"Read a single n8n workflow by id, including its node graph and settings.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workflows.activate","description":"Activate an n8n workflow so its triggers fire.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflows.deactivate","description":"Deactivate an n8n workflow.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"executions.list","description":"List recent executions across workflows. Filter by workflow id, status, and pagination cursor.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"},"status":{"type":"string","enum":["error","success","waiting"]},"limit":{"type":"integer","minimum":1,"maximum":250},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"executions.get","description":"Read a single execution by id, including node outputs and final status. Use this after `workflows.execute` resolves to inspect the run.","parameters":{"type":"object","properties":{"executionId":{"type":"string"},"includeData":{"type":"boolean","description":"Include full node-by-node output payloads."}},"required":["executionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"webhooks.trigger","description":"POST a JSON payload to an n8n webhook trigger node. `webhookPath` is the path the workflow registered (e.g. `webhook/my-trigger`). Use this to trigger workflows that start with a Webhook node.","parameters":{"type":"object","properties":{"webhookPath":{"type":"string"},"payload":{"type":"object"}},"required":["webhookPath","payload"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflows.create","description":"Create a new n8n workflow. `definition` must include the full workflow JSON shape n8n expects (name, nodes, connections, settings). Newly-created workflows start inactive.","parameters":{"type":"object","properties":{"definition":{"type":"object","description":"Full workflow definition (name, nodes, connections, settings, etc.)."}},"required":["definition"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflows.update","description":"Replace an n8n workflow definition. `definition` is the full workflow JSON (nodes, connections, settings) that overwrites the existing record.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"},"definition":{"type":"object","description":"Full workflow definition replacing the current one."}},"required":["workflowId","definition"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflows.delete","description":"Permanently delete an n8n workflow by id.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"executions.delete","description":"Delete a past n8n execution record by id.","parameters":{"type":"object","properties":{"executionId":{"type":"string"}},"required":["executionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"executions.stop","description":"Stop a running n8n execution. Returns the final execution record once the runtime acknowledges the stop signal.","parameters":{"type":"object","properties":{"executionId":{"type":"string"}},"required":["executionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"netlify","displayName":"Netlify","description":"Inspect Netlify sites and deploys, trigger build hooks, manage environment variables, and drive deploy lifecycle (lock / unlock / restore / delete).","auth":{"kind":"oauth2","authorizationUrl":"https://app.netlify.com/authorize","tokenUrl":"https://api.netlify.com/oauth/token","scopes":[],"clientIdEnv":"NETLIFY_OAUTH_CLIENT_ID","clientSecretEnv":"NETLIFY_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"user.get","description":"Read the authenticated Netlify user (id, email, default account).","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.list","description":"List Netlify accounts (teams) the authenticated user belongs to.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sites.list","description":"List Netlify sites visible to the authenticated user, optionally filtered by name or account.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Filter by site name (subdomain)."},"filter":{"type":"string","enum":["all","owner","guest"]},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sites.get","description":"Read a single Netlify site by id.","parameters":{"type":"object","properties":{"site_id":{"type":"string","description":"Netlify site id or custom domain."}},"required":["site_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sites.deploys.list","description":"List deploys for a site (most recent first).","parameters":{"type":"object","properties":{"site_id":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}},"required":["site_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"deploys.get","description":"Read a single deploy by id.","parameters":{"type":"object","properties":{"deploy_id":{"type":"string"}},"required":["deploy_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sites.build-hooks.list","description":"List build hooks configured for a site.","parameters":{"type":"object","properties":{"site_id":{"type":"string"}},"required":["site_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sites.env.list","description":"List environment variables configured for a site within an account.","parameters":{"type":"object","properties":{"account_id":{"type":"string","description":"Netlify account (team) slug or id."},"site_id":{"type":"string","description":"Site id to scope env vars to."},"context_name":{"type":"string","enum":["all","dev","branch-deploy","deploy-preview","production"],"description":"Optional deploy context filter."}},"required":["account_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sites.env.get","description":"Read a single environment variable by key.","parameters":{"type":"object","properties":{"account_id":{"type":"string"},"key":{"type":"string"},"site_id":{"type":"string"}},"required":["account_id","key"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.list","description":"List forms across the sites the user can access (or scoped to a single site).","parameters":{"type":"object","properties":{"site_id":{"type":"string","description":"Optional — when present scopes the listing to one site."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sites.create","description":"Create a new Netlify site under an account.","parameters":{"type":"object","properties":{"account_slug":{"type":"string","description":"Account (team) slug under which to create the site."},"fields":{"type":"object","description":"Site creation payload (name, custom_domain, repo, build_settings, etc.).","properties":{"name":{"type":"string"},"custom_domain":{"type":"string"},"password":{"type":"string"},"force_ssl":{"type":"boolean"},"repo":{"type":"object"}}}},"required":["account_slug","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sites.update","description":"Patch a Netlify site (name, custom_domain, build_settings, …).","parameters":{"type":"object","properties":{"site_id":{"type":"string"},"fields":{"type":"object","properties":{"name":{"type":"string"},"custom_domain":{"type":"string"},"password":{"type":"string"},"force_ssl":{"type":"boolean"},"build_settings":{"type":"object"},"processing_settings":{"type":"object"}}}},"required":["site_id","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"sites.delete","description":"Delete a Netlify site. Permanent — removes all deploys and DNS records owned by the site.","parameters":{"type":"object","properties":{"site_id":{"type":"string"}},"required":["site_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sites.build-hooks.trigger","description":"Trigger a Netlify build hook to start a new deploy. `hook_id` is the build-hook id returned by sites.build-hooks.list.","parameters":{"type":"object","properties":{"site_id":{"type":"string"},"hook_id":{"type":"string"},"trigger_branch":{"type":"string","description":"Optional override of the branch the build hook builds."},"trigger_title":{"type":"string","description":"Optional human-readable label written into the deploy log."}},"required":["site_id","hook_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sites.build-hooks.create","description":"Create a new build hook for a site.","parameters":{"type":"object","properties":{"site_id":{"type":"string"},"fields":{"type":"object","properties":{"title":{"type":"string"},"branch":{"type":"string"}},"required":["title"]}},"required":["site_id","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sites.build-hooks.delete","description":"Delete a build hook from a site.","parameters":{"type":"object","properties":{"site_id":{"type":"string"},"hook_id":{"type":"string"}},"required":["site_id","hook_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deploys.restore","description":"Restore a previous deploy to be the published deploy for its site.","parameters":{"type":"object","properties":{"site_id":{"type":"string"},"deploy_id":{"type":"string"}},"required":["site_id","deploy_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deploys.lock","description":"Lock the current published deploy so future deploys do not auto-publish.","parameters":{"type":"object","properties":{"deploy_id":{"type":"string"}},"required":["deploy_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deploys.unlock","description":"Unlock a deploy so subsequent successful deploys can auto-publish.","parameters":{"type":"object","properties":{"deploy_id":{"type":"string"}},"required":["deploy_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deploys.cancel","description":"Cancel an in-progress deploy.","parameters":{"type":"object","properties":{"deploy_id":{"type":"string"}},"required":["deploy_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deploys.delete","description":"Delete a non-published deploy. Netlify rejects deleting the currently-published deploy.","parameters":{"type":"object","properties":{"deploy_id":{"type":"string"}},"required":["deploy_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sites.env.create","description":"Create one or more environment variables on an account, optionally scoped to a single site and contexts.","parameters":{"type":"object","properties":{"account_id":{"type":"string"},"site_id":{"type":"string","description":"Optional — when present, scopes the new vars to one site."},"variables":{"type":"array","description":"Array of env-var entries to create.","items":{"type":"object","properties":{"key":{"type":"string"},"values":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"context":{"type":"string","enum":["all","dev","branch-deploy","deploy-preview","production"]},"context_parameter":{"type":"string"}},"required":["value","context"]}},"is_secret":{"type":"boolean"},"scopes":{"type":"array","items":{"type":"string","enum":["builds","functions","runtime","post-processing"]}}},"required":["key","values"]}}},"required":["account_id","variables"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sites.env.update","description":"Update an existing environment variable (replace its values + metadata).","parameters":{"type":"object","properties":{"account_id":{"type":"string"},"key":{"type":"string"},"site_id":{"type":"string"},"fields":{"type":"object","properties":{"key":{"type":"string"},"values":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"context":{"type":"string"},"context_parameter":{"type":"string"}},"required":["value","context"]}},"is_secret":{"type":"boolean"},"scopes":{"type":"array","items":{"type":"string"}}}}},"required":["account_id","key","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"sites.env.delete","description":"Delete an environment variable by key from an account (optionally scoped to a single site).","parameters":{"type":"object","properties":{"account_id":{"type":"string"},"key":{"type":"string"},"site_id":{"type":"string"}},"required":["account_id","key"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"netsuite","displayName":"NetSuite","description":"Query SuiteAnalytics and read or create NetSuite customers, vendors, invoices, and vendor bills.","auth":{"kind":"api-key","hint":"NetSuite OAuth 2.0 access token. Connection metadata must include the account-specific REST base URL."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"suiteql.query","description":"Run a SuiteQL query. Use a bounded WHERE clause and page with limit/offset.","parameters":{"type":"object","properties":{"query":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":1000},"offset":{"type":"integer","minimum":0}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.list","description":"List customer records.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"q":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"vendors.list","description":"List vendor records.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"q":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"invoices.get","description":"Read an invoice by internal id.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"vendor-bills.get","description":"Read a vendor bill by internal id.","parameters":{"type":"object","properties":{"vendorBillId":{"type":"string"}},"required":["vendorBillId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"neverbounce","displayName":"NeverBounce","description":"Verify email deliverability with the NeverBounce API.","auth":{"kind":"api-key","hint":"NeverBounce API key from Apps > API in the NeverBounce dashboard."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"verify.email.address","description":"Verify one email address and return deliverability status such as valid, invalid, disposable, catch-all, or unknown.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address to verify."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"nifty","displayName":"Nifty","description":"Project management made simple. Create and manage tasks in Nifty.","auth":{"kind":"oauth2","authorizationUrl":"https://app.nifty.com/oauth/authorize","tokenUrl":"https://api.nifty.com/oauth/token","scopes":["tasks:write","tasks:read"],"clientIdEnv":"NIFTY_OAUTH_CLIENT_ID","clientSecretEnv":"NIFTY_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tasks.create","description":"Create a task in Nifty.","parameters":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"assignee_id":{"type":"string"},"status":{"type":"string"},"priority":{"type":"string"},"due_date":{"type":"string"}},"required":["title"]},"requiredScopes":["tasks:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update an existing task in Nifty. `taskId` is required; any provided field replaces the current value. Use `assignee_ids: []` to clear assignees.","parameters":{"type":"object","properties":{"taskId":{"type":"string","description":"Nifty task id (URL path)."},"name":{"type":"string"},"description":{"type":"string"},"milestone_id":{"type":"string"},"assignee_ids":{"type":"array","items":{"type":"string"}},"due_date":{"type":"string"},"status":{"type":"string"}},"required":["taskId"]},"requiredScopes":["tasks:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Create a comment on a Nifty task. `object_id` is the task id; `object_type` is fixed to `Task`.","parameters":{"type":"object","properties":{"object_id":{"type":"string","description":"Task id to attach the comment to."},"content":{"type":"string","description":"Comment body."}},"required":["object_id","content"]},"requiredScopes":["tasks:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"ninjapipe","displayName":"NinjaPipe","description":"Connect to NinjaPipe and manage contacts, companies, deals, tasks, projects, products, and orders.","auth":{"kind":"api-key","hint":"NinjaPipe API key from Workspace Settings > API."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.list","description":"List contacts in NinjaPipe.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.get","description":"Get a contact by ID.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create a new contact.","parameters":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"company":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"},"status":{"type":"string"},"owner":{"type":"string"},"notes":{"type":"string"},"customFields":{"type":"object"}},"required":["firstName","lastName","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update a contact.","parameters":{"type":"object","properties":{"id":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"company":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"},"status":{"type":"string"},"owner":{"type":"string"},"notes":{"type":"string"},"customFields":{"type":"object"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.delete","description":"Delete a contact.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.upsert","description":"Upsert a contact by email.","parameters":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"},"status":{"type":"string"},"owner":{"type":"string"},"notes":{"type":"string"},"customFields":{"type":"object"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"companies.list","description":"List companies in NinjaPipe.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.get","description":"Get a company by ID.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.create","description":"Create a new company.","parameters":{"type":"object","properties":{"name":{"type":"string"},"industry":{"type":"string"},"website":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"},"owner":{"type":"string"},"notes":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"companies.update","description":"Update a company.","parameters":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"industry":{"type":"string"},"website":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"},"owner":{"type":"string"},"notes":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"companies.delete","description":"Delete a company.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deals.list","description":"List deals in NinjaPipe.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"deals.get","description":"Get a deal by ID.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"deals.create","description":"Create a new deal.","parameters":{"type":"object","properties":{"title":{"type":"string"},"value":{"type":"number"},"company":{"type":"string"},"owner":{"type":"string"},"status":{"type":"string"}},"required":["title","value"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deals.update","description":"Update a deal.","parameters":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"value":{"type":"number"},"company":{"type":"string"},"owner":{"type":"string"},"status":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"deals.delete","description":"Delete a deal.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.list","description":"List tasks in NinjaPipe.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.get","description":"Get a task by ID.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.create","description":"Create a new task.","parameters":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"assigneeId":{"type":"string"},"dueDate":{"type":"string"},"parentId":{"type":"string"},"priority":{"type":"string"}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update a task.","parameters":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"assigneeId":{"type":"string"},"dueDate":{"type":"string"},"parentId":{"type":"string"},"priority":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.delete","description":"Delete a task.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.list","description":"List projects in NinjaPipe.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.get","description":"Get a project by ID.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.create","description":"Create a new project.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"owner":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.update","description":"Update a project.","parameters":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"owner":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"projects.delete","description":"Delete a project.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.list","description":"List products in NinjaPipe.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.get","description":"Get a product by ID.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.create","description":"Create a new product.","parameters":{"type":"object","properties":{"sku":{"type":"string"},"name":{"type":"string"},"price":{"type":"number"},"description":{"type":"string"}},"required":["sku","name","price"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.update","description":"Update a product.","parameters":{"type":"object","properties":{"id":{"type":"string"},"sku":{"type":"string"},"name":{"type":"string"},"price":{"type":"number"},"description":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"products.delete","description":"Delete a product.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.list","description":"List orders in NinjaPipe.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.get","description":"Get an order by ID.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.create","description":"Create a new order.","parameters":{"type":"object","properties":{"customerName":{"type":"string"},"customerEmail":{"type":"string"},"totalAmount":{"type":"number"}},"required":["customerName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.update","description":"Update an order.","parameters":{"type":"object","properties":{"id":{"type":"string"},"customerName":{"type":"string"},"customerEmail":{"type":"string"},"totalAmount":{"type":"number"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"orders.delete","description":"Delete an order.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"nocodb","displayName":"NocoDB","description":"Create, read, update, delete, and search records in NocoDB tables.","auth":{"kind":"api-key","hint":"NocoDB API token."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.search","description":"Search records in a NocoDB table.","parameters":{"type":"object","properties":{"tableId":{"type":"string","description":"The table ID to search in."},"whereCondition":{"type":"string","description":"Filter condition for records."},"limit":{"type":"integer","description":"Maximum number of records to return."},"sort":{"type":"string","description":"Comma-separated field names for sorting."}},"required":["tableId","limit"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.get","description":"Retrieve a single record from a NocoDB table by record ID.","parameters":{"type":"object","properties":{"tableId":{"type":"string","description":"The table ID."},"recordId":{"type":"string","description":"The unique record ID."}},"required":["tableId","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.create","description":"Create a new record in a NocoDB table.","parameters":{"type":"object","properties":{"tableId":{"type":"string","description":"The table ID."},"fields":{"type":"object","description":"Field values for the new record."}},"required":["tableId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Update an existing record in a NocoDB table.","parameters":{"type":"object","properties":{"tableId":{"type":"string","description":"The table ID."},"recordId":{"type":"string","description":"The unique record ID to update."},"fields":{"type":"object","description":"Fields to update."}},"required":["tableId","recordId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.delete","description":"Delete a record from a NocoDB table.","parameters":{"type":"object","properties":{"tableId":{"type":"string","description":"The table ID."},"recordId":{"type":"string","description":"The unique record ID to delete."}},"required":["tableId","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tables.list","description":"List tables in a NocoDB base/project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"The base/project ID to list tables for."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tables.create","description":"Create a new table inside a NocoDB base/project. `definition` carries the table schema (table_name, title, columns).","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"The base/project ID to create the table in."},"definition":{"type":"object","description":"Table definition (table_name, title, columns, etc.)."}},"required":["projectId","definition"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"fields.create","description":"Add a column/field to an existing NocoDB table. `column` describes the new field (column_name, title, uidt, etc.).","parameters":{"type":"object","properties":{"tableId":{"type":"string","description":"The table ID to add the column to."},"column":{"type":"object","description":"Column definition (column_name, title, uidt, etc.)."}},"required":["tableId","column"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.bulk-create","description":"Insert many records into a NocoDB table in one request. `records` is an array of field-value objects.","parameters":{"type":"object","properties":{"tableId":{"type":"string","description":"The table ID to insert into."},"records":{"type":"array","description":"Array of record objects to insert.","items":{"type":"object"}}},"required":["tableId","records"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"nooks","displayName":"Nooks","description":"AI sales engagement and dialer platform. Read call records, prospects, and accounts from the Nooks Sequencing API.","auth":{"kind":"api-key","hint":"Create a long-lived API key (nooks-api-...) in Nooks Developer Settings -> API Keys. Sent as the Authorization: Bearer header."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.list","description":"List call records, with optional filters by prospect, account, or owner.","parameters":{"type":"object","properties":{"filter_prospect_id":{"type":"string"},"filter_account_id":{"type":"string"},"filter_owner_id":{"type":"string"},"include":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.get","description":"Get a single call record by its id.","parameters":{"type":"object","properties":{"id":{"type":"string"},"include":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"prospects.list","description":"List prospects (contacts), with optional filters by name, email, or account.","parameters":{"type":"object","properties":{"filter_name":{"type":"string"},"filter_primaryEmail":{"type":"string"},"filter_account_id":{"type":"string"},"include":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.list","description":"List accounts, with optional filters by name, domain, or CRM id.","parameters":{"type":"object","properties":{"filter_name":{"type":"string"},"filter_domain":{"type":"string"},"filter_crmId":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"prospects.sync","description":"Sync prospects from the connected CRM into Nooks.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"notion","displayName":"Notion","description":"Query and manipulate Notion databases, pages, and blocks.","auth":{"kind":"oauth2","authorizationUrl":"https://api.notion.com/v1/oauth/authorize","tokenUrl":"https://api.notion.com/v1/oauth/token","scopes":[],"clientIdEnv":"NOTION_OAUTH_CLIENT_ID","clientSecretEnv":"NOTION_OAUTH_CLIENT_SECRET","tokenClientAuthMethod":"client_secret_basic","extraAuthParams":{"owner":"user"}},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"databases.retrieve","description":"Retrieve a Notion database.","parameters":{"type":"object","properties":{"databaseId":{"type":"string"}},"required":["databaseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"databases.query","description":"Query a Notion database with filters and sorting.","parameters":{"type":"object","properties":{"databaseId":{"type":"string"},"filter":{"type":"object"},"sorts":{"type":"array"},"pageSize":{"type":"integer"}},"required":["databaseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pages.create","description":"Create a new Notion page.","parameters":{"type":"object","properties":{"parentDatabaseId":{"type":"string"},"title":{"type":"string"},"properties":{"type":"object"}},"required":["parentDatabaseId","properties"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pages.retrieve","description":"Retrieve a Notion page.","parameters":{"type":"object","properties":{"pageId":{"type":"string"}},"required":["pageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pages.update","description":"Update a Notion page properties.","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"properties":{"type":"object"}},"required":["pageId","properties"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"pages.archive","description":"Archive a Notion page.","parameters":{"type":"object","properties":{"pageId":{"type":"string"}},"required":["pageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"blocks.retrieve","description":"Retrieve a Notion block.","parameters":{"type":"object","properties":{"blockId":{"type":"string"}},"required":["blockId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"blocks.children","description":"Retrieve all children blocks of a block or page.","parameters":{"type":"object","properties":{"blockId":{"type":"string"},"pageSize":{"type":"integer"}},"required":["blockId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"blocks.append","description":"Append blocks as children of a page or block.","parameters":{"type":"object","properties":{"blockId":{"type":"string"},"children":{"type":"array"}},"required":["blockId","children"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Add a comment to a page or block.","parameters":{"type":"object","properties":{"blockId":{"type":"string"},"richText":{"type":"array"}},"required":["blockId","richText"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.retrieve","description":"Retrieve comments on a block.","parameters":{"type":"object","properties":{"blockId":{"type":"string"},"pageSize":{"type":"integer"}},"required":["blockId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.list","description":"List users in the connected Notion workspace.","parameters":{"type":"object","properties":{"startCursor":{"type":"string","description":"Pagination cursor returned by a prior call."},"pageSize":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"blocks.update","description":"Update an existing Notion block. `content` carries the type-specific fields (e.g. { paragraph: { rich_text: [...] } }) Notion expects.","parameters":{"type":"object","properties":{"blockId":{"type":"string"},"content":{"type":"object","description":"Block content patch (type-specific fields keyed by block type)."}},"required":["blockId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"blocks.delete","description":"Delete a Notion block (moves it to trash).","parameters":{"type":"object","properties":{"blockId":{"type":"string"}},"required":["blockId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"databases.create","description":"Create a new Notion database underneath a parent page.","parameters":{"type":"object","properties":{"parentPageId":{"type":"string","description":"Parent page id under which to create the database."},"title":{"type":"array","description":"Notion rich_text array used as the database title."},"properties":{"type":"object","description":"Schema map — property name → Notion property schema."}},"required":["parentPageId","title","properties"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"databases.update","description":"Update a database title and/or schema.","parameters":{"type":"object","properties":{"databaseId":{"type":"string"},"title":{"type":"array","description":"Optional new rich_text title."},"properties":{"type":"object","description":"Optional partial schema update."}},"required":["databaseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"ntfy","displayName":"Ntfy","description":"Send push notifications to Ntfy topics.","auth":{"kind":"api-key","hint":"Ntfy server URL and optional access token."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"send.notification","description":"Send a notification to an Ntfy topic.","parameters":{"type":"object","properties":{"topic":{"type":"string","description":"The topic/channel to send to"},"message":{"type":"string","description":"The message body"},"title":{"type":"string","description":"Optional notification title"},"priority":{"type":"string","description":"Priority level (1-5, default 3)"},"tags":{"type":"object","description":"Optional tags object"},"icon":{"type":"string","description":"Optional icon URL"},"actions":{"type":"string","description":"Optional action buttons JSON"},"click":{"type":"string","description":"Optional click URL"},"delay":{"type":"string","description":"Optional delay specification"}},"required":["topic","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"ocean-io","displayName":"Ocean.io","description":"Lookalike B2B company and people search plus firmographic and contact enrichment. Build target lists from an ideal customer profile and enrich records.","auth":{"kind":"api-key","hint":"API token from Settings -> API tokens. Sent as the X-Api-Token header."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"companies.search","description":"Search/lookalike companies by filters (location, size, industry, technologies) and/or seed lookalike domains.","parameters":{"type":"object","properties":{"companiesFilters":{"type":"object"},"lookalikeDomains":{"type":"array","items":{"type":"string"}},"size":{"type":"integer"},"searchAfter":{"type":"string"}},"required":["size"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"people.search","description":"Search people by persona filters (seniority, department) optionally scoped by company filters.","parameters":{"type":"object","properties":{"peopleFilters":{"type":"object"},"companiesFilters":{"type":"object"},"size":{"type":"integer"},"searchAfter":{"type":"string"}},"required":["size"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.enrich","description":"Match one company against Ocean's database and return firmographic, technographic, and funding data. Costs 0.1 credits per result.","parameters":{"type":"object","properties":{"company":{"type":"object"}},"required":["company"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"people.enrich","description":"Match one person against Ocean's database and return profile data; optionally trigger asynchronous email/phone reveal via webhook. Costs 0.1 credits per result.","parameters":{"type":"object","properties":{"person":{"type":"object"},"revealEmails":{"type":"object"}},"required":["person"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"companies.autocomplete","description":"Type-ahead autocomplete for company name or domain, useful for picking seed companies for a lookalike search.","parameters":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"odoo","displayName":"Odoo","description":"Search, create, and update records in Odoo.","auth":{"kind":"api-key","hint":"Odoo API key. Also configure base URL, database name, and username at connection time."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.search_read","description":"Search and read records from an Odoo model using domain filters.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model name (e.g., res.partner, sale.order)"},"domain":{"type":"array","description":"List of domain criteria. Each criterion is [field, operator, value]."},"fields":{"type":"array","description":"List of field names to return. If empty, returns all fields."},"limit":{"type":"integer","description":"Maximum number of records to return."},"offset":{"type":"integer","description":"Number of records to skip."}},"required":["model"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.get","description":"Read a single record by ID.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model name"},"recordId":{"type":"integer","description":"Record ID"},"fields":{"type":"array","description":"List of field names to return."}},"required":["model","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.create","description":"Create a new record in an Odoo model.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model name"},"values":{"type":"object","description":"Field names and values for the new record"}},"required":["model","values"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Update an existing record.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model name"},"recordId":{"type":"integer","description":"Record ID"},"values":{"type":"object","description":"Field names and values to update"}},"required":["model","recordId","values"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.delete","description":"Delete a record.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model name"},"recordId":{"type":"integer","description":"Record ID"}},"required":["model","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"models.search","description":"Search for record IDs matching a domain filter.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model name"},"domain":{"type":"array","description":"List of domain criteria. Each criterion is [field, operator, value]."},"limit":{"type":"integer","description":"Maximum number of records to return."},"offset":{"type":"integer","description":"Number of records to skip."}},"required":["model"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"models.count","description":"Count records matching a domain filter.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model name"},"domain":{"type":"array","description":"List of domain criteria. Each criterion is [field, operator, value]."}},"required":["model"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.copy","description":"Duplicate an existing Odoo record. Returns the new record id.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model name"},"recordId":{"type":"integer","description":"Record ID to duplicate"}},"required":["model","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.unlink_batch","description":"Delete multiple records of a model in one call.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model name"},"recordIds":{"type":"array","description":"List of record IDs to delete."}},"required":["model","recordIds"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"fields.set","description":"Partial-update a single field on a record. `values` is the {fieldName: value} pair; using a one-key map keeps the wire payload identical to records.update so the existing /write endpoint applies.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model name"},"recordId":{"type":"integer","description":"Record ID"},"values":{"type":"object","description":"Single-key object: {fieldName: newValue}."}},"required":["model","recordId","values"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflow.action","description":"Trigger an Odoo workflow action (e.g. action_confirm, action_cancel, action_done) on a record by invoking the named method.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model name"},"recordId":{"type":"integer","description":"Record ID to act on"},"action":{"type":"string","description":"Workflow method name (e.g. action_confirm)."}},"required":["model","recordId","action"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"okta","displayName":"Okta","description":"Manage Okta users, lifecycle state, groups, memberships, and system-log events.","auth":{"kind":"api-key","hint":"Okta API token. Set domain to the full HTTPS URL of the Okta organization."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.list","description":"List or search users in the Okta organization.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200},"after":{"type":"string"},"search":{"type":"string","description":"Okta Users API search expression."},"filter":{"type":"string","description":"Okta Users API filter expression."},"q":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.get","description":"Read one user by id or login.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"Okta user id or login. Email addresses are accepted as logins."}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.find-by-email","description":"Read a user whose Okta login is the supplied email address.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.list","description":"List or search Okta groups.","parameters":{"type":"object","properties":{"q":{"type":"string"},"filter":{"type":"string"},"after":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":10000}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.users.list","description":"List users assigned to one Okta group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"Okta group id."}},"required":["groupId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"system.logs.list","description":"Read Okta System Log events for audit and synchronization.","parameters":{"type":"object","properties":{"since":{"type":"string","description":"ISO 8601 lower timestamp bound."},"until":{"type":"string","description":"ISO 8601 upper timestamp bound."},"filter":{"type":"string"},"q":{"type":"string"},"after":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":1000},"sortOrder":{"type":"string","enum":["ASCENDING","DESCENDING"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.create","description":"Create an Okta user from a provider-native profile object.","parameters":{"type":"object","properties":{"profile":{"type":"object","description":"Okta user profile. login and email are required by Okta."},"activate":{"type":"boolean"}},"required":["profile"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"users.update","description":"Update an Okta user profile.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"Okta user id or login. Email addresses are accepted as logins."},"profile":{"type":"object"}},"required":["userId","profile"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"users.activate","description":"Activate an Okta user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"Okta user id or login. Email addresses are accepted as logins."},"sendEmail":{"type":"boolean"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.deactivate","description":"Deactivate an Okta user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"Okta user id or login. Email addresses are accepted as logins."},"sendEmail":{"type":"boolean"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.suspend","description":"Suspend an Okta user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"Okta user id or login. Email addresses are accepted as logins."}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.unsuspend","description":"Unsuspend an Okta user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"Okta user id or login. Email addresses are accepted as logins."}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"groups.create","description":"Create an Okta group.","parameters":{"type":"object","properties":{"profile":{"type":"object","description":"Group profile containing at least name."}},"required":["profile"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"groups.update","description":"Update an Okta group profile.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"Okta group id."},"profile":{"type":"object"}},"required":["groupId","profile"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"groups.users.add","description":"Add a user to an Okta group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"Okta group id."},"userId":{"type":"string","description":"Okta user id or login. Email addresses are accepted as logins."}},"required":["groupId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"groups.users.remove","description":"Remove a user from an Okta group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"Okta group id."},"userId":{"type":"string","description":"Okta user id or login. Email addresses are accepted as logins."}},"required":["groupId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"omni-co","displayName":"Omni","description":"Query Omni dashboards and documents, create schedules, and generate queries with natural language.","auth":{"kind":"api-key","hint":"Omni API key."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"documents.create","description":"Create a document in Omni.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"The name of the document"},"folderPath":{"type":"string","description":"The destination folder path"},"scope":{"type":"string","description":"Optional sharing scope for the document"}},"required":["name","folderPath"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.delete","description":"Delete a document from Omni.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"The ID of the document to delete"}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"documents.move","description":"Move a document to a different folder.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"The ID of the document"},"folderPath":{"type":"string","description":"The destination folder path"}},"required":["documentId","folderPath"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"queries.run","description":"Run a query against a dashboard.","parameters":{"type":"object","properties":{"identifier":{"type":"string","description":"The dashboard identifier"},"query":{"type":"object","description":"The query object to run"},"limit":{"type":"integer","description":"Number of rows to return (defaults to 1000)"},"cache":{"type":"string","description":"Optional cache policy"},"formatResults":{"type":"boolean","description":"Apply formatting to numeric and currency values"},"resultType":{"type":"string","description":"Format of query results"},"planOnly":{"type":"boolean","description":"Return query execution plan without running"},"userId":{"type":"string","description":"Optional UUID to run query as specific user"}},"required":["identifier","query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"queries.generate","description":"Generate a query from natural language description.","parameters":{"type":"object","properties":{"identifier":{"type":"string","description":"The dashboard identifier"},"prompt":{"type":"string","description":"Natural language description of the query"},"currentTopicName":{"type":"string","description":"Name of the topic for context"},"branchId":{"type":"string","description":"Optional model branch ID"},"contextQuery":{"type":"object","description":"Optional context query object"},"structured":{"type":"boolean","description":"Return strictly structured query format"}},"required":["identifier","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"schedules.create","description":"Create a schedule for dashboard delivery.","parameters":{"type":"object","properties":{"identifier":{"type":"string","description":"The dashboard identifier"},"schedule":{"type":"string","description":"Cron expression for the schedule"},"timezone":{"type":"string","description":"Timezone for the schedule"},"format":{"type":"string","description":"Output format (pdf, csv, etc)"},"destinationType":{"type":"string","description":"Destination type (webhook, email, etc)"},"url":{"type":"string","description":"Webhook URL for delivery"},"recipients":{"type":"object","description":"Email recipients"},"subject":{"type":"string","description":"Email subject line"},"paperFormat":{"type":"string","description":"Paper format for PDF output"},"paperOrientation":{"type":"string","description":"Paper orientation for PDF output"}},"required":["identifier","schedule","timezone","format","destinationType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"schedules.edit","description":"Edit an existing schedule.","parameters":{"type":"object","properties":{"identifier":{"type":"string","description":"The dashboard identifier"},"scheduleId":{"type":"string","description":"The schedule ID to edit"},"schedule":{"type":"string","description":"Cron expression"},"timezone":{"type":"string","description":"Timezone"},"format":{"type":"string","description":"Output format"},"destinationType":{"type":"string","description":"Destination type"},"url":{"type":"string","description":"Webhook URL"},"recipients":{"type":"object","description":"Email recipients"},"subject":{"type":"string","description":"Email subject"}},"required":["identifier","scheduleId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"schedules.delete","description":"Delete a schedule.","parameters":{"type":"object","properties":{"identifier":{"type":"string","description":"The dashboard identifier"},"scheduleId":{"type":"string","description":"The schedule ID to delete"}},"required":["identifier","scheduleId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"documents.update","description":"Update an existing document title and/or content.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"The ID of the document to update"},"name":{"type":"string","description":"Updated document title"},"content":{"type":"object","description":"Updated document content payload"}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"queries.delete","description":"Delete a saved query by id.","parameters":{"type":"object","properties":{"queryId":{"type":"string","description":"The ID of the saved query to delete"}},"required":["queryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"schedules.run-now","description":"Trigger an immediate run of a scheduled query / dashboard delivery.","parameters":{"type":"object","properties":{"identifier":{"type":"string","description":"The dashboard identifier"},"scheduleId":{"type":"string","description":"The schedule ID to run"}},"required":["identifier","scheduleId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.share","description":"Share a document with a user or group at a given access level.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"The ID of the document to share"},"principalType":{"type":"string","description":"Recipient kind: \"user\" or \"group\"."},"principalId":{"type":"string","description":"User or group id receiving access."},"accessLevel":{"type":"string","description":"Access level (e.g. viewer, editor)."}},"required":["documentId","principalType","principalId","accessLevel"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"omnihr","displayName":"Omni HR","description":"Smart, all-in-one HR platform for managing employees, time tracking, and HR workflows.","auth":{"kind":"api-key","hint":"OmniHR credentials: username (email), password, and organization origin URL (e.g., https://youraccount.omnihr.com). The connection must store these in metadata."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"employees.get.system.id","description":"Get the system ID of an employee by email address.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"employees.get.info","description":"Retrieve detailed information about an employee.","parameters":{"type":"object","properties":{"systemId":{"type":"integer"}},"required":["systemId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"employees.get.organizational.chart","description":"Get the organizational chart structure for an employee, showing reporting relationships.","parameters":{"type":"object","properties":{"systemId":{"type":"integer"}},"required":["systemId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"employees.get.direct.reports","description":"Retrieve the list of direct reports for an employee.","parameters":{"type":"object","properties":{"systemId":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["systemId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"onedrive","displayName":"OneDrive","description":"Read and watch files in the user's OneDrive. List a folder, fetch a document's contents (Word/Excel/PowerPoint/PDF/images), and subscribe to folder change notifications via Graph subscriptions.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["https://graph.microsoft.com/Files.Read","offline_access"],"clientIdEnv":"MS_OAUTH_CLIENT_ID","clientSecretEnv":"MS_OAUTH_CLIENT_SECRET"},"category":"storage","defaultConsistencyModel":"authoritative","rateLimit":{"requests":250,"windowMs":1000,"scope":"oauth-client"},"capabilities":[{"name":"list_files","class":"read","description":"List driveItems visible to the connected OneDrive account. Optionally scope to a folder by id and/or pass a Graph $search (KQL), e.g. 'NDA filetype:pdf'.","requiredScopes":["https://graph.microsoft.com/Files.Read"],"parameters":{"type":"object","properties":{"folderId":{"type":"string","description":"driveItem id of a folder; when present, restricts to direct children. Defaults to the drive root."},"query":{"type":"string","description":"Graph $search KQL; mutually exclusive with $orderby (we drop orderby when search is set)."},"top":{"type":"integer","minimum":1,"maximum":1000,"default":100},"skipToken":{"type":"string","description":"Opaque pagination cursor extracted from a previous @odata.nextLink."}}}},{"name":"read_file","class":"read","description":"Read a OneDrive file's contents. Text-like mime types (text/*, JSON, XML, CSV) are returned utf-8; binary types (PDF, Office docs, images) are returned base64.","requiredScopes":["https://graph.microsoft.com/Files.Read"],"parameters":{"type":"object","properties":{"fileId":{"type":"string","description":"driveItem id of the file."}},"required":["fileId"]}},{"name":"watch_folder","class":"mutation","description":"Register a Graph subscription for change notifications on a folder. Graph POSTs to `notificationUrl`; the subscription expires at `expirationDateTime` (max ~30 days for OneDrive). Caller must renew before expiry.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Files.ReadWrite"],"parameters":{"type":"object","properties":{"folderId":{"type":"string","description":"driveItem id of the folder to watch; pass \"root\" to watch the drive root."},"notificationUrl":{"type":"string","description":"HTTPS endpoint Graph will POST change notifications to."},"ttlMinutes":{"type":"integer","minimum":1,"maximum":43200,"default":4230,"description":"Subscription lifetime in minutes. Graph caps OneDrive at ~30 days."},"clientState":{"type":"string","description":"Opaque value Graph echoes back on each notification. Defaults to the idempotency key."}},"required":["folderId","notificationUrl"]}},{"name":"files.upload","class":"mutation","description":"Upload a new file via Graph small-file upload (PUT /items/{parent}:/{name}:/content). Suitable for <4MB payloads; larger files require an upload session, which is out of scope here. fileContent may be utf-8 text or base64 (when encoding=\"base64\" the buffer is decoded before PUT).","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Files.ReadWrite"],"parameters":{"type":"object","properties":{"folderId":{"type":"string","description":"driveItem id of destination folder; pass \"root\" for the drive root."},"fileName":{"type":"string","description":"Name of the new file, including extension."},"fileContent":{"type":"string","description":"File contents. utf-8 by default; base64-encoded when encoding=\"base64\"."},"encoding":{"type":"string","enum":["utf-8","base64"],"default":"utf-8"},"contentType":{"type":"string","description":"Optional MIME type override sent as content-type on the PUT."}},"required":["folderId","fileName","fileContent"]}},{"name":"files.delete","class":"mutation","description":"Delete a file or folder by driveItem id. Returns 204 with no body on success.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Files.ReadWrite"],"parameters":{"type":"object","properties":{"itemId":{"type":"string","description":"driveItem id of the file or folder to delete."}},"required":["itemId"]}},{"name":"files.move","class":"mutation","description":"Move (or rename) a driveItem by PATCHing its parentReference and/or name. Supply newParentId, newName, or both.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Files.ReadWrite"],"parameters":{"type":"object","properties":{"itemId":{"type":"string","description":"driveItem id of the file or folder to move."},"newParentId":{"type":"string","description":"Destination folder id; pass \"root\" for the drive root. Omit to rename in place."},"newName":{"type":"string","description":"New name for the item. Omit to keep the existing name."}},"required":["itemId"]}},{"name":"files.share","class":"mutation","description":"Create a sharing link via POST /items/{id}/createLink. type is one of 'view' | 'edit' | 'embed'; scope is one of 'anonymous' | 'organization'.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Files.ReadWrite"],"parameters":{"type":"object","properties":{"itemId":{"type":"string","description":"driveItem id to share."},"type":{"type":"string","enum":["view","edit","embed"],"default":"view"},"scope":{"type":"string","enum":["anonymous","organization"],"default":"anonymous"},"password":{"type":"string","description":"Optional password for the link (where supported)."},"expirationDateTime":{"type":"string","description":"Optional ISO-8601 expiration timestamp."}},"required":["itemId"]}},{"name":"folders.create","class":"mutation","description":"Create a new folder under {parentId} via POST /items/{parent}/children. conflictBehavior defaults to \"fail\" so re-issuing the same idempotency key against an existing name surfaces a 409 rather than silently creating a sibling folder.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Files.ReadWrite"],"parameters":{"type":"object","properties":{"parentId":{"type":"string","description":"Parent folder driveItem id; pass \"root\" for the drive root."},"name":{"type":"string","description":"Name of the new folder."},"conflictBehavior":{"type":"string","enum":["fail","replace","rename"],"default":"fail"}},"required":["parentId","name"]}}]},{"kind":"onelogin","displayName":"OneLogin","description":"Provision OneLogin users, groups, and user group assignments with customer-owned API credentials.","auth":{"kind":"api-key","hint":"JSON credential bundle: {\"clientId\":\"...\",\"clientSecret\":\"...\",\"region\":\"us|eu\"}."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.list","description":"List or filter OneLogin users.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":1000},"page":{"type":"integer","minimum":1},"email":{"type":"string"},"username":{"type":"string"},"status":{"type":"integer"},"group_id":{"type":"integer"},"role_id":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.get","description":"Read one OneLogin user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"OneLogin user id."}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.create","description":"Create a OneLogin user from a provider-native user object.","parameters":{"type":"object","properties":{"user":{"type":"object"}},"required":["user"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.update","description":"Update mutable fields on a OneLogin user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"OneLogin user id."},"user":{"type":"object"}},"required":["userId","user"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"users.deactivate","description":"Set a OneLogin user to suspended status without deleting the record.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"OneLogin user id."}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"groups.list","description":"List OneLogin groups.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":1000},"page":{"type":"integer","minimum":1},"name":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.get","description":"Read one OneLogin group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"OneLogin group id."}},"required":["groupId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.users.add","description":"Assign a OneLogin user to a group. OneLogin permits one group per user.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"OneLogin group id."},"userId":{"type":"string","description":"OneLogin user id."}},"required":["groupId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"groups.users.remove","description":"Remove a OneLogin user from the expected current group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"OneLogin group id."},"userId":{"type":"string","description":"OneLogin user id."}},"required":["groupId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"onespan-sign","displayName":"OneSpan Sign","description":"Create, inspect, send, and delete OneSpan Sign packages, documents, and signer roles.","auth":{"kind":"api-key","hint":"Base64-encoded OneSpan Sign API credential for HTTP Basic authentication."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"packages.list","description":"List OneSpan signing packages with paging and status filters.","parameters":{"type":"object","properties":{"from":{"type":"integer","minimum":0},"to":{"type":"integer","minimum":1},"query":{"type":"string"},"status":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"packages.get","description":"Read a signing package, roles, documents, and status.","parameters":{"type":"object","properties":{"packageId":{"type":"string"}},"required":["packageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"packages.create","description":"Create a draft OneSpan signing package.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"emailMessage":{"type":"string"},"roles":{"type":"array","items":{"type":"object"}},"documents":{"type":"array","items":{"type":"object"}},"settings":{"type":"object"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"packages.send","description":"Move a draft package to SENT and notify its signer roles.","parameters":{"type":"object","properties":{"packageId":{"type":"string"}},"required":["packageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"packages.delete","description":"Delete a OneSpan signing package.","parameters":{"type":"object","properties":{"packageId":{"type":"string"}},"required":["packageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.add","description":"Add a document descriptor to a OneSpan package.","parameters":{"type":"object","properties":{"packageId":{"type":"string"},"document":{"type":"object"}},"required":["packageId","document"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"roles.add","description":"Add a signer role to a OneSpan package.","parameters":{"type":"object","properties":{"packageId":{"type":"string"},"role":{"type":"object"}},"required":["packageId","role"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"open-phone","displayName":"OpenPhone","description":"Send messages, manage contacts, and retrieve call summaries via OpenPhone.","auth":{"kind":"api-key","hint":"OpenPhone API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"messages.send","description":"Send an SMS message to one or more recipients.","parameters":{"type":"object","properties":{"content":{"type":"string"},"from":{"type":"string"},"to":{"type":"array","items":{"type":"string"}},"userId":{"type":"string"}},"required":["content","from","to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.create","description":"Create a new contact in OpenPhone.","parameters":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string"},"role":{"type":"string"},"emails":{"type":"array","items":{"type":"object"}},"phoneNumbers":{"type":"array","items":{"type":"object"}},"customFields":{"type":"object"},"source":{"type":"string"},"sourceUrl":{"type":"string"},"externalId":{"type":"string"}},"required":["firstName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update an existing contact in OpenPhone.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string"},"role":{"type":"string"},"emails":{"type":"array","items":{"type":"object"}},"phoneNumbers":{"type":"array","items":{"type":"object"}},"customFields":{"type":"object"},"source":{"type":"string"},"sourceUrl":{"type":"string"},"externalId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"calls.summary","description":"Retrieve a summary of a call.","parameters":{"type":"object","properties":{"callId":{"type":"string"}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.list","description":"List recent SMS/voice messages on a phone number.","parameters":{"type":"object","properties":{"phoneNumberId":{"type":"string","description":"OpenPhone phone number id (required)."},"participants":{"type":"array","items":{"type":"string"},"description":"Filter messages by participant phone numbers (E.164)."},"maxResults":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum messages to return (1-100)."},"pageToken":{"type":"string","description":"Opaque pagination cursor returned by a prior call."}},"required":["phoneNumberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.create","description":"Place an outbound call from an OpenPhone number to an external participant.","parameters":{"type":"object","properties":{"from":{"type":"string","description":"OpenPhone phone number (E.164) placing the call."},"to":{"type":"string","description":"Destination phone number (E.164)."},"userId":{"type":"string","description":"OpenPhone user id initiating the call (optional; defaults to the API key owner)."}},"required":["from","to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.delete","description":"Delete a contact from OpenPhone by contact id.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.transfer","description":"Transfer an active call to another OpenPhone user or external phone number.","parameters":{"type":"object","properties":{"callId":{"type":"string","description":"Identifier of the active call to transfer."},"to":{"type":"string","description":"Destination phone number (E.164) for an external transfer. Mutually exclusive with toUserId."},"toUserId":{"type":"string","description":"OpenPhone user id to transfer the call to. Mutually exclusive with `to`."}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"open-router","displayName":"OpenRouter","description":"Use any AI model to generate code, text, or images via OpenRouter.ai.","auth":{"kind":"api-key","hint":"OpenRouter API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"models.list","description":"List available models on OpenRouter.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"completions.create","description":"Generate a completion using a specified model.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"The model to use for generation."},"messages":{"type":"array","description":"Array of message objects with role and content."},"temperature":{"type":"number","description":"Controls randomness; lower values are more deterministic."},"top_p":{"type":"number","description":"Nucleus sampling parameter."},"max_tokens":{"type":"integer","description":"Maximum tokens to generate."}},"required":["model","messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"credits.get","description":"Get the current account credit balance and total usage.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"keys.list","description":"List provisioning API keys on the account.","parameters":{"type":"object","properties":{"offset":{"type":"integer","description":"Pagination offset."},"include_disabled":{"type":"boolean","description":"Include revoked/disabled keys."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"keys.create","description":"Create a new provisioning API key on the account.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Human-readable name for the key."},"label":{"type":"string","description":"Optional label for the key."},"limit":{"type":"number","description":"Optional credit limit in USD."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"keys.revoke","description":"Revoke an existing provisioning API key by its hash.","parameters":{"type":"object","properties":{"hash":{"type":"string","description":"Hash identifier of the key to revoke."}},"required":["hash"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"openai","displayName":"OpenAI","description":"Call OpenAI Platform APIs (chat/completions, responses, embeddings, images, audio, files, fine-tuning) with a project-scoped secret key.","auth":{"kind":"api-key","hint":"OpenAI secret key (sk-proj-... or sk-...) from https://platform.openai.com/api-keys. Prefer a project-scoped key restricted to the workloads you intend to authorize."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"models.list","description":"List models available to the authenticated project.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"models.get","description":"Retrieve a single model by id.","parameters":{"type":"object","properties":{"model":{"type":"string"}},"required":["model"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"chat.completions.create","description":"Create a chat completion. Set stream=false; the platform SDK is non-streaming. Use responses.create for the modern Responses API.","parameters":{"type":"object","properties":{"model":{"type":"string"},"messages":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["system","user","assistant","tool","developer"]},"content":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"text":{"type":"string"},"image_url":{"type":"object","properties":{"url":{"type":"string"}}}},"required":["type"]}}]},"name":{"type":"string"},"tool_call_id":{"type":"string"}},"required":["role"]}},"temperature":{"type":"number","minimum":0,"maximum":2},"top_p":{"type":"number","minimum":0,"maximum":1},"max_tokens":{"type":"integer","minimum":1},"max_completion_tokens":{"type":"integer","minimum":1},"n":{"type":"integer","minimum":1},"stop":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"presence_penalty":{"type":"number"},"frequency_penalty":{"type":"number"},"seed":{"type":"integer"},"response_format":{"type":"object"},"tools":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["function"]},"function":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"parameters":{"type":"object"},"strict":{"type":"boolean"}},"required":["name"]}},"required":["type","function"]}},"tool_choice":{"oneOf":[{"type":"string"},{"type":"object"}]},"parallel_tool_calls":{"type":"boolean"},"user":{"type":"string"},"stream":{"type":"boolean","const":false},"reasoning_effort":{"type":"string","enum":["minimal","low","medium","high"]}},"required":["model","messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"responses.create","description":"Create a response via the modern Responses API. Supports text+vision input, hosted tools (web_search, file_search, code_interpreter, computer_use), and structured output.","parameters":{"type":"object","properties":{"model":{"type":"string"},"input":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object"}}]},"instructions":{"type":"string"},"previous_response_id":{"type":"string"},"tools":{"type":"array","items":{"type":"object"}},"tool_choice":{"oneOf":[{"type":"string"},{"type":"object"}]},"temperature":{"type":"number","minimum":0,"maximum":2},"top_p":{"type":"number","minimum":0,"maximum":1},"max_output_tokens":{"type":"integer","minimum":1},"metadata":{"type":"object"},"store":{"type":"boolean"},"reasoning":{"type":"object"},"text":{"type":"object"},"parallel_tool_calls":{"type":"boolean"},"stream":{"type":"boolean","const":false},"user":{"type":"string"}},"required":["model","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"responses.get","description":"Retrieve a previously created Response by id.","parameters":{"type":"object","properties":{"responseId":{"type":"string"}},"required":["responseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"responses.delete","description":"Delete a stored Response (only valid when the original was stored).","parameters":{"type":"object","properties":{"responseId":{"type":"string"}},"required":["responseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"responses.cancel","description":"Cancel an in-flight background Response.","parameters":{"type":"object","properties":{"responseId":{"type":"string"}},"required":["responseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"embeddings.create","description":"Create an embedding vector for the given input(s).","parameters":{"type":"object","properties":{"model":{"type":"string"},"input":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"array","items":{"type":"array","items":{"type":"integer"}}}]},"encoding_format":{"type":"string","enum":["float","base64"]},"dimensions":{"type":"integer","minimum":1},"user":{"type":"string"}},"required":["model","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"images.generate","description":"Generate an image from a prompt (DALL·E / gpt-image-1).","parameters":{"type":"object","properties":{"model":{"type":"string"},"prompt":{"type":"string"},"n":{"type":"integer","minimum":1,"maximum":10},"size":{"type":"string"},"quality":{"type":"string"},"style":{"type":"string"},"response_format":{"type":"string","enum":["url","b64_json"]},"user":{"type":"string"}},"required":["prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"audio.speech.create","description":"Synthesize speech audio from text (tts-1, tts-1-hd, gpt-4o-mini-tts).","parameters":{"type":"object","properties":{"model":{"type":"string"},"input":{"type":"string"},"voice":{"type":"string"},"response_format":{"type":"string","enum":["mp3","opus","aac","flac","wav","pcm"]},"speed":{"type":"number","minimum":0.25,"maximum":4},"instructions":{"type":"string"}},"required":["model","input","voice"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"moderations.create","description":"Classify content against OpenAI usage policies.","parameters":{"type":"object","properties":{"model":{"type":"string"},"input":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.list","description":"List files uploaded to the project (fine-tuning, batch, vector store, etc.).","parameters":{"type":"object","properties":{"purpose":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":10000},"order":{"type":"string","enum":["asc","desc"]},"after":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.get","description":"Retrieve a file metadata record by id.","parameters":{"type":"object","properties":{"fileId":{"type":"string"}},"required":["fileId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.delete","description":"Delete an uploaded file.","parameters":{"type":"object","properties":{"fileId":{"type":"string"}},"required":["fileId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"fineTuning.jobs.list","description":"List fine-tuning jobs for the project.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"after":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"fineTuning.jobs.get","description":"Retrieve a fine-tuning job by id.","parameters":{"type":"object","properties":{"jobId":{"type":"string"}},"required":["jobId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"fineTuning.jobs.create","description":"Start a fine-tuning job from a previously uploaded training file.","parameters":{"type":"object","properties":{"model":{"type":"string"},"training_file":{"type":"string"},"validation_file":{"type":"string"},"suffix":{"type":"string"},"method":{"type":"object"},"hyperparameters":{"type":"object"},"integrations":{"type":"array","items":{"type":"object"}},"seed":{"type":"integer"}},"required":["model","training_file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"fineTuning.jobs.cancel","description":"Cancel a running fine-tuning job.","parameters":{"type":"object","properties":{"jobId":{"type":"string"}},"required":["jobId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"batches.create","description":"Submit a batch job over an uploaded JSONL input file.","parameters":{"type":"object","properties":{"input_file_id":{"type":"string"},"endpoint":{"type":"string"},"completion_window":{"type":"string","enum":["24h"]},"metadata":{"type":"object"}},"required":["input_file_id","endpoint","completion_window"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"batches.get","description":"Retrieve a batch job by id.","parameters":{"type":"object","properties":{"batchId":{"type":"string"}},"required":["batchId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"batches.list","description":"List batch jobs for the project.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"after":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"batches.cancel","description":"Cancel an in-flight batch job.","parameters":{"type":"object","properties":{"batchId":{"type":"string"}},"required":["batchId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"openmic-ai","displayName":"OpenMic AI","description":"Create and manage phone calls, retrieve bot and call information using OpenMic AI platform.","auth":{"kind":"api-key","hint":"OpenMic AI API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.create","description":"Create a new phone call.","parameters":{"type":"object","properties":{"fromNumber":{"type":"string","description":"The number you own in E.164 format (e.g., +1234567890)"},"toNumber":{"type":"string","description":"The number to call in E.164 format (e.g., +0987654321)"},"uid":{"type":"string","description":"The unique identifier of the bot"},"overrideAgentId":{"type":"string","description":"Override agent ID (optional)"},"customerId":{"type":"string","description":"Customer identifier for tracking (optional)"},"dynamicVariables":{"type":"object","description":"Key-value pairs to replace in the prompt (optional)"},"callbackUrl":{"type":"string","description":"Callback URL to receive call events (optional)"}},"required":["fromNumber","toNumber","uid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bots.list","description":"List all bots with optional filtering.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Filter by bot name (partial match)"},"createdAfter":{"type":"string","description":"Filter bots created after this date (ISO 8601 format)"},"createdBefore":{"type":"string","description":"Filter bots created before this date (ISO 8601 format)"},"limit":{"type":"integer","description":"Maximum number of bots to return (1-100)"},"offset":{"type":"integer","description":"Number of bots to skip for pagination"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bots.find","description":"Find a specific bot by ID.","parameters":{"type":"object","properties":{"botId":{"type":"string","description":"The unique identifier of the bot"}},"required":["botId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.list","description":"List all calls with optional filtering.","parameters":{"type":"object","properties":{"callId":{"type":"string","description":"The unique identifier of the call"},"botId":{"type":"string","description":"Filter by bot ID"},"fromDate":{"type":"string","description":"Filter calls from this date (ISO 8601 format)"},"toDate":{"type":"string","description":"Filter calls to this date (ISO 8601 format)"},"callStatus":{"type":"string","description":"Filter by call status"},"callType":{"type":"string","description":"Filter by call type"},"limit":{"type":"integer","description":"Maximum number of calls to return (1-100)"},"offset":{"type":"integer","description":"Number of calls to skip for pagination"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.find","description":"Find a specific call by ID.","parameters":{"type":"object","properties":{"callId":{"type":"string","description":"The unique identifier of the call"}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bots.create","description":"Create a new voice bot.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Display name of the bot"},"prompt":{"type":"string","description":"System prompt that drives the bot"},"voice":{"type":"string","description":"Voice identifier (optional)"},"settings":{"type":"object","description":"Additional bot configuration (optional)"}},"required":["name","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bots.update","description":"Update bot prompt, voice, or settings.","parameters":{"type":"object","properties":{"botId":{"type":"string","description":"The unique identifier of the bot"},"name":{"type":"string","description":"Updated display name (optional)"},"prompt":{"type":"string","description":"Updated system prompt (optional)"},"voice":{"type":"string","description":"Updated voice identifier (optional)"},"settings":{"type":"object","description":"Updated bot configuration (optional)"}},"required":["botId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bots.delete","description":"Delete a bot.","parameters":{"type":"object","properties":{"botId":{"type":"string","description":"The unique identifier of the bot to delete"}},"required":["botId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.cancel","description":"Cancel an outbound call in progress.","parameters":{"type":"object","properties":{"callId":{"type":"string","description":"The unique identifier of the call to cancel"}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"opnform","displayName":"Opnform","description":"Create beautiful online forms and surveys with unlimited fields and submissions.","auth":{"kind":"api-key","hint":"Opnform API key."},"category":"webhook","defaultConsistencyModel":"authoritative","capabilities":[{"name":"webhooks.configure","description":"Configure a webhook to receive form submission events.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"webhookUrl":{"type":"string"},"events":{"type":"array","items":{"type":"string"}}},"required":["formId","webhookUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.get","description":"Retrieve details of a specific form.","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.list","description":"List all forms in the workspace.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"submissions.list","description":"List submissions for a specific form.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"submissions.get","description":"Retrieve a specific form submission.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"submissionId":{"type":"string"}},"required":["formId","submissionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.create","description":"Create a new form.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"Form title"},"description":{"type":"string","description":"Form description (optional)"},"properties":{"type":"array","description":"Form field definitions","items":{"type":"object"}},"settings":{"type":"object","description":"Form settings (optional)"}},"required":["title","properties"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.update","description":"Update form schema or settings.","parameters":{"type":"object","properties":{"formId":{"type":"string","description":"The form identifier"},"title":{"type":"string","description":"Updated form title (optional)"},"description":{"type":"string","description":"Updated description (optional)"},"properties":{"type":"array","description":"Updated form field definitions (optional)","items":{"type":"object"}},"settings":{"type":"object","description":"Updated form settings (optional)"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.delete","description":"Delete a form.","parameters":{"type":"object","properties":{"formId":{"type":"string","description":"The form identifier"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"submissions.delete","description":"Delete a form submission.","parameters":{"type":"object","properties":{"formId":{"type":"string","description":"The form identifier"},"submissionId":{"type":"string","description":"The submission identifier"}},"required":["formId","submissionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"opportify","displayName":"Opportify","description":"Analyze emails and IP addresses with Opportify.","auth":{"kind":"api-key","hint":"Opportify API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"analyze.email","description":"Analyze an email address.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"analyze.ip.address","description":"Analyze an IP address.","parameters":{"type":"object","properties":{"ip":{"type":"string"}},"required":["ip"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"opsgenie","displayName":"Opsgenie","description":"Use an existing Opsgenie account to manage alerts and incidents, attach notes, and read schedules, on-call assignments, teams, and users.","auth":{"kind":"api-key","hint":"Opsgenie API key with access to the selected alert, incident, schedule, team, and user operations."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"alerts.list","description":"List Opsgenie alerts, optionally filtered by a search query (Opsgenie query DSL), with cursor-style offset pagination.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Opsgenie alert search expression, e.g. \"status: open AND priority: P1\"."},"searchIdentifier":{"type":"string","description":"Saved search id or name to reuse server-side."},"searchIdentifierType":{"type":"string","enum":["id","name"],"description":"How searchIdentifier should be resolved."},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":100},"sort":{"type":"string","description":"Sort key, e.g. \"createdAt\", \"updatedAt\", \"tinyId\", \"priority\"."},"order":{"type":"string","enum":["asc","desc"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"alerts.get","description":"Read a single alert by id, tiny id, or alias. `identifierType` defaults to \"id\" if omitted.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"identifierType":{"type":"string","enum":["id","tiny","alias"]}},"required":["identifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"alerts.create","description":"Create an Opsgenie alert. `message` is required; `responders`, `tags`, `priority`, and `alias` route and de-duplicate.","parameters":{"type":"object","properties":{"message":{"type":"string","description":"Alert title (max 130 chars)."},"alias":{"type":"string","description":"Client-side dedup key; subsequent creates with the same alias are merged."},"description":{"type":"string"},"responders":{"type":"array","description":"Routing targets; each entry references a team / user / schedule / escalation.","items":{"type":"object"}},"visibleTo":{"type":"array","description":"Optional team / user list that restricts who can see the alert.","items":{"type":"object"}},"actions":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"details":{"type":"object","description":"Free-form key/value metadata attached to the alert."},"entity":{"type":"string","description":"Source entity that raised the alert."},"source":{"type":"string"},"priority":{"type":"string","enum":["P1","P2","P3","P4","P5"]},"user":{"type":"string","description":"Display name of the request actor."},"note":{"type":"string"}},"required":["message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"alerts.acknowledge","description":"Acknowledge an alert. The alert is identified by id, tiny id, or alias.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"identifierType":{"type":"string","enum":["id","tiny","alias"]},"user":{"type":"string"},"source":{"type":"string"},"note":{"type":"string"}},"required":["identifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"alerts.close","description":"Close an alert.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"identifierType":{"type":"string","enum":["id","tiny","alias"]},"user":{"type":"string"},"source":{"type":"string"},"note":{"type":"string"}},"required":["identifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"alerts.notes.list","description":"List notes attached to an alert.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"identifierType":{"type":"string","enum":["id","tiny","alias"]},"offset":{"type":"string","description":"Opaque pagination offset returned by a prior call."},"direction":{"type":"string","enum":["next","prev"]},"limit":{"type":"integer","minimum":1,"maximum":100},"order":{"type":"string","enum":["asc","desc"]}},"required":["identifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"alerts.notes.add","description":"Attach a note to an alert.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"identifierType":{"type":"string","enum":["id","tiny","alias"]},"note":{"type":"string"},"user":{"type":"string"},"source":{"type":"string"}},"required":["identifier","note"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"incidents.list","description":"List Opsgenie incidents using the documented incident query DSL with cursor-style offset pagination.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Incident search expression, e.g. \"status: open AND priority: P1\"."},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":100},"sort":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"incidents.get","description":"Read a single incident by id or tiny id.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"identifierType":{"type":"string","enum":["id","tiny"]}},"required":["identifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"incidents.create","description":"Open an Opsgenie incident. `message` is required; `responders`, `priority`, and `serviceId` route the incident.","parameters":{"type":"object","properties":{"message":{"type":"string"},"description":{"type":"string"},"responders":{"type":"array","items":{"type":"object"}},"tags":{"type":"array","items":{"type":"string"}},"details":{"type":"object"},"priority":{"type":"string","enum":["P1","P2","P3","P4","P5"]},"note":{"type":"string"},"serviceId":{"type":"string","description":"Opsgenie service id the incident is opened on."},"statusPageEntry":{"type":"object","description":"Optional status-page payload (title + detail) for customer-facing communication."},"notifyStakeholders":{"type":"boolean"},"impactedServices":{"type":"array","items":{"type":"string"}}},"required":["message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"incidents.close","description":"Resolve / close an Opsgenie incident.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"identifierType":{"type":"string","enum":["id","tiny"]},"note":{"type":"string"}},"required":["identifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"incidents.notes.add","description":"Attach a note to an incident.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"identifierType":{"type":"string","enum":["id","tiny"]},"note":{"type":"string"}},"required":["identifier","note"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"schedules.list","description":"List on-call schedules with offset pagination.","parameters":{"type":"object","properties":{"expand":{"type":"array","description":"Optional expansion fields, e.g. \"rotation\".","items":{"type":"string"}}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"schedules.get","description":"Read a single schedule by id or name.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"identifierType":{"type":"string","enum":["id","name"]}},"required":["identifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"schedules.timeline","description":"Read the rendered timeline for a schedule between `interval` units relative to `date`.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"identifierType":{"type":"string","enum":["id","name"]},"intervalUnit":{"type":"string","enum":["days","weeks","months"]},"interval":{"type":"integer","minimum":1},"date":{"type":"string","description":"ISO-8601 anchor date; defaults to now if omitted."},"expand":{"type":"array","items":{"type":"string"}}},"required":["identifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"oncalls.current","description":"Return the current on-call participants for a schedule, optionally flattening nested escalations.","parameters":{"type":"object","properties":{"scheduleIdentifier":{"type":"string"},"scheduleIdentifierType":{"type":"string","enum":["id","name"]},"flat":{"type":"boolean","description":"If true, returns only the flat list of users."},"date":{"type":"string","description":"ISO-8601 timestamp for the query."}},"required":["scheduleIdentifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"oncalls.next","description":"Return the next on-call rotation for a schedule starting at `date` (or now).","parameters":{"type":"object","properties":{"scheduleIdentifier":{"type":"string"},"scheduleIdentifierType":{"type":"string","enum":["id","name"]},"flat":{"type":"boolean"},"date":{"type":"string"}},"required":["scheduleIdentifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"teams.list","description":"List all teams in the Opsgenie workspace.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"teams.get","description":"Read a single team by id or name.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"identifierType":{"type":"string","enum":["id","name"]}},"required":["identifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.list","description":"List Opsgenie users with offset pagination and an optional search query.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Search expression matched against user fields."},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":100},"sort":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.get","description":"Read a single user by id or username.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"expand":{"type":"array","items":{"type":"string"}}},"required":["identifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"oracle-database","displayName":"Oracle Database","description":"Query, insert, update, and delete Oracle Database rows via SQL.","auth":{"kind":"api-key","hint":"Oracle Database connection credentials."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"rows.find","description":"Query rows from a table with optional WHERE conditions.","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Table name."},"filter":{"type":"object","description":"WHERE conditions (e.g., { \"status\": \"active\" })."},"columns":{"type":"array","items":{"type":"string"},"description":"Columns to select."},"limit":{"type":"integer","description":"Maximum rows to return."},"orderBy":{"type":"string","description":"ORDER BY clause."}},"required":["table"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rows.insert","description":"Insert a single row into a table.","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Table name."},"row":{"type":"object","description":"Column names and values to insert."}},"required":["table","row"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rows.insertBatch","description":"Insert multiple rows into a table.","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Table name."},"rows":{"type":"array","items":{"type":"object"},"description":"Array of row objects."}},"required":["table","rows"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rows.update","description":"Update rows matching filter conditions.","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Table name."},"values":{"type":"object","description":"Column names and new values."},"filter":{"type":"object","description":"WHERE conditions to match rows."}},"required":["table","values","filter"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"rows.delete","description":"Delete rows matching filter conditions.","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Table name."},"filter":{"type":"object","description":"WHERE conditions to match rows for deletion."}},"required":["table","filter"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sql.execute","description":"Run custom SQL or PL/SQL with bind parameters.","parameters":{"type":"object","properties":{"sql":{"type":"string","description":"SQL or PL/SQL to execute. Use :param for bind parameters."},"binds":{"type":"object","description":"Key-value pairs for bind variables."}},"required":["sql"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"orimon","displayName":"Orimon","description":"Send messages to Orimon chatbots and manage conversations.","auth":{"kind":"api-key","hint":"Orimon API credentials (Tenant ID and API key)."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"messages.send","description":"Send a message to an Orimon chatbot.","parameters":{"type":"object","properties":{"tenantId":{"type":"string","description":"Tenant ID from Orimon dashboard."},"messageText":{"type":"string","description":"The message to send."},"messageId":{"type":"string","description":"Optional unique identifier for this message."},"markdown":{"type":"boolean","description":"Whether the message uses markdown formatting."}},"required":["tenantId","messageText","markdown"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.list","description":"List conversations for a tenant.","parameters":{"type":"object","properties":{"tenantId":{"type":"string","description":"Tenant ID."},"limit":{"type":"integer","description":"Maximum number of conversations to return."},"offset":{"type":"integer","description":"Pagination offset."}},"required":["tenantId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversations.get","description":"Get details of a specific conversation.","parameters":{"type":"object","properties":{"tenantId":{"type":"string","description":"Tenant ID."},"conversationId":{"type":"string","description":"Conversation ID."}},"required":["tenantId","conversationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversations.close","description":"Close a conversation.","parameters":{"type":"object","properties":{"tenantId":{"type":"string","description":"Tenant ID."},"conversationId":{"type":"string","description":"Conversation ID to close."}},"required":["tenantId","conversationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.create","description":"Create a new lead from a conversation.","parameters":{"type":"object","properties":{"tenantId":{"type":"string","description":"Tenant ID."},"conversationId":{"type":"string","description":"Conversation ID."},"name":{"type":"string","description":"Lead name."},"email":{"type":"string","description":"Lead email address."},"phone":{"type":"string","description":"Lead phone number."},"metadata":{"type":"object","description":"Additional lead metadata."}},"required":["tenantId","conversationId","name","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update","description":"Update an existing lead.","parameters":{"type":"object","properties":{"tenantId":{"type":"string","description":"Tenant ID."},"leadId":{"type":"string","description":"Lead ID to update."},"name":{"type":"string","description":"Updated lead name (optional)."},"email":{"type":"string","description":"Updated email (optional)."},"phone":{"type":"string","description":"Updated phone (optional)."},"metadata":{"type":"object","description":"Updated metadata (optional)."}},"required":["tenantId","leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.delete","description":"Delete a lead.","parameters":{"type":"object","properties":{"tenantId":{"type":"string","description":"Tenant ID."},"leadId":{"type":"string","description":"Lead ID to delete."}},"required":["tenantId","leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.assign","description":"Assign a conversation to an agent.","parameters":{"type":"object","properties":{"tenantId":{"type":"string","description":"Tenant ID."},"conversationId":{"type":"string","description":"Conversation ID to assign."},"agentId":{"type":"string","description":"Agent ID to assign the conversation to."}},"required":["tenantId","conversationId","agentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.tag","description":"Add a tag to a conversation.","parameters":{"type":"object","properties":{"tenantId":{"type":"string","description":"Tenant ID."},"conversationId":{"type":"string","description":"Conversation ID."},"tag":{"type":"string","description":"Tag to add to the conversation."}},"required":["tenantId","conversationId","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"outlook-mail","displayName":"Outlook Mail","description":"Read inbox messages from a Microsoft 365 / Outlook mailbox, fetch a single message with body + attachment manifest, reply on a conversation, and subscribe to a folder for new mail webhooks.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["https://graph.microsoft.com/Mail.Read","https://graph.microsoft.com/Mail.Send","https://graph.microsoft.com/Mail.ReadWrite","offline_access"],"clientIdEnv":"MS_OAUTH_CLIENT_ID","clientSecretEnv":"MS_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"authoritative","rateLimit":{"requests":250,"windowMs":1000,"scope":"oauth-client"},"capabilities":[{"name":"list_messages","class":"read","description":"List mailbox messages in a folder (default 'inbox'). Optional `query` becomes a Graph `$search` (KQL); `top` is the page size (max 1000). Returns headers, no bodies.","requiredScopes":["https://graph.microsoft.com/Mail.Read"],"parameters":{"type":"object","properties":{"folder":{"type":"string","description":"Well-known folder name (inbox, drafts, sentitems, ...) or folder id. Default: 'inbox'."},"query":{"type":"string","description":"Graph $search KQL, e.g. 'from:billing@stripe.com'."},"top":{"type":"integer","minimum":1,"maximum":1000,"default":25},"skipToken":{"type":"string","description":"Opaque pagination cursor from a previous nextLink."}}}},{"name":"read_message","class":"read","description":"Read a single Outlook message including body (HTML or text per upstream content type) and a flat manifest of attachments. Attachment bytes are not inlined.","requiredScopes":["https://graph.microsoft.com/Mail.Read"],"parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},{"name":"send_reply","class":"mutation","description":"Send a reply on a conversation. Uses Graph createReply (or createReplyAll) + patch body + send. Threading via inherited internetMessageHeaders.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Mail.Send","https://graph.microsoft.com/Mail.Read"],"parameters":{"type":"object","properties":{"messageId":{"type":"string","description":"Graph message id to reply to."},"body":{"type":"string","description":"Reply body (text or HTML; see bodyType)."},"bodyType":{"type":"string","enum":["text","html"],"default":"text"},"replyAll":{"type":"boolean","default":false},"comment":{"type":"string","description":"Optional comment passed to createReply/createReplyAll."}},"required":["messageId","body"]}},{"name":"send_message","class":"mutation","description":"Send a new email to arbitrary recipients (not tied to an existing conversation). Uses Graph POST /me/sendMail with saveToSentItems=true. Body is text/plain unless `html` is true. Use send_reply for in-thread replies.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Mail.Send"],"parameters":{"type":"object","properties":{"to":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Recipient address(es). String OR array of strings."},"subject":{"type":"string"},"body":{"type":"string","description":"text/plain body (unless html set)"},"cc":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"html":{"type":"boolean","default":false,"description":"When true, set Graph body.contentType=HTML and send body as HTML; otherwise text. Graph does NOT auto-derive a plain alternative — set html only when the body is HTML."},"attachments":{"type":"array","description":"Optional file attachments. Each item is { name, contentType?, contentBytes } where contentBytes is base64-encoded file data. Sent as Graph #microsoft.graph.fileAttachment entries.","items":{"type":"object","properties":{"name":{"type":"string"},"contentType":{"type":"string"},"contentBytes":{"type":"string","description":"Base64-encoded attachment bytes."}},"required":["name","contentBytes"]}}},"required":["to","subject","body"]}},{"name":"create_draft","class":"mutation","description":"Create a draft email in the user's Drafts folder via Graph POST /me/messages. Returns the draft message id so callers can patch attachments, then send via a separate /send call.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Mail.ReadWrite"],"parameters":{"type":"object","properties":{"to":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Recipient address(es). String OR array of strings."},"subject":{"type":"string"},"body":{"type":"string","description":"text/plain body (unless html set)"},"cc":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"html":{"type":"boolean","default":false,"description":"When true, set Graph body.contentType=HTML; otherwise text."},"attachments":{"type":"array","description":"Optional file attachments. Each item is { name, contentType?, contentBytes } where contentBytes is base64-encoded file data. Stored as Graph #microsoft.graph.fileAttachment entries on the draft.","items":{"type":"object","properties":{"name":{"type":"string"},"contentType":{"type":"string"},"contentBytes":{"type":"string","description":"Base64-encoded attachment bytes."}},"required":["name","contentBytes"]}}},"required":["to","subject","body"]}},{"name":"subscribe_folder","class":"mutation","description":"Register a Graph webhook subscription for new mail in a folder. Returns the subscription id and expirationDateTime. Mail subscriptions max out at ~3 days; caller must renew.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Mail.ReadWrite"],"parameters":{"type":"object","properties":{"folder":{"type":"string","description":"Well-known name or folder id. Default: 'inbox'."},"notificationUrl":{"type":"string","description":"HTTPS endpoint Graph will POST to."},"ttlMinutes":{"type":"integer","minimum":1,"maximum":4230,"default":4230},"clientState":{"type":"string","description":"Opaque value echoed back on each notification. Defaults to the idempotency key."}},"required":["notificationUrl"]}},{"name":"forward_message","class":"mutation","description":"Forward an existing message to one or more recipients with an optional comment. Graph POST /me/messages/{id}/forward.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Mail.Send"],"parameters":{"type":"object","properties":{"messageId":{"type":"string","description":"Graph message id to forward."},"to":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Recipient address(es). String OR array of strings."},"comment":{"type":"string","description":"Optional comment prepended to the forwarded body."}},"required":["messageId","to"]}},{"name":"move_message","class":"mutation","description":"Move a message to a destination mail folder by id (or well-known name like inbox/archive). Graph POST /me/messages/{id}/move; returns the relocated message (new id).","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Mail.ReadWrite"],"parameters":{"type":"object","properties":{"messageId":{"type":"string","description":"Graph message id to move."},"destinationId":{"type":"string","description":"Destination folder id or well-known name (inbox, archive, deleteditems, ...)."}},"required":["messageId","destinationId"]}},{"name":"set_labels","class":"mutation","description":"Set the full set of Outlook categories (labels) on a message. Graph PATCH /me/messages/{id} replaces the categories array, so supply the complete desired set (the caller computes adds/removes against the current set).","cas":"optimistic-read-verify","externalEffect":false,"requiredScopes":["https://graph.microsoft.com/Mail.ReadWrite"],"parameters":{"type":"object","properties":{"messageId":{"type":"string","description":"Graph message id to tag."},"categories":{"type":"array","items":{"type":"string"},"description":"Full desired category set. Graph replaces (not merges) the categories array."}},"required":["messageId","categories"]}},{"name":"send_draft","class":"mutation","description":"Send a previously created draft message by id. Graph POST /me/messages/{id}/send. Pairs with create_draft.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Mail.Send"],"parameters":{"type":"object","properties":{"messageId":{"type":"string","description":"Graph draft message id to send."}},"required":["messageId"]}},{"name":"download_attachment","class":"read","description":"Read an attachment record for a message including base64 contentBytes for file attachments. Graph GET /me/messages/{messageId}/attachments/{attachmentId}. Fills the attachment-bytes gap that read_message defers.","requiredScopes":["https://graph.microsoft.com/Mail.Read"],"parameters":{"type":"object","properties":{"messageId":{"type":"string","description":"Graph message id owning the attachment."},"attachmentId":{"type":"string","description":"Graph attachment id (from read_message attachments[].id)."}},"required":["messageId","attachmentId"]}}]},{"kind":"outreach","displayName":"Outreach","description":"Manage Outreach prospects, accounts, and opportunities, and enroll prospects into sequences, through the JSON:API v2 REST API.","auth":{"kind":"oauth2","authorizationUrl":"https://api.outreach.io/oauth/authorize","tokenUrl":"https://api.outreach.io/oauth/token","scopes":["prospects.read","prospects.write","accounts.read","accounts.write","opportunities.read","sequences.read","sequenceStates.read","sequenceStates.write","users.read"],"clientIdEnv":"OUTREACH_OAUTH_CLIENT_ID","clientSecretEnv":"OUTREACH_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"prospects.list","description":"List or search prospects (contacts). Filter by email, paginate with pageSize/pageAfter, sort, and sideload related resources via include.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Filter prospects by email address (filter[emails][email])."},"pageSize":{"type":"number","description":"Results per page (default 50, max 1000)."},"pageAfter":{"type":"string","description":"Cursor for the next page (cursor-based pagination)."},"sort":{"type":"string","description":"Attribute to sort by; prefix with - for descending (e.g. -createdAt)."},"include":{"type":"string","description":"Comma-separated related resources to sideload (e.g. account,owner)."}}},"requiredScopes":["prospects.read"],"class":"read"},{"name":"prospects.create","description":"Create a prospect. Pass JSON:API `attributes` (e.g. { firstName, lastName, emails: [{ email, emailType: \"work\" }], title }) and an optional `relationships` object (e.g. { account: { data: { type: \"account\", id: 123 } } }).","parameters":{"type":"object","properties":{"attributes":{"type":"object","description":"JSON:API attributes for the prospect resource.","additionalProperties":true},"relationships":{"type":"object","description":"Optional JSON:API relationships object linking the prospect to an account, owner, etc.","additionalProperties":true}},"required":["attributes"]},"requiredScopes":["prospects.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"prospects.update","description":"Update a prospect by id. Pass the numeric id and a JSON:API `attributes` object; only provided fields change.","parameters":{"type":"object","properties":{"id":{"type":"number","description":"Numeric prospect id."},"attributes":{"type":"object","description":"JSON:API attributes to update.","additionalProperties":true},"relationships":{"type":"object","description":"Optional JSON:API relationships to update.","additionalProperties":true}},"required":["id","attributes"]},"requiredScopes":["prospects.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sequenceStates.create","description":"Enroll a prospect into a sequence (start a sequence state). Provide the numeric prospectId and sequenceId.","parameters":{"type":"object","properties":{"prospectId":{"type":"number","description":"Numeric prospect id to enroll."},"sequenceId":{"type":"number","description":"Numeric sequence id to enroll the prospect into."}},"required":["prospectId","sequenceId"]},"requiredScopes":["sequenceStates.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.list","description":"List opportunities, optionally filtered by account id; paginate and sideload via include.","parameters":{"type":"object","properties":{"accountId":{"type":"number","description":"Filter opportunities by associated account id (filter[account][id])."},"pageSize":{"type":"number","description":"Results per page."},"pageAfter":{"type":"string","description":"Cursor for the next page."},"include":{"type":"string","description":"Comma-separated related resources to sideload (e.g. account,prospects)."}}},"requiredScopes":["opportunities.read"],"class":"read"},{"name":"accounts.create","description":"Create an account (company). Pass JSON:API `attributes` (name is required; domain and industry optional).","parameters":{"type":"object","properties":{"attributes":{"type":"object","description":"JSON:API attributes for the account resource, e.g. { name, domain, industry }.","additionalProperties":true}},"required":["attributes"]},"requiredScopes":["accounts.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"paddle","displayName":"Paddle","description":"Manage customers, subscriptions, and recurring billing with Paddle Billing.","auth":{"kind":"api-key","hint":"Paddle API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"customers.list","description":"List customers with optional filtering.","parameters":{"type":"object","properties":{"email":{"type":"string"},"status":{"type":"string"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.get","description":"Get a subscription by ID.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.update","description":"Update a subscription.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string"},"quantity":{"type":"number"},"prorationBillingMode":{"type":"string"},"customData":{"type":"object"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"subscriptions.cancel","description":"Cancel a subscription.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string"},"effectiveFrom":{"type":"string"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.create","description":"Create a transaction.","parameters":{"type":"object","properties":{"items":{"type":"array"},"customData":{"type":"object"}},"required":["items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.create","description":"Create a new customer.","parameters":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"},"locale":{"type":"string"},"custom_data":{"type":"object"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.update","description":"Update a customer record. Send only the fields you want to change.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"status":{"type":"string"},"locale":{"type":"string"},"custom_data":{"type":"object"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"prices.create","description":"Create a new price for an existing product.","parameters":{"type":"object","properties":{"description":{"type":"string"},"productId":{"type":"string"},"unitPrice":{"type":"object","description":"Price object with amount (minor units string) and currency_code (ISO-4217)."},"billingCycle":{"type":"object"},"trialPeriod":{"type":"object"},"taxMode":{"type":"string"},"quantity":{"type":"object"},"customData":{"type":"object"}},"required":["description","productId","unitPrice"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.refund","description":"Refund a transaction by creating a refund adjustment against it. Paddle Billing exposes refunds through POST /adjustments with action=\"refund\".","parameters":{"type":"object","properties":{"transactionId":{"type":"string"},"reason":{"type":"string"},"items":{"type":"array","description":"Line items to refund. Each item is { item_id, type: \"full\"|\"partial\"|\"proration\", amount? }."}},"required":["transactionId","reason","items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.pause","description":"Pause a subscription.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string"},"effective_from":{"type":"string"},"resume_at":{"type":"string"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"pagerduty","displayName":"PagerDuty","description":"Triage PagerDuty incidents, page on-call responders, mutate services and escalation policies, and read schedules against a connected PagerDuty account.","auth":{"kind":"oauth2","authorizationUrl":"https://identity.pagerduty.com/oauth/authorize","tokenUrl":"https://identity.pagerduty.com/oauth/token","scopes":["incidents.read","incidents.write","services.read","services.write","escalation_policies.read","escalation_policies.write","schedules.read","schedules.write","teams.read","users.read","oncalls.read"],"clientIdEnv":"PAGERDUTY_OAUTH_CLIENT_ID","clientSecretEnv":"PAGERDUTY_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"incidents.list","description":"List incidents, optionally filtered by status, service, urgency, time window, or assigned user.","parameters":{"type":"object","properties":{"statuses":{"type":"array","description":"Filter by incident status. Repeat to match multiple values.","items":{"type":"string","enum":["triggered","acknowledged","resolved"]}},"serviceIds":{"type":"array","description":"PagerDuty service ids to scope the search to.","items":{"type":"string"}},"userIds":{"type":"array","description":"Filter to incidents assigned to the given user ids.","items":{"type":"string"}},"urgencies":{"type":"array","description":"Filter by urgency.","items":{"type":"string","enum":["high","low"]}},"since":{"type":"string","description":"ISO-8601 lower bound on created_at."},"until":{"type":"string","description":"ISO-8601 upper bound on created_at."},"sortBy":{"type":"string","description":"Sort key, e.g. \"created_at:desc\" or \"urgency:asc\"."},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["incidents.read"],"class":"read"},{"name":"incidents.get","description":"Read a single incident by id.","parameters":{"type":"object","properties":{"incidentId":{"type":"string"}},"required":["incidentId"]},"requiredScopes":["incidents.read"],"class":"read"},{"name":"incidents.create","description":"Create a PagerDuty incident on a service. Requires a From email (the user the call acts as).","parameters":{"type":"object","properties":{"fromEmail":{"type":"string","description":"Email of the PagerDuty user the incident is created as; supplied as the From request header."},"incident":{"type":"object","description":"Incident payload. Must include `type: \"incident\"`, a `title`, and a `service` reference of shape { id, type: \"service_reference\" }.","properties":{"type":{"type":"string","enum":["incident"]},"title":{"type":"string"},"service":{"type":"object"},"urgency":{"type":"string","enum":["high","low"]},"body":{"type":"object"},"incident_key":{"type":"string","description":"Dedup key for the incident."},"priority":{"type":"object"},"escalation_policy":{"type":"object"},"assignments":{"type":"array","items":{"type":"object"}},"conference_bridge":{"type":"object"}},"required":["type","title","service"]}},"required":["fromEmail","incident"]},"requiredScopes":["incidents.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"incidents.update","description":"Update a PagerDuty incident: change status, escalate, snooze, reassign, or set priority. Requires a From email.","parameters":{"type":"object","properties":{"incidentId":{"type":"string"},"fromEmail":{"type":"string"},"incident":{"type":"object","description":"Incident patch payload. Supports `status` (\"acknowledged\" | \"resolved\"), `priority`, `assignments`, `escalation_level`, `resolution`, `title`, `urgency`.","properties":{"type":{"type":"string","enum":["incident_reference"]},"status":{"type":"string","enum":["acknowledged","resolved"]},"resolution":{"type":"string"},"title":{"type":"string"},"urgency":{"type":"string","enum":["high","low"]},"escalation_level":{"type":"integer","minimum":1},"priority":{"type":"object"},"assignments":{"type":"array","items":{"type":"object"}}}}},"required":["incidentId","fromEmail","incident"]},"requiredScopes":["incidents.write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"incidents.notes.list","description":"List notes (comments) on an incident.","parameters":{"type":"object","properties":{"incidentId":{"type":"string"}},"required":["incidentId"]},"requiredScopes":["incidents.read"],"class":"read"},{"name":"incidents.notes.create","description":"Add a note to an incident. Requires a From email.","parameters":{"type":"object","properties":{"incidentId":{"type":"string"},"fromEmail":{"type":"string"},"content":{"type":"string","description":"Note body."}},"required":["incidentId","fromEmail","content"]},"requiredScopes":["incidents.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"incidents.snooze","description":"Snooze an incident for a given duration in seconds. Requires a From email.","parameters":{"type":"object","properties":{"incidentId":{"type":"string"},"fromEmail":{"type":"string"},"duration":{"type":"integer","minimum":1,"description":"Seconds to snooze; PagerDuty caps this at 24 hours."}},"required":["incidentId","fromEmail","duration"]},"requiredScopes":["incidents.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"services.list","description":"List services, optionally filtered by team or name query.","parameters":{"type":"object","properties":{"teamIds":{"type":"array","items":{"type":"string"}},"query":{"type":"string","description":"Substring match on service name."},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["services.read"],"class":"read"},{"name":"services.get","description":"Read a single service by id.","parameters":{"type":"object","properties":{"serviceId":{"type":"string"}},"required":["serviceId"]},"requiredScopes":["services.read"],"class":"read"},{"name":"services.create","description":"Create a PagerDuty service. The payload must include `type: \"service\"`, `name`, and an `escalation_policy` reference.","parameters":{"type":"object","properties":{"service":{"type":"object","properties":{"type":{"type":"string","enum":["service"]},"name":{"type":"string"},"description":{"type":"string"},"auto_resolve_timeout":{"type":["integer","null"]},"acknowledgement_timeout":{"type":["integer","null"]},"escalation_policy":{"type":"object"},"alert_creation":{"type":"string","enum":["create_alerts_and_incidents","create_incidents"]},"incident_urgency_rule":{"type":"object"},"support_hours":{"type":"object"},"scheduled_actions":{"type":"array","items":{"type":"object"}}},"required":["type","name","escalation_policy"]}},"required":["service"]},"requiredScopes":["services.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"services.update","description":"Update fields on a PagerDuty service.","parameters":{"type":"object","properties":{"serviceId":{"type":"string"},"service":{"type":"object"}},"required":["serviceId","service"]},"requiredScopes":["services.write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"services.delete","description":"Delete a PagerDuty service. Open incidents on the service must be resolved first.","parameters":{"type":"object","properties":{"serviceId":{"type":"string"}},"required":["serviceId"]},"requiredScopes":["services.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"escalation_policies.list","description":"List escalation policies, optionally filtered by team or substring query.","parameters":{"type":"object","properties":{"query":{"type":"string"},"teamIds":{"type":"array","items":{"type":"string"}},"userIds":{"type":"array","items":{"type":"string"}},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["escalation_policies.read"],"class":"read"},{"name":"escalation_policies.get","description":"Read a single escalation policy by id.","parameters":{"type":"object","properties":{"escalationPolicyId":{"type":"string"}},"required":["escalationPolicyId"]},"requiredScopes":["escalation_policies.read"],"class":"read"},{"name":"escalation_policies.create","description":"Create an escalation policy. Payload must include `type: \"escalation_policy\"`, `name`, and `escalation_rules`.","parameters":{"type":"object","properties":{"escalation_policy":{"type":"object","properties":{"type":{"type":"string","enum":["escalation_policy"]},"name":{"type":"string"},"escalation_rules":{"type":"array","items":{"type":"object"}},"num_loops":{"type":"integer","minimum":0},"on_call_handoff_notifications":{"type":"string","enum":["if_has_services","always"]},"teams":{"type":"array","items":{"type":"object"}},"description":{"type":"string"}},"required":["type","name","escalation_rules"]}},"required":["escalation_policy"]},"requiredScopes":["escalation_policies.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"escalation_policies.update","description":"Update an escalation policy.","parameters":{"type":"object","properties":{"escalationPolicyId":{"type":"string"},"escalation_policy":{"type":"object"}},"required":["escalationPolicyId","escalation_policy"]},"requiredScopes":["escalation_policies.write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"schedules.list","description":"List on-call schedules, optionally filtered by substring query.","parameters":{"type":"object","properties":{"query":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["schedules.read"],"class":"read"},{"name":"schedules.get","description":"Read a schedule by id, optionally returning the rendered timeline between `since` and `until`.","parameters":{"type":"object","properties":{"scheduleId":{"type":"string"},"since":{"type":"string","description":"ISO-8601 start of the rendered timeline."},"until":{"type":"string","description":"ISO-8601 end of the rendered timeline."},"timeZone":{"type":"string","description":"IANA tz used to render the schedule."}},"required":["scheduleId"]},"requiredScopes":["schedules.read"],"class":"read"},{"name":"oncalls.list","description":"List on-call entries — who is currently or imminently on call for which escalation policy / level / time range.","parameters":{"type":"object","properties":{"escalationPolicyIds":{"type":"array","items":{"type":"string"}},"userIds":{"type":"array","items":{"type":"string"}},"scheduleIds":{"type":"array","items":{"type":"string"}},"since":{"type":"string","description":"ISO-8601 lower bound."},"until":{"type":"string","description":"ISO-8601 upper bound."},"earliest":{"type":"boolean","description":"If true, return only the earliest active on-call per layer."},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["oncalls.read"],"class":"read"},{"name":"teams.list","description":"List teams, optionally filtered by substring query.","parameters":{"type":"object","properties":{"query":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["teams.read"],"class":"read"},{"name":"users.list","description":"List PagerDuty users, optionally filtered by substring query or team.","parameters":{"type":"object","properties":{"query":{"type":"string"},"teamIds":{"type":"array","items":{"type":"string"}},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["users.read"],"class":"read"},{"name":"users.get","description":"Read a single user by id.","parameters":{"type":"object","properties":{"userId":{"type":"string"}},"required":["userId"]},"requiredScopes":["users.read"],"class":"read"},{"name":"users.me","description":"Read the user the connected credential authenticates as.","parameters":{"type":"object","properties":{}},"requiredScopes":["users.read"],"class":"read"}]},{"kind":"pandadoc","displayName":"PandaDoc","description":"Draft contracts and proposals from PandaDoc templates, send them for signature, poll signing status, and cancel in-flight documents.","auth":{"kind":"oauth2","authorizationUrl":"https://app.pandadoc.com/oauth2/authorize","tokenUrl":"https://api.pandadoc.com/oauth2/access_token","scopes":["read","read+write"],"clientIdEnv":"PANDADOC_OAUTH_CLIENT_ID","clientSecretEnv":"PANDADOC_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"search_documents","class":"read","description":"List PandaDoc documents matching a free-text query, status, or template id. Returns up to `limit` rows (default 25, max 100).","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Free-text query against document name (q=)."},"status":{"type":"string","description":"PandaDoc status filter — one of 'document.draft', 'document.sent', 'document.completed', 'document.voided', etc."},"templateId":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25}}}},{"name":"get_document","class":"read","description":"Fetch full details for a PandaDoc document: status, recipients, fields, pricing tables, and tokens.","parameters":{"type":"object","properties":{"documentId":{"type":"string"}},"required":["documentId"]}},{"name":"create_document","class":"mutation","description":"Draft a new PandaDoc document from a template. The idempotencyKey is written to metadata so retries of the same key resolve to the same draft.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"name":{"type":"string"},"templateId":{"type":"string","description":"PandaDoc template uuid."},"recipients":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"role":{"type":"string"},"signingOrder":{"type":"integer"}},"required":["email"]}},"tokens":{"type":"array","description":"Template token substitutions (name/value pairs).","items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}},"required":["name","value"]}},"fields":{"type":"object","additionalProperties":{"type":"object","additionalProperties":true},"description":"Map of field name → { value, role? } pairs to prefill."},"pricingTables":{"type":"array","items":{"type":"object","additionalProperties":true}},"metadata":{"type":"object","additionalProperties":true},"tags":{"type":"array","items":{"type":"string"}}},"required":["name","templateId","recipients"]}},{"name":"send_document","class":"mutation","description":"Transition a draft document into the sent state, optionally overriding the email subject and message. Re-sending a sent document is a contention.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"documentId":{"type":"string"},"subject":{"type":"string"},"message":{"type":"string"},"sender":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"}}},"silent":{"type":"boolean","default":false,"description":"When true, PandaDoc skips the recipient email and just marks the document as sent."}},"required":["documentId"]}},{"name":"cancel_document","class":"mutation","description":"Cancel/void an in-flight PandaDoc document. Idempotent at the upstream — re-cancelling returns idempotentReplay=true.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"documentId":{"type":"string"},"reason":{"type":"string"}},"required":["documentId"]}}]},{"kind":"paperform","displayName":"Paperform","description":"Manage Paperform spaces, forms, products, coupons, and submissions.","auth":{"kind":"api-key","hint":"Paperform API key."},"category":"webhook","defaultConsistencyModel":"authoritative","capabilities":[{"name":"spaces.create","description":"Create a new space.","parameters":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"spaces.update","description":"Update a space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"}},"required":["spaceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"spaces.find","description":"Find a space by ID.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"}},"required":["spaceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.find","description":"Find a form.","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"submissions.find","description":"Find a form submission by ID.","parameters":{"type":"object","properties":{"submissionId":{"type":"string"}},"required":["submissionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"submissions.delete","description":"Delete a form submission.","parameters":{"type":"object","properties":{"submissionId":{"type":"string"}},"required":["submissionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"partial_submissions.delete","description":"Delete a partial form submission.","parameters":{"type":"object","properties":{"partialSubmissionId":{"type":"string"}},"required":["partialSubmissionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.create","description":"Create a form product.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"name":{"type":"string"},"sku":{"type":"string"},"price":{"type":"number"},"quantity":{"type":"number"},"discountable":{"type":"boolean"},"imageUrl":{"type":"string"}},"required":["formId","name","sku","price"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.update","description":"Update a form product.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"productId":{"type":"string"},"name":{"type":"string"},"price":{"type":"number"},"quantity":{"type":"number"},"discountable":{"type":"boolean"}},"required":["formId","productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"products.delete","description":"Delete a form product.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"productId":{"type":"string"}},"required":["formId","productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.find","description":"Find a form product.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"search":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"coupons.create","description":"Create a form coupon.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"code":{"type":"string"},"discountType":{"type":"string"},"discountAmount":{"type":"number"},"discountPercentage":{"type":"number"},"enabled":{"type":"boolean"},"expiresAt":{"type":"string"}},"required":["formId","code","discountType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"coupons.update","description":"Update a form coupon.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"couponId":{"type":"string"},"enabled":{"type":"boolean"},"discountAmount":{"type":"number"},"discountPercentage":{"type":"number"}},"required":["formId","couponId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"coupons.delete","description":"Delete a form coupon.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"couponId":{"type":"string"}},"required":["formId","couponId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"parquet-files","displayName":"Parquet Files","description":"Read bounded Apache Parquet files and create Parquet files from structured records.","auth":{"kind":"none"},"defaultConsistencyModel":"advisory","category":"database","capabilities":[{"name":"parquet.read","class":"read","description":"Read selected columns and a bounded row range from a base64-encoded Parquet file.","parameters":{"type":"object","properties":{"fileBase64":{"type":"string","description":"Parquet file content encoded as canonical base64."},"columns":{"type":"array","maxItems":256,"items":{"type":"string","minLength":1}},"rowStart":{"type":"integer","minimum":0,"default":0},"rowLimit":{"type":"integer","minimum":1,"maximum":10000,"default":10000}},"required":["fileBase64"],"additionalProperties":false}},{"name":"parquet.create","class":"mutation","description":"Create a base64-encoded Parquet file from object records with inferred column types.","parameters":{"type":"object","properties":{"records":{"type":"array","minItems":1,"maxItems":10000,"items":{"type":"object"}}},"required":["records"],"additionalProperties":false},"cas":"none","externalEffect":true}]},{"kind":"parseur","displayName":"Parseur","description":"Extract structured data from emails, PDFs, invoices, and forms. Create documents, process files, and retrieve parsed results.","auth":{"kind":"api-key","hint":"Parseur API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"documents.find","description":"Find a document by name or search criteria.","parameters":{"type":"object","properties":{"search":{"type":"string","description":"Search term to filter documents by name (case insensitive)."},"limit":{"type":"integer","description":"Maximum number of documents to return."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.get","description":"Get a parsed document by its ID.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"The ID of the document."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.create","description":"Create a new document for parsing from email data.","parameters":{"type":"object","properties":{"subject":{"type":"string","description":"The subject of the document/email."},"from":{"type":"string","description":"The sender email address."},"recipient":{"type":"string","description":"The recipient email address."},"to":{"type":"string","description":"The to email address."},"cc":{"type":"string","description":"The cc email address."},"bcc":{"type":"string","description":"The bcc email address."},"body_html":{"type":"string","description":"The HTML content of the document/email."},"body_plain":{"type":"string","description":"The plain text content of the document/email."},"message_headers":{"type":"object","description":"A JSON object representing the email headers (key-value pairs)."}},"required":["subject","from","recipient"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.createFromFile","description":"Create a new document for parsing from a file upload.","parameters":{"type":"object","properties":{"file":{"type":"string","description":"The file to upload."},"subject":{"type":"string","description":"The subject of the document."},"from":{"type":"string","description":"The sender email address."},"recipient":{"type":"string","description":"The recipient email address."}},"required":["file","subject","from","recipient"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.reprocess","description":"Reprocess a document to extract data again.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"The ID of the document to reprocess."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"documents.delete","description":"Delete a document / parse job by ID.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"The ID of the document to delete."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"templates.list","description":"List parser templates configured for a given mailbox (parser).","parameters":{"type":"object","properties":{"parserId":{"type":"string","description":"The ID of the parser (mailbox) whose templates to list. In Parseur, templates are scoped to a parser."},"limit":{"type":"integer","description":"Maximum number of templates to return."}},"required":["parserId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"templates.train","description":"Submit feedback to retrain a template. The body is forwarded as-is so callers can pass corrected field positions, sample text, or layout adjustments per the Parseur template-training spec.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"The ID of the template to train."},"document_id":{"type":"string","description":"Optional ID of a document whose extraction was incorrect."},"fields":{"type":"array","description":"Corrected field values to use as training feedback."},"sample_text":{"type":"string","description":"Raw text that the template should match."}},"required":["templateId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"mailboxes.list","description":"List parser mailboxes (Parseur exposes mailboxes through its parsers endpoint).","parameters":{"type":"object","properties":{"search":{"type":"string","description":"Search term to filter mailboxes by name."},"limit":{"type":"integer","description":"Maximum number of mailboxes to return."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"pastefy","displayName":"Pastefy","description":"Create and retrieve code snippets on Pastefy.","auth":{"kind":"api-key","hint":"Pastefy instance URL and API token."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"pastes.list","description":"List all pastes.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pastes.get","description":"Retrieve a specific paste by ID.","parameters":{"type":"object","properties":{"paste_id":{"type":"string"}},"required":["paste_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pastes.create","description":"Create a new code snippet paste.","parameters":{"type":"object","properties":{"name":{"type":"string"},"content":{"type":"string"},"title":{"type":"string"},"password":{"type":"string"},"expiry":{"type":"string"}},"required":["name","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pastes.delete","description":"Delete a paste by ID.","parameters":{"type":"object","properties":{"paste_id":{"type":"string"}},"required":["paste_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"pastes.update","description":"Update the content, title, or metadata of a paste.","parameters":{"type":"object","properties":{"paste_id":{"type":"string"},"title":{"type":"string"},"content":{"type":"string"},"name":{"type":"string"},"folder":{"type":"string"},"visibility":{"type":"string"}},"required":["paste_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"folders.list","description":"List user folders.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"folders.create","description":"Create a new folder for organizing pastes.","parameters":{"type":"object","properties":{"name":{"type":"string"},"parent":{"type":"string","description":"Optional parent folder ID."},"visibility":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pastes.share","description":"Generate a share link for a paste. Pastefy returns a token-bearing URL the caller can hand out.","parameters":{"type":"object","properties":{"paste_id":{"type":"string"},"expires_at":{"type":"string","description":"Optional ISO-8601 expiry for the share link."}},"required":["paste_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"paychex","displayName":"Paychex","description":"Read HR and payroll data from Paychex: companies, workers, worker profiles, compensation, pay rates, communications, and federal tax setup.","auth":{"kind":"oauth2","grantType":"client_credentials","tokenUrl":"https://api.paychex.com/auth/oauth/v2/token","scopes":[],"clientIdEnv":"PAYCHEX_OAUTH_CLIENT_ID","clientSecretEnv":"PAYCHEX_OAUTH_CLIENT_SECRET"},"category":"hr","defaultConsistencyModel":"authoritative","capabilities":[{"name":"companies.list","description":"List all companies the app has been granted access to. Each carries the companyId (UUID) needed for company-scoped calls.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Page size, max 100 (default 25)."},"offset":{"type":"integer","description":"Zero-based pagination offset."},"displayid":{"type":"string","description":"Filter by the company display id."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.get","description":"Read a single company by companyId.","parameters":{"type":"object","properties":{"companyId":{"type":"string"}},"required":["companyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.workers.list","description":"List workers (employees + contractors) for a company. Minimal fields per worker (givenName, familyName, legalId, workerId); sub-resources are separate calls. Use statusType=ACTIVE to exclude terminated workers.","parameters":{"type":"object","properties":{"companyId":{"type":"string"},"limit":{"type":"integer","description":"Page size, max 100."},"offset":{"type":"integer"},"statusType":{"type":"string","description":"e.g. ACTIVE to exclude terminated workers."},"employeeId":{"type":"string","description":"Filter to a specific employee id."}},"required":["companyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workers.get","description":"Full profile for a single worker: demographics, employment type, hire date, current status, job info.","parameters":{"type":"object","properties":{"workerId":{"type":"string"}},"required":["workerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workers.compensation.get","description":"Compensation overview for a worker: payFrequency, flsaStatus, calculatedAnnualPay, calculatedPayPeriod, defaultOvertimeFactor (with HATEOAS links to payrates and paystandards).","parameters":{"type":"object","properties":{"workerId":{"type":"string"}},"required":["workerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workers.compensation.payrates.list","description":"All pay rate profiles for a worker (up to 25): rateId, startDate, rateType, amount, standardHours, standardOvertime. `asof` scopes to an effective date.","parameters":{"type":"object","properties":{"workerId":{"type":"string"},"asof":{"type":"string","description":"Effective date to scope the rates to (YYYY-MM-DD)."}},"required":["workerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workers.compensation.paystandards.get","description":"Pay standards for a worker: payFrequency (WEEKLY/BI_WEEKLY/SEMI_MONTHLY/MONTHLY), defaultOvertimeFactor, calculatedPayPeriod, calculatedAnnualSalary.","parameters":{"type":"object","properties":{"workerId":{"type":"string"}},"required":["workerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workers.communications.list","description":"Worker contact info (email addresses, phone numbers) — not embedded in the base worker profile.","parameters":{"type":"object","properties":{"workerId":{"type":"string"}},"required":["workerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workers.federaltax.get","description":"W-4 federal tax withholding configuration for a worker.","parameters":{"type":"object","properties":{"workerId":{"type":"string"}},"required":["workerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"paywhirl","displayName":"Paywhirl","description":"Paywhirl integration for managing customers, subscriptions, and recurring billing.","auth":{"kind":"api-key","hint":"Paywhirl API key. Set source.metadata.apiSecret to the matching API secret."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"customers.create","description":"Create a new customer in Paywhirl.","parameters":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"currency":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"},"country":{"type":"string"},"password":{"type":"string"},"gatewayId":{"type":"string"},"utmSource":{"type":"string"},"utmMedium":{"type":"string"},"utmTerm":{"type":"string"},"utmContent":{"type":"string"},"utmCampaign":{"type":"string"},"utmGroup":{"type":"string"}},"required":["firstName","lastName","email","currency"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.get","description":"Retrieve a customer by ID.","parameters":{"type":"object","properties":{"customerId":{"type":"string"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.search","description":"Search for customers with pagination and filtering.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"orderKey":{"type":"string"},"orderDirection":{"type":"string"},"beforeId":{"type":"integer"},"afterId":{"type":"integer"},"keyword":{"type":"string"},"status":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.create","description":"Subscribe a customer to a plan.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"planId":{"type":"integer"},"trialEnd":{"type":"integer"},"promoId":{"type":"integer"},"quantity":{"type":"integer"}},"required":["customerId","planId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.cancel","description":"Cancel a customer subscription.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"integer"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.search","description":"Search customer subscriptions.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"orderKey":{"type":"string"},"orderDirection":{"type":"string"},"beforeId":{"type":"integer"},"afterId":{"type":"integer"},"keyword":{"type":"string"},"status":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.update","description":"Update an existing customer's profile fields.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"currency":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"},"country":{"type":"string"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.delete","description":"Delete a customer from Paywhirl.","parameters":{"type":"object","properties":{"customerId":{"type":"string"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.create","description":"Create a one-off invoice for a customer.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"amount":{"type":"number"},"currency":{"type":"string"},"description":{"type":"string"},"dueDate":{"type":"string"}},"required":["customerId","amount"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.pause","description":"Pause an active customer subscription.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"integer"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"pdfmonkey","displayName":"PDFMonkey","description":"Generate, find, and delete PDF documents using PDFMonkey templates.","auth":{"kind":"api-key","hint":"PDFMonkey API key."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"documents.generate","description":"Generate a new PDF document from a template.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"PDFMonkey template ID."},"payload":{"type":"object","description":"Data to use for document generation."},"meta":{"type":"object","description":"Meta-data to attach to the document."},"fileName":{"type":"string","description":"Custom file name for the generated document."},"status":{"type":"string","description":"Document status (draft, completed, archived)."}},"required":["templateId","payload"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.find","description":"Retrieve a specific PDF document by ID.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"PDFMonkey document ID."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.list","description":"List all PDF documents.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of documents to return."},"offset":{"type":"integer","description":"Number of documents to skip."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.delete","description":"Delete a PDF document.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"PDFMonkey document ID to delete."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"templates.list","description":"List the PDF templates available in the PDFMonkey workspace.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of templates to return."},"offset":{"type":"integer","description":"Number of templates to skip."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.share","description":"Generate a public share URL for an existing PDFMonkey document.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"PDFMonkey document ID to share."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.regenerate","description":"Regenerate a previously generated PDFMonkey document, producing a new render.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"PDFMonkey document ID to regenerate."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"peekshot","displayName":"PeekShot","description":"Capture screenshots of web pages with customizable dimensions, CSS, and JavaScript injection.","auth":{"kind":"api-key","hint":"PeekShot API key or target URL."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"capture.screenshot","description":"Capture a screenshot of a target URL with optional customization.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Target URL to capture."},"width":{"type":"integer","description":"Custom screenshot width in pixels."},"height":{"type":"integer","description":"Custom screenshot height in pixels."},"file_type":{"type":"string","description":"Output format: jpeg, png, webp."},"inject_css":{"type":"string","description":"Custom CSS to apply before capture."},"inject_js":{"type":"string","description":"Custom JavaScript to execute before capture."},"full_page":{"type":"boolean","description":"Capture the entire page instead of viewport."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"perplexity-ai","displayName":"Perplexity AI","description":"Create chat completions using Perplexity AI models.","auth":{"kind":"api-key","hint":"Perplexity AI API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"chat.create-completion","description":"Create a chat completion using Perplexity AI.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"The model to use (e.g., pplx-7b-online, pplx-70b-online, pplx-8x7b-online)."},"messages":{"type":"array","description":"Array of message objects with role and content."},"temperature":{"type":"number","description":"Controls randomness (0-2). Higher values increase randomness."},"top_p":{"type":"number","description":"Nucleus sampling threshold (0-1). Affects diversity of responses."},"top_k":{"type":"integer","description":"Limits token selection to top k most likely tokens."},"max_tokens":{"type":"integer","description":"Maximum number of tokens to generate."},"frequency_penalty":{"type":"number","description":"Penalizes frequent tokens (-2 to 2)."},"presence_penalty":{"type":"number","description":"Penalizes tokens already in the prompt (-2 to 2)."}},"required":["model","messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"personal-ai","displayName":"Personal AI","description":"Manage memory storage, messaging, and documents through AI integration.","auth":{"kind":"api-key","hint":"Personal AI API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"memory.create","description":"Create a new memory with ChatGPT instruction text and optional context.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"The instruction or prompt to send to ChatGPT"},"context":{"type":"string","description":"Additional context for the AI response"},"domainName":{"type":"string","description":"The domain identifier for the AI profile"},"userName":{"type":"string","description":"Name of the user sending the request"},"sessionId":{"type":"string","description":"Use the same sessionId to continue conversation"},"sourceName":{"type":"string","description":"Name of the source app of the inbound instruction"},"isStack":{"type":"boolean","description":"Flag to also add the user instruction to memory"}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"message.create","description":"Create a new message in a conversation.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"The message text"},"channelId":{"type":"string","description":"The unique identifier for the conversation channel"},"isDraft":{"type":"boolean","description":"Flag to create a copilot message for the AI"}},"required":["text","channelId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversation.get","description":"Get messages from a conversation channel with optional pagination.","parameters":{"type":"object","properties":{"channelId":{"type":"string","description":"The unique identifier for the conversation channel"},"limit":{"type":"integer","description":"Maximum number of messages to return"},"skip":{"type":"integer","description":"Number of messages to skip for pagination"}},"required":["channelId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"training.create","description":"Create custom training data for the AI.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"The training instruction text"},"context":{"type":"string","description":"Additional context for training"}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"document.get","description":"Get a document by ID with optional content inclusion.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"The unique identifier of the document"},"includeContent":{"type":"boolean","description":"Flag to include the document content in response"}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"document.upload","description":"Upload a document with file or URL.","parameters":{"type":"object","properties":{"fileName":{"type":"string","description":"Name of the file to be uploaded"},"url":{"type":"string","description":"The URL of the content to upload"}},"required":["fileName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"document.update","description":"Update a document with new metadata.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"The unique identifier of the document"},"title":{"type":"string","description":"Updated title of the document"},"tags":{"type":"string","description":"Comma delimited list of tags for the document"},"createdTime":{"type":"string","description":"Time (including timezone) of document creation"}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"memory.delete","description":"Delete a memory entry from the Personal AI memory store.","parameters":{"type":"object","properties":{"memoryId":{"type":"string","description":"The unique identifier of the memory entry to delete."}},"required":["memoryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"document.delete","description":"Delete a document from the AI's knowledge base.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"The unique identifier of the document to delete."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"training.delete","description":"Delete a custom training entry from the Personal AI training set.","parameters":{"type":"object","properties":{"trainingId":{"type":"string","description":"The unique identifier of the training entry to delete."}},"required":["trainingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"persona.update","description":"Update persona settings (display name, tone, instructions) for the Personal AI profile.","parameters":{"type":"object","properties":{"displayName":{"type":"string","description":"Display name shown for this persona."},"tone":{"type":"string","description":"Tone descriptor used to shape AI responses."},"instructions":{"type":"string","description":"Free-form system instructions for the persona."},"domainName":{"type":"string","description":"Domain identifier for the AI profile this persona belongs to."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"phantombuster","displayName":"PhantomBuster","description":"Launch PhantomBuster Phantoms (automation agents) that scrape and extract data from sites like LinkedIn, then retrieve their output and results.","auth":{"kind":"api-key","hint":"API key from your PhantomBuster dashboard (Workspace settings -> API key). Sent in the X-Phantombuster-Key header."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"agents.fetch_all","description":"List all Phantoms (agents) in the current organization.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"agents.fetch","description":"Fetch the configuration and metadata of a single Phantom by its agent id.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Id of the agent (Phantom) to fetch."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"agents.launch","description":"Launch a Phantom (agent), optionally passing arguments, and start a new run (container).","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Id of the agent (Phantom) to launch."},"argument":{"type":"object","description":"JSON object of arguments overriding the Phantom's saved configuration for this run."},"bonusArgument":{"type":"object","description":"Additional one-off arguments merged for this launch only."},"saveArgument":{"type":"boolean","description":"Persist the provided argument as the Phantom's default configuration."},"manualLaunch":{"type":"boolean","description":"Mark the launch as manual."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"agents.fetch_output","description":"Retrieve the console output and most recent container status of a Phantom's run by agent id.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Id of the agent to fetch output from."},"fromOutputPos":{"type":"number","description":"Position from which to start returning output."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"containers.fetch_output","description":"Retrieve the console output of a specific Phantom run (container) by its container id.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Id of the container (run) to fetch output from."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"phony","displayName":"ph0ny","description":"Place real outbound phone calls with a voice agent, then read back call status, transcript, and extracted fields. Outbound calls require recorded user consent and support a dry-run that validates the full configuration without dialing.","auth":{"kind":"api-key","hint":"Paste your ph0ny API key (plabs_…). Create one in the developer portal via POST /v1/keys — it is shown once."},"category":"comms","defaultConsistencyModel":"cache","capabilities":[{"name":"list_agents","class":"read","description":"List the voice agents on your ph0ny developer account (newest first).","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100,"default":20},"cursor":{"type":"string","description":"Pagination cursor from a prior response."}}}},{"name":"get_call","class":"read","description":"Fetch a single outbound call by id, including status, transcript, and extracted fields.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Outbound call id returned by start_outbound_call."}},"required":["id"]}},{"name":"list_calls","class":"read","description":"List recent outbound calls for the account, optionally filtered by agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string","description":"Optional filter — only calls placed by this agent."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":20}}}},{"name":"start_outbound_call","class":"mutation","description":"Place an outbound phone call. Requires userConsentRecorded=true (the user must have explicitly authorized the call). Set dryRun=true to validate the full configuration without dialing.","cas":"none","externalEffect":true,"parameters":{"type":"object","properties":{"agentId":{"type":"string","description":"Agent that will place the call (agentKind must be personal_assistant)."},"toNumber":{"type":"string","description":"E.164 destination, e.g. +14155551212."},"fromNumber":{"type":"string","description":"E.164 caller number provisioned to your developer account."},"mission":{"type":"object","description":"What the agent should accomplish on the call.","properties":{"goal":{"type":"string","description":"Plain-language objective (8–2000 chars)."},"successSchema":{"type":"object","description":"Optional JSON schema describing fields to extract on success."},"ivrHints":{"type":"array","items":{"type":"string"},"description":"Optional hints for navigating phone-tree / IVR menus (≤8 entries)."},"maxTurns":{"type":"integer","minimum":1,"maximum":60},"maxDurationMs":{"type":"integer","minimum":30000,"maximum":1200000}},"required":["goal"]},"missionId":{"type":"string","description":"Optional caller-supplied mission id."},"callerProfile":{"type":"object","properties":{"userName":{"type":"string"},"companyName":{"type":"string"}}},"voiceCloneId":{"type":"string","description":"Optional cloned-voice id to speak with."},"userConsentRecorded":{"type":"boolean","description":"REQUIRED. Must be true — the user explicitly authorized this call. ph0ny rejects false."},"dryRun":{"type":"boolean","description":"When true, validate every gate and return a dryRunReport without placing the call."}},"required":["agentId","toNumber","fromNumber","mission","userConsentRecorded"]}},{"name":"create_agent","class":"mutation","description":"Create a voice agent on your ph0ny developer account. Only name is required; the rest configure the LLM, TTS, voice, knowledge base, and capture behavior.","cas":"none","externalEffect":true,"parameters":{"type":"object","properties":{"id":{"type":"string","description":"Optional caller-supplied agent id (1–60 chars)."},"name":{"type":"string","description":"Display name (1–100 chars)."},"description":{"type":"string","description":"Optional description (≤1000 chars)."},"systemPrompt":{"type":"string","description":"Optional system prompt (≤10000 chars)."},"firstMessage":{"type":"string","description":"Optional opening line the agent speaks first (≤1000 chars)."},"voiceId":{"type":"string","description":"Optional TTS voice id."},"ttsProvider":{"type":"string","description":"TTS provider; \"default\" lets ph0ny choose."},"ttsModel":{"type":"string","description":"Optional TTS model id."},"sttProvider":{"type":"string","description":"Optional speech-to-text provider."},"llmProvider":{"type":"string","description":"LLM provider (e.g. openai, anthropic). Defaults to openai server-side."},"llmModel":{"type":"string","description":"Optional LLM model id."},"libraryId":{"type":"string","description":"Ingest-service library id (preferred over collectionId)."},"collectionId":{"type":"string","description":"Deprecated — KB collection id to attach. Prefer libraryId."},"styleProfile":{"type":"object","description":"Optional style profile object."},"promptByModel":{"type":"object","description":"Optional per-model prompt overrides (modelId → prompt)."},"language":{"type":"string","description":"BCP-47 language code; defaults to \"en\"."},"temperature":{"type":"number","minimum":0,"maximum":2,"description":"Sampling temperature (0–2); defaults to 0.7."},"maxTokens":{"type":"integer","minimum":1,"maximum":16384,"description":"Optional max output tokens."},"contactCaptureEnabled":{"type":"boolean","description":"Enable structured contact capture during calls."},"contactCaptureFields":{"type":"array","items":{"type":"string","enum":["name","email","phone"]},"description":"Which contact fields to capture when capture is enabled."},"metadata":{"type":"object","description":"Arbitrary metadata object stored with the agent."}},"required":["name"]}},{"name":"provision_agent","class":"mutation","description":"Create an agent and, in the same atomic call, optionally a fresh knowledge-base collection and seed it with initial content. Returns the agent plus the created collection and ingestion results.","cas":"none","externalEffect":true,"parameters":{"type":"object","properties":{"id":{"type":"string","description":"Optional caller-supplied agent id (1–60 chars)."},"name":{"type":"string","description":"Display name (1–100 chars)."},"description":{"type":"string","description":"Optional description (≤1000 chars)."},"systemPrompt":{"type":"string","description":"Optional system prompt (≤10000 chars)."},"firstMessage":{"type":"string","description":"Optional opening line the agent speaks first (≤1000 chars)."},"voiceId":{"type":"string","description":"Optional TTS voice id."},"ttsProvider":{"type":"string","description":"TTS provider; \"default\" lets ph0ny choose."},"ttsModel":{"type":"string","description":"Optional TTS model id."},"sttProvider":{"type":"string","description":"Optional speech-to-text provider."},"llmProvider":{"type":"string","description":"LLM provider (e.g. openai, anthropic). Defaults to openai server-side."},"llmModel":{"type":"string","description":"Optional LLM model id."},"libraryId":{"type":"string","description":"Ingest-service library id (preferred over collectionId)."},"collectionId":{"type":"string","description":"Existing KB collection id to attach instead of creating one."},"styleProfile":{"type":"object","description":"Optional style profile object."},"promptByModel":{"type":"object","description":"Optional per-model prompt overrides (modelId → prompt)."},"language":{"type":"string","description":"BCP-47 language code; defaults to \"en\"."},"temperature":{"type":"number","minimum":0,"maximum":2,"description":"Sampling temperature (0–2); defaults to 0.7."},"maxTokens":{"type":"integer","minimum":1,"maximum":16384,"description":"Optional max output tokens."},"contactCaptureEnabled":{"type":"boolean","description":"Enable structured contact capture during calls."},"contactCaptureFields":{"type":"array","items":{"type":"string","enum":["name","email","phone"]},"description":"Which contact fields to capture when capture is enabled."},"metadata":{"type":"object","description":"Arbitrary metadata object stored with the agent."},"collection":{"type":"object","description":"When present, create a fresh KB collection and attach it to the agent.","properties":{"name":{"type":"string","description":"Collection name (1–100 chars)."},"description":{"type":"string","description":"Optional collection description (≤500 chars)."}},"required":["name"]},"initialContent":{"type":"array","maxItems":10,"description":"Documents to ingest into the new/attached collection (≤10).","items":{"type":"object","properties":{"content":{"type":"string","description":"Raw text or transcript content."},"contentType":{"type":"string","enum":["text","transcript"],"description":"Defaults to \"text\"."},"metadata":{"type":"object","description":"Arbitrary metadata stored with the document."}},"required":["content"]}}},"required":["name"]}},{"name":"kb_create_collection","class":"mutation","description":"Create a knowledge-base collection the agent can search at call time.","cas":"none","externalEffect":true,"parameters":{"type":"object","properties":{"name":{"type":"string","description":"Collection name (1–100 chars)."},"description":{"type":"string","description":"Optional description (≤500 chars)."},"metadata":{"type":"object","description":"Arbitrary metadata object stored with the collection."}},"required":["name"]}},{"name":"kb_ingest","class":"mutation","description":"Chunk, embed, and store content into a KB collection. Provide content directly (≤1MB), or a sourceUrl for audio transcription. contentType \"url\" is not yet implemented server-side (501).","cas":"none","externalEffect":true,"parameters":{"type":"object","properties":{"collectionId":{"type":"string","description":"Target collection id."},"content":{"type":"string","description":"Raw text/transcript content (≤1,000,000 chars)."},"sourceUrl":{"type":"string","description":"Public URL — required when contentType is \"audio\" (transcribed) or \"url\"."},"contentType":{"type":"string","enum":["text","transcript","audio","url"],"description":"Defaults to \"text\". \"audio\" transcribes sourceUrl; \"url\" returns 501."},"metadata":{"type":"object","description":"Arbitrary metadata stored with the document."},"chunkSize":{"type":"integer","minimum":100,"maximum":4000,"description":"Chunk size in chars; defaults to 1000."},"chunkOverlap":{"type":"integer","minimum":0,"maximum":500,"description":"Chunk overlap in chars; defaults to 200. Must be < chunkSize."}},"required":["collectionId"]}},{"name":"kb_search","class":"read","description":"Hybrid vector + keyword search over a KB collection. Returns ranked results with scores.","parameters":{"type":"object","properties":{"collectionId":{"type":"string","description":"Collection id to search."},"query":{"type":"string","description":"Search query (1–2000 chars)."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Max results; defaults to 10."},"threshold":{"type":"number","minimum":0,"maximum":1,"description":"Minimum similarity score; defaults to 0.7."},"includeMetadata":{"type":"boolean","description":"Include per-result metadata; defaults to true."}},"required":["collectionId","query"]}}]},{"kind":"pinch-payments","displayName":"Pinch Payments","description":"Australian payment processing platform for direct debits, credit cards, and recurring payments. Create payers, process payments, manage subscriptions, and handle payment sources.","auth":{"kind":"api-key","hint":"Pinch Payments API credentials (Application ID and Secret Key)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"payers.create-or-update","description":"Create or update a payer with contact information and metadata.","parameters":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"emailAddress":{"type":"string"},"mobileNumber":{"type":"string"},"companyName":{"type":"string"},"streetAddress":{"type":"string"},"suburb":{"type":"string"},"state":{"type":"string"},"postcode":{"type":"string"},"country":{"type":"string"},"metadata":{"type":"object"}},"required":["firstName","emailAddress"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payers.find","description":"Find a payer by ID or email.","parameters":{"type":"object","properties":{"payerId":{"type":"string"}},"required":["payerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sources.add-to-payer","description":"Add a payment source (bank account or credit card) to a payer.","parameters":{"type":"object","properties":{"payerId":{"type":"string"},"sourceType":{"type":"string"},"token":{"type":"string"},"bankAccountNumber":{"type":"string"},"bankAccountBsb":{"type":"string"},"bankAccountName":{"type":"string"}},"required":["payerId","sourceType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payments.create-realtime","description":"Create and process a real-time payment (immediate debit).","parameters":{"type":"object","properties":{"payerId":{"type":"string"},"amount":{"type":"number"},"description":{"type":"string"},"sourceId":{"type":"string"},"nonce":{"type":"string"}},"required":["payerId","amount"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payments.create-or-update-scheduled","description":"Create or update a scheduled payment for a future transaction date.","parameters":{"type":"object","properties":{"paymentId":{"type":"string"},"payerId":{"type":"string"},"amount":{"type":"number"},"transactionDate":{"type":"string"},"description":{"type":"string"},"sourceId":{"type":"string"},"applicationFee":{"type":"number"}},"required":["payerId","amount","transactionDate"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"subscriptions.create-or-update","description":"Create or update a subscription for recurring payments.","parameters":{"type":"object","properties":{"payerId":{"type":"string"},"planId":{"type":"string"},"sourceId":{"type":"string"},"startDate":{"type":"string"},"totalAmount":{"type":"number"},"surcharge":{"type":"string"}},"required":["payerId","planId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.find","description":"Find a subscription by ID.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"events.find","description":"Find an event by ID.","parameters":{"type":"object","properties":{"eventId":{"type":"string"}},"required":["eventId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"payments.refund","description":"Refund a real-time payment.","parameters":{"type":"object","properties":{"paymentId":{"type":"string"},"amount":{"type":"number"},"reason":{"type":"string"}},"required":["paymentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.cancel","description":"Cancel a subscription.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payers.delete","description":"Delete a payer record.","parameters":{"type":"object","properties":{"payerId":{"type":"string"}},"required":["payerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sources.remove","description":"Remove a payment source from a payer.","parameters":{"type":"object","properties":{"payerId":{"type":"string"},"sourceId":{"type":"string"}},"required":["payerId","sourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"pinecone","displayName":"Pinecone","description":"Manage Pinecone indexes and collections, upsert and query dense / sparse vectors, fetch by id, and drive Pinecone Assistants. Vector data-plane calls require metadata.indexHost from the index describe response.","auth":{"kind":"api-key","hint":"Pinecone API key (pcsk_…) from https://app.pinecone.io → Project → API Keys. Project-scoped — connect one DataSource per Pinecone project. For data-plane operations also set metadata.indexHost to the host returned by GET /indexes/{indexName}."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"indexes.list","description":"List every index in the project the API key is scoped to. Returns name, dimension, metric, spec, status, host.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"indexes.describe","description":"Fetch metadata for a single index. The returned .host is what the caller must persist on metadata.indexHost before invoking any vectors.* capability.","parameters":{"type":"object","properties":{"indexName":{"type":"string"}},"required":["indexName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"indexes.create","description":"Create a new index. Pass `name`, `dimension`, `metric` (cosine|euclidean|dotproduct), and `spec` (serverless { cloud, region } OR pod { environment, pod_type, pods, replicas, shards }).","parameters":{"type":"object","properties":{"name":{"type":"string"},"dimension":{"type":"integer","minimum":1},"metric":{"type":"string","enum":["cosine","euclidean","dotproduct"]},"spec":{"type":"object"},"deletion_protection":{"type":"string","enum":["enabled","disabled"]},"tags":{"type":"object"},"vector_type":{"type":"string","enum":["dense","sparse"]}},"required":["name","dimension","metric","spec"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"indexes.configure","description":"Reconfigure an existing index — change replicas / pod_type (pod indexes), toggle deletion_protection, replace tags. Body matches the PATCH /indexes/{indexName} spec.","parameters":{"type":"object","properties":{"indexName":{"type":"string"},"spec":{"type":"object"},"deletion_protection":{"type":"string","enum":["enabled","disabled"]},"tags":{"type":"object"}},"required":["indexName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"indexes.delete","description":"Delete an index. Fails if deletion_protection is enabled — caller must indexes.configure first.","parameters":{"type":"object","properties":{"indexName":{"type":"string"}},"required":["indexName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.list","description":"List frozen-snapshot collections in the project (pod indexes only).","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"collections.describe","description":"Fetch collection metadata (size, vector_count, status, environment).","parameters":{"type":"object","properties":{"collectionName":{"type":"string"}},"required":["collectionName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"collections.create","description":"Create a collection (snapshot) from an existing pod index.","parameters":{"type":"object","properties":{"name":{"type":"string"},"source":{"type":"string","description":"Name of the source index."}},"required":["name","source"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.delete","description":"Delete a collection.","parameters":{"type":"object","properties":{"collectionName":{"type":"string"}},"required":["collectionName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"vectors.upsert","description":"Upsert vectors into a namespace. Each vector carries { id, values (dense), sparse_values?, metadata? }. Replays with the same ids overwrite — Pinecone keys on (namespace, id).","parameters":{"type":"object","properties":{"namespace":{"type":"string"},"vectors":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"values":{"type":"array","items":{"type":"number"}},"sparse_values":{"type":"object"},"metadata":{"type":"object"}},"required":["id"]}}},"required":["vectors"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"vectors.query","description":"Nearest-neighbour query against a namespace. Provide either { vector } (dense), { sparse_vector } (sparse), or { id } (server fetches the vector by id and queries with it). Returns top_k matches with optional metadata + values.","parameters":{"type":"object","properties":{"namespace":{"type":"string"},"top_k":{"type":"integer","minimum":1,"maximum":10000},"filter":{"type":"object"},"include_values":{"type":"boolean"},"include_metadata":{"type":"boolean"},"vector":{"type":"array","items":{"type":"number"}},"sparse_vector":{"type":"object"},"id":{"type":"string"}},"required":["top_k"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"vectors.fetch","description":"Fetch vectors by id from a namespace. Returns the dense values + metadata for each found id.","parameters":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}},"namespace":{"type":"string"}},"required":["ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"vectors.update","description":"Partial in-place update of a single vector — replace values, sparse_values, or metadata for an existing id.","parameters":{"type":"object","properties":{"id":{"type":"string"},"values":{"type":"array","items":{"type":"number"}},"sparse_values":{"type":"object"},"set_metadata":{"type":"object"},"namespace":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"vectors.delete","description":"Delete vectors. Either pass `ids` (specific vector ids), `filter` (metadata filter — Starter pods do not support this), or `delete_all: true` to wipe the whole namespace.","parameters":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}},"namespace":{"type":"string"},"delete_all":{"type":"boolean"},"filter":{"type":"object"}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"vectors.list","description":"List vector ids in a namespace (serverless indexes only). Supports prefix filtering and cursor pagination via pagination_token.","parameters":{"type":"object","properties":{"namespace":{"type":"string"},"prefix":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"pagination_token":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"vectors.describe_index_stats","description":"Per-namespace vector counts + total dimension count + index fullness. Useful for capacity dashboards.","parameters":{"type":"object","properties":{"filter":{"type":"object"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"assistants.list","description":"List Pinecone Assistants in the project.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"assistants.describe","description":"Fetch metadata for an assistant by name.","parameters":{"type":"object","properties":{"assistantName":{"type":"string"}},"required":["assistantName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"assistants.create","description":"Create a Pinecone Assistant. Body: { name, instructions?, metadata?, region? }.","parameters":{"type":"object","properties":{"name":{"type":"string"},"instructions":{"type":"string"},"metadata":{"type":"object"},"region":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assistants.delete","description":"Delete an assistant and its uploaded files.","parameters":{"type":"object","properties":{"assistantName":{"type":"string"}},"required":["assistantName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assistants.chat","description":"Send a chat turn to an assistant. Body: { messages: [{ role, content }], model?, stream?, filter?, json_response?, include_highlights? }. Non-idempotent — replay yields a new completion.","parameters":{"type":"object","properties":{"assistantName":{"type":"string"},"messages":{"type":"array","items":{"type":"object"}},"model":{"type":"string"},"stream":{"type":"boolean"},"filter":{"type":"object"},"json_response":{"type":"boolean"},"include_highlights":{"type":"boolean"}},"required":["assistantName","messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"assistants.update","description":"Update an existing Pinecone Assistant. Pass any subset of { instructions, metadata } — fields omitted from the body are left unchanged.","parameters":{"type":"object","properties":{"assistantName":{"type":"string"},"instructions":{"type":"string"},"metadata":{"type":"object"}},"required":["assistantName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assistants.files.delete","description":"Delete a file previously uploaded to a Pinecone Assistant. The file is removed from the assistant's knowledge base; existing chat sessions are unaffected.","parameters":{"type":"object","properties":{"assistantName":{"type":"string"},"assistantFileId":{"type":"string","description":"Assistant file ID returned by the upload endpoint."}},"required":["assistantName","assistantFileId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"backups.create","description":"Create a backup snapshot of an index. The backup is project-scoped and can be restored later via the Pinecone control plane.","parameters":{"type":"object","properties":{"indexName":{"type":"string"},"name":{"type":"string","description":"Backup name (project-unique)."},"description":{"type":"string"}},"required":["indexName","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"ping-identity","displayName":"Ping Identity","description":"Provision PingOne users, groups, and group memberships with customer-owned worker credentials.","auth":{"kind":"api-key","hint":"JSON credential bundle: {\"clientId\":\"...\",\"clientSecret\":\"...\",\"region\":\"us|ca|eu|au|asia\"}. Set environmentId in connection metadata."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.list","description":"List or filter users in the connected PingOne environment.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200},"filter":{"type":"string"},"order":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.get","description":"Read one PingOne user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"PingOne user id."}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.create","description":"Create a PingOne user from a provider-native user object.","parameters":{"type":"object","properties":{"user":{"type":"object"}},"required":["user"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.update","description":"Patch mutable fields on a PingOne user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"PingOne user id."},"user":{"type":"object"}},"required":["userId","user"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"users.deactivate","description":"Disable a PingOne user without deleting the record.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"PingOne user id."}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"groups.list","description":"List or filter groups in the PingOne environment.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200},"filter":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.get","description":"Read one PingOne group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"PingOne group id."}},"required":["groupId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.create","description":"Create a PingOne group from a provider-native group object.","parameters":{"type":"object","properties":{"group":{"type":"object"}},"required":["group"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"groups.update","description":"Patch mutable fields on a PingOne group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"PingOne group id."},"group":{"type":"object"}},"required":["groupId","group"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"groups.users.add","description":"Add a PingOne user to a group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"PingOne group id."},"userId":{"type":"string","description":"PingOne user id."}},"required":["groupId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"groups.users.remove","description":"Remove a PingOne user from a group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"PingOne group id."},"userId":{"type":"string","description":"PingOne user id."}},"required":["groupId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"pipedream","displayName":"Pipedream","description":"Manage Pipedream workflows and sources, list events, and POST payloads to HTTP-source workflow URLs.","auth":{"kind":"api-key","hint":"Pipedream API key from Account Settings > API. Sent as `Authorization: Bearer <key>`."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"workflows.list","description":"List workflows owned by the authenticated account or a specific organization workspace.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"Optional organization workspace id."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workflows.get","description":"Read a Pipedream workflow by id, including its source endpoints.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sources.list","description":"List event sources (the trigger half of a workflow).","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sources.events","description":"Read recent events emitted by a Pipedream source. Useful for polling without subscribing.","parameters":{"type":"object","properties":{"sourceId":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100}},"required":["sourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"http.trigger","description":"POST a JSON payload to a Pipedream HTTP-source workflow endpoint. Supply only its endpoint id; the provider host is fixed so credentials cannot be redirected.","parameters":{"type":"object","properties":{"endpointId":{"type":"string","description":"Subdomain id from the published `https://<id>.m.pipedream.net` endpoint."},"payload":{"type":"object"}},"required":["endpointId","payload"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.create","description":"Subscribe an emitting source/workflow to a listener so its events fan out to another workflow.","parameters":{"type":"object","properties":{"emitterId":{"type":"string"},"listenerId":{"type":"string"},"eventName":{"type":"string"}},"required":["emitterId","listenerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflows.deploy","description":"Deploy a new version of a workflow.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflows.disable","description":"Disable an active workflow.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.delete","description":"Delete an event subscription.","parameters":{"type":"object","properties":{"emitterId":{"type":"string"},"listenerId":{"type":"string"},"eventName":{"type":"string"}},"required":["emitterId","listenerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sources.create","description":"Create a new event source.","parameters":{"type":"object","properties":{"componentId":{"type":"string"}},"required":["componentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"pipedrive","displayName":"Pipedrive","description":"Search and update Pipedrive deals, persons, and organizations.","auth":{"kind":"oauth2","authorizationUrl":"https://oauth.pipedrive.com/oauth/authorize","tokenUrl":"https://oauth.pipedrive.com/oauth/token","scopes":["deals:full","contacts:full","leads:full","activities:full"],"clientIdEnv":"PIPEDRIVE_OAUTH_CLIENT_ID","clientSecretEnv":"PIPEDRIVE_OAUTH_CLIENT_SECRET","tokenMetadata":{"apiDomain":{"field":"api_domain","required":true}}},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"deals.search","description":"Search Pipedrive deals by free-text term.","parameters":{"type":"object","properties":{"term":{"type":"string"},"fields":{"type":"string"},"status":{"type":"string","enum":["open","won","lost"]},"limit":{"type":"integer","minimum":1,"maximum":500}},"required":["term"]},"requiredScopes":["deals:full"],"class":"read"},{"name":"deals.get","description":"Read a single Pipedrive deal by id.","parameters":{"type":"object","properties":{"id":{"type":"integer"}},"required":["id"]},"requiredScopes":["deals:full"],"class":"read"},{"name":"deals.create","description":"Create a Pipedrive deal.","parameters":{"type":"object","properties":{"title":{"type":"string"},"value":{"type":"number"},"currency":{"type":"string"},"person_id":{"type":"integer"},"org_id":{"type":"integer"},"stage_id":{"type":"integer"},"status":{"type":"string","enum":["open","won","lost"]}},"required":["title"]},"requiredScopes":["deals:full"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deals.update","description":"Update a Pipedrive deal.","parameters":{"type":"object","properties":{"id":{"type":"integer"},"fields":{"type":"object"}},"required":["id","fields"]},"requiredScopes":["deals:full"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"persons.search","description":"Search Pipedrive persons by free-text term.","parameters":{"type":"object","properties":{"term":{"type":"string"},"fields":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":500}},"required":["term"]},"requiredScopes":["contacts:full"],"class":"read"},{"name":"persons.create","description":"Create a Pipedrive person.","parameters":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"array","items":{"type":"object"}},"phone":{"type":"array","items":{"type":"object"}},"org_id":{"type":"integer"}},"required":["name"]},"requiredScopes":["contacts:full"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"organizations.search","description":"Search Pipedrive organizations by free-text term.","parameters":{"type":"object","properties":{"term":{"type":"string"},"fields":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":500}},"required":["term"]},"requiredScopes":["contacts:full"],"class":"read"},{"name":"organizations.create","description":"Create a Pipedrive organization.","parameters":{"type":"object","properties":{"name":{"type":"string"},"owner_id":{"type":"integer"}},"required":["name"]},"requiredScopes":["contacts:full"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"activities.create","description":"Create a Pipedrive activity (call, meeting, task, deadline, email, lunch, etc.) optionally linked to a deal, person, or organization.","parameters":{"type":"object","properties":{"subject":{"type":"string"},"type":{"type":"string","description":"Activity type key (e.g. call, meeting, task, deadline, email, lunch)."},"due_date":{"type":"string","description":"YYYY-MM-DD due date."},"due_time":{"type":"string","description":"HH:MM due time."},"deal_id":{"type":"integer"},"person_id":{"type":"integer"},"org_id":{"type":"integer"},"note":{"type":"string"}},"required":["subject","type"]},"requiredScopes":["activities:full"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.create","description":"Create a Pipedrive note attached to a deal, person, or organization.","parameters":{"type":"object","properties":{"content":{"type":"string","description":"Note body. Supports HTML."},"deal_id":{"type":"integer"},"person_id":{"type":"integer"},"org_id":{"type":"integer"}},"required":["content"]},"requiredScopes":["contacts:full"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"placid","displayName":"Placid","description":"Generate dynamic images, PDFs, and videos from templates and data.","auth":{"kind":"api-key","hint":"Placid API key."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"images.create","description":"Create a dynamic image from a template.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"The ID of the template."},"data":{"type":"object","description":"Template variables and their values."},"outputDpi":{"type":"integer","description":"Output DPI (default 72)."},"outputFilename":{"type":"string","description":"Custom output filename."}},"required":["templateId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"images.get","description":"Retrieve an image by ID.","parameters":{"type":"object","properties":{"imageId":{"type":"string","description":"The ID of the image to retrieve."}},"required":["imageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pdfs.create","description":"Create a dynamic PDF from a template.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"The ID of the template."},"data":{"type":"object","description":"Template variables and their values."},"outputFilename":{"type":"string","description":"Custom output filename."}},"required":["templateId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pdfs.get","description":"Retrieve a PDF by ID.","parameters":{"type":"object","properties":{"pdfId":{"type":"string","description":"The ID of the PDF to retrieve."}},"required":["pdfId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"videos.create","description":"Create a dynamic video from a template.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"The ID of the template."},"data":{"type":"object","description":"Template variables and their values."},"outputFps":{"type":"integer","description":"Output frames per second."},"outputFilename":{"type":"string","description":"Custom output filename."}},"required":["templateId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"videos.get","description":"Retrieve a video by ID.","parameters":{"type":"object","properties":{"videoId":{"type":"string","description":"The ID of the video to retrieve."}},"required":["videoId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.convert","description":"Convert a file to a shareable URL.","parameters":{"type":"object","properties":{"file":{"type":"string","description":"File content or path."},"filename":{"type":"string","description":"Optional custom filename."}},"required":["file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"templates.list","description":"List available templates.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of templates to return."},"offset":{"type":"integer","description":"Pagination offset."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"images.delete","description":"Delete a generated image.","parameters":{"type":"object","properties":{"imageId":{"type":"string","description":"The ID of the image to delete."}},"required":["imageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pdfs.delete","description":"Delete a generated PDF.","parameters":{"type":"object","properties":{"pdfId":{"type":"string","description":"The ID of the PDF to delete."}},"required":["pdfId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"videos.delete","description":"Delete a generated video.","parameters":{"type":"object","properties":{"videoId":{"type":"string","description":"The ID of the video to delete."}},"required":["videoId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"templates.get","description":"Get details of a single template.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"The ID of the template to retrieve."}},"required":["templateId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"plaid","displayName":"Plaid","description":"Read linked bank accounts, balances, transactions, identity, liabilities, and investments from Plaid.","auth":{"kind":"api-key","hint":"JSON credential bundle: {\"clientId\":\"...\",\"secret\":\"...\",\"accessToken\":\"...\"}."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"accounts.get","description":"Read accounts and current/available balances for the linked Plaid item.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"auth.get","description":"Read account and routing numbers for checking and savings accounts.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"identity.get","description":"Read account-holder identity data supplied by the financial institution.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"liabilities.get","description":"Read credit-card, mortgage, and student-loan liabilities.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"investments.holdings.get","description":"Read investment holdings and security metadata.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transactions.sync","description":"Incrementally synchronize transactions. Persist `next_cursor` and call again while `has_more` is true.","parameters":{"type":"object","properties":{"cursor":{"type":"string"},"count":{"type":"integer","minimum":1,"maximum":500},"options":{"type":"object"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"plausible","displayName":"Plausible Analytics","description":"List sites, create goals, manage shared links, and configure custom properties in Plausible Analytics.","auth":{"kind":"api-key","hint":"Plausible Analytics API key from account settings."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"teams.list","description":"List all teams accessible to the API key.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sites.list","description":"List all sites in your Plausible account.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sites.get","description":"Retrieve details of a specific site.","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sites.create","description":"Create a new site in Plausible Analytics.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"timezone":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sites.update","description":"Update site settings like domain or timezone.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"new_domain":{"type":"string"},"timezone":{"type":"string"},"track_404_pages":{"type":"boolean"},"hash_based_routing":{"type":"boolean"},"outbound_links":{"type":"boolean"},"file_downloads":{"type":"boolean"},"form_submissions":{"type":"boolean"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"sites.delete","description":"Delete a site from Plausible Analytics.","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"goals.list","description":"List all goals configured for a site.","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"goals.create","description":"Create a new goal (event, page view, or custom).","parameters":{"type":"object","properties":{"domain":{"type":"string"},"goal_type":{"type":"string"},"event_name":{"type":"string"},"page_path":{"type":"string"},"display_name":{"type":"string"}},"required":["domain","goal_type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"goals.delete","description":"Delete a goal from a site.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"goal_id":{"type":"string"}},"required":["domain","goal_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"custom_properties.list","description":"List all custom properties configured for a site.","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"custom_properties.create","description":"Create a new custom property for a site.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"property":{"type":"string"}},"required":["domain","property"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"custom_properties.delete","description":"Delete a custom property from a site.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"property":{"type":"string"}},"required":["domain","property"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"shared_links.create","description":"Create a shared dashboard link for a site.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"name":{"type":"string"}},"required":["domain","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"guests.list","description":"List all guest invitations for a site.","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"guests.invite","description":"Invite a guest user to access a site.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"email":{"type":"string"},"role":{"type":"string"}},"required":["domain","email","role"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"guests.remove","description":"Remove a guest user from a site.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"email":{"type":"string"}},"required":["domain","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"pocketbase","displayName":"PocketBase","description":"Create, read, update, and delete records in a PocketBase collection.","auth":{"kind":"api-key","hint":"PocketBase host URL, superuser email, and password."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.list","description":"Get a paginated list of records from a collection.","parameters":{"type":"object","properties":{"collection":{"type":"string","description":"Collection name"},"page":{"type":"integer","description":"Page number (default: 1)"},"perPage":{"type":"integer","description":"Records per page (default: 30)"},"sort":{"type":"string","description":"Order attribute(s). Use - for DESC, + for ASC."},"filter":{"type":"string","description":"Filter expression"},"expand":{"type":"string","description":"Auto expand relations"},"fields":{"type":"string","description":"Comma separated fields to return"},"skipTotal":{"type":"boolean","description":"Skip total counts query"}},"required":["collection"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.fullList","description":"Get all records from a collection.","parameters":{"type":"object","properties":{"collection":{"type":"string","description":"Collection name"},"sort":{"type":"string","description":"Order attribute(s)"},"filter":{"type":"string","description":"Filter expression"},"expand":{"type":"string","description":"Auto expand relations"},"fields":{"type":"string","description":"Comma separated fields to return"}},"required":["collection"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.get","description":"Get a single record by ID.","parameters":{"type":"object","properties":{"collection":{"type":"string","description":"Collection name"},"recordId":{"type":"string","description":"Record ID"},"expand":{"type":"string","description":"Auto expand relations"},"fields":{"type":"string","description":"Comma separated fields to return"}},"required":["collection","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.create","description":"Create a new record in a collection.","parameters":{"type":"object","properties":{"collection":{"type":"string","description":"Collection name"},"recordData":{"type":"object","description":"Record data fields"},"expand":{"type":"string","description":"Auto expand relations"},"fields":{"type":"string","description":"Comma separated fields to return"}},"required":["collection","recordData"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Update an existing record.","parameters":{"type":"object","properties":{"collection":{"type":"string","description":"Collection name"},"recordId":{"type":"string","description":"Record ID"},"recordData":{"type":"object","description":"Record data fields to update"},"expand":{"type":"string","description":"Auto expand relations"},"fields":{"type":"string","description":"Comma separated fields to return"}},"required":["collection","recordId","recordData"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"records.delete","description":"Delete a record.","parameters":{"type":"object","properties":{"collection":{"type":"string","description":"Collection name"},"recordId":{"type":"string","description":"Record ID"}},"required":["collection","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"collections.list","description":"List collections (tables) in the PocketBase database.","parameters":{"type":"object","properties":{"page":{"type":"integer","description":"Page number (default: 1)"},"perPage":{"type":"integer","description":"Items per page (default: 30)"},"sort":{"type":"string","description":"Order attribute(s)."},"filter":{"type":"string","description":"Filter expression"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"collections.create","description":"Create a new collection (table) in the PocketBase database.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Collection name"},"type":{"type":"string","description":"Collection type (base, auth, view). Defaults to base."},"fields":{"type":"array","description":"Schema field definitions for the collection."},"system":{"type":"boolean","description":"Whether the collection is a system collection."},"listRule":{"type":"string","description":"List API rule."},"viewRule":{"type":"string","description":"View API rule."},"createRule":{"type":"string","description":"Create API rule."},"updateRule":{"type":"string","description":"Update API rule."},"deleteRule":{"type":"string","description":"Delete API rule."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.delete","description":"Delete a collection (table) from the PocketBase database.","parameters":{"type":"object","properties":{"collection":{"type":"string","description":"Collection name or ID to delete."}},"required":["collection"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"pollybot-ai","displayName":"PollyBot AI","description":"Automate lead management with PollyBot AI chatbot integration.","auth":{"kind":"api-key","hint":"PollyBot API Key starting with your organization identifier."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"leads.create","description":"Create a new lead in PollyBot.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The unique ID for the specific chatbot"},"name":{"type":"string","description":"Lead name"},"email":{"type":"string","description":"Valid email address"},"phone":{"type":"string","description":"Phone number (optional)"},"source":{"type":"string","description":"Lead source (e.g., website, referral)"},"status":{"type":"string","description":"Lead status"},"metadata":{"type":"object","description":"Custom data as JSON object"}},"required":["chatbotId","name","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.get","description":"Get a specific lead by ID.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The chatbot ID"},"leadId":{"type":"string","description":"The unique identifier of the lead"}},"required":["chatbotId","leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.update","description":"Update an existing lead.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The chatbot ID"},"leadId":{"type":"string","description":"The unique identifier of the lead to update"},"name":{"type":"string","description":"Lead name"},"email":{"type":"string","description":"Email address"},"phone":{"type":"string","description":"Phone number"},"source":{"type":"string","description":"Lead source"},"status":{"type":"string","description":"Lead status"},"metadata":{"type":"object","description":"Custom data as JSON object"}},"required":["chatbotId","leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"leads.delete","description":"Delete a lead.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The chatbot ID"},"leadId":{"type":"string","description":"The unique identifier of the lead to delete"}},"required":["chatbotId","leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.list","description":"List leads for a chatbot.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The chatbot ID"},"page":{"type":"integer","description":"Page number (0-indexed)"},"limit":{"type":"integer","description":"Max 100 results per page"},"search":{"type":"string","description":"Search in name and email fields"}},"required":["chatbotId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.tag","description":"Add a tag to a lead.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The chatbot ID"},"leadId":{"type":"string","description":"The lead ID"},"tag":{"type":"string","description":"Tag value to attach to the lead"}},"required":["chatbotId","leadId","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.bulk-import","description":"Bulk import leads from a CSV/JSON payload.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The chatbot ID"},"leads":{"type":"array","description":"Array of lead objects to import (name, email, phone, etc.)."},"format":{"type":"string","description":"Source format hint, e.g. csv or json."}},"required":["chatbotId","leads"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.list","description":"List outbound campaigns for a chatbot.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The chatbot ID"},"page":{"type":"integer","description":"Page number (0-indexed)"},"limit":{"type":"integer","description":"Max results per page"}},"required":["chatbotId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.start","description":"Start an outbound campaign.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The chatbot ID"},"campaignId":{"type":"string","description":"The campaign ID to start"}},"required":["chatbotId","campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"polytomic","displayName":"Polytomic","description":"List and create ETL/reverse-ETL syncs, inspect sync status, and list available connection types.","auth":{"kind":"api-key","hint":"API key generated in the Polytomic Settings panel. Sent as the Authorization: Bearer header."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"syncs.list","description":"List configured syncs.","parameters":{"type":"object","properties":{"active":{"type":"boolean"},"mode":{"type":"string"},"target_connection_id":{"type":"string"},"limit":{"type":"integer"},"page_token":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"syncs.status","description":"Get the current status of a sync by its id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"connection_types.list","description":"List all connection types (source/destination connectors) supported by this deployment.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"syncs.create","description":"Create a new sync from one or more models to a destination.","parameters":{"type":"object","properties":{"name":{"type":"string"},"target":{"type":"object"},"mode":{"type":"string"},"fields":{"type":"array","items":{"type":"object"}},"schedule":{"type":"object"}},"required":["name","target","mode","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"postgres","displayName":"PostgreSQL","description":"Inspect PostgreSQL schemas and tables and run bounded structured row reads over a verified TLS connection.","auth":{"kind":"api-key","hint":"JSON with a public PostgreSQL host, database, user, password, optional port, and optional TLS CA. Verified TLS is mandatory."},"defaultConsistencyModel":"authoritative","category":"database","rateLimit":{"requests":120,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"postgres.schemas.list","class":"read","description":"List schemas visible to the connected PostgreSQL user.","parameters":{"type":"object","properties":{},"additionalProperties":false}},{"name":"postgres.tables.list","class":"read","description":"List tables and views in one schema.","parameters":{"type":"object","properties":{"schema":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Schema name; defaults to public."}},"additionalProperties":false}},{"name":"postgres.tables.describe","class":"read","description":"Read ordered column metadata for one table or view.","parameters":{"type":"object","properties":{"schema":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Schema name; defaults to public."},"table":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Table or view name."}},"required":["table"],"additionalProperties":false}},{"name":"postgres.rows.select","class":"read","description":"Read bounded rows using an identifier-safe query builder with scalar predicates.","parameters":{"type":"object","properties":{"schema":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Schema name; defaults to public."},"table":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Table or view name."},"columns":{"type":"array","minItems":1,"maxItems":64,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Column name."}},"filters":{"type":"array","maxItems":20,"items":{"type":"object","properties":{"column":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Column name."},"operator":{"type":"string","enum":["eq","ne","lt","lte","gt","gte","like","is-null","not-null"]},"value":{"type":["string","number","boolean","null"]}},"required":["column","operator"],"additionalProperties":false}},"orderBy":{"type":"array","maxItems":8,"items":{"type":"object","properties":{"column":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Column name."},"direction":{"type":"string","enum":["asc","desc"],"default":"asc"}},"required":["column"],"additionalProperties":false}},"limit":{"type":"integer","minimum":1,"maximum":10000,"default":100},"offset":{"type":"integer","minimum":0,"maximum":1000000,"default":0}},"required":["table","columns"],"additionalProperties":false}}]},{"kind":"posthog","displayName":"PostHog","description":"Product analytics: capture events and manage projects in PostHog.","auth":{"kind":"api-key","hint":"PostHog API key and instance URL. The connection must store apiUrl (e.g. https://app.posthog.com) or your self-hosted instance URL."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"events.create","description":"Create an event in PostHog.","parameters":{"type":"object","properties":{"event":{"type":"string","description":"The event name"},"distinctId":{"type":"string","description":"The distinct ID of the user or entity performing the event"},"properties":{"type":"object","description":"Event properties"},"timestamp":{"type":"string","description":"Event timestamp (ISO 8601 format)"},"context":{"type":"object","description":"Additional context for the event"},"messageId":{"type":"string","description":"Unique message identifier for idempotency"}},"required":["event","distinctId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.create","description":"Create a new PostHog project.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Project name"},"team":{"type":"integer","description":"Team ID"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.list","description":"List PostHog projects.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.get","description":"Get a specific PostHog project by ID.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Project ID"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cohorts.list","description":"List cohorts in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Project ID"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"feature-flags.list","description":"List feature flags in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Project ID"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"feature-flags.create","description":"Create a feature flag in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Project ID"},"key":{"type":"string","description":"Feature flag key"},"name":{"type":"string","description":"Feature flag name"}},"required":["projectId","key","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"feature-flags.update","description":"Update or toggle a feature flag in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Project ID"},"featureFlagId":{"type":"string","description":"Feature flag ID"},"key":{"type":"string","description":"Feature flag key"},"name":{"type":"string","description":"Feature flag name"},"active":{"type":"boolean","description":"Whether the feature flag is active"},"filters":{"type":"object","description":"Targeting filters/conditions"},"rollout_percentage":{"type":"integer","description":"Rollout percentage"},"deleted":{"type":"boolean","description":"Soft-delete marker"}},"required":["projectId","featureFlagId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"feature-flags.delete","description":"Delete a feature flag from a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Project ID"},"featureFlagId":{"type":"string","description":"Feature flag ID"}},"required":["projectId","featureFlagId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cohorts.create","description":"Create a new cohort in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Project ID"},"name":{"type":"string","description":"Cohort name"},"description":{"type":"string","description":"Cohort description"},"groups":{"type":"array","description":"Static or dynamic cohort group definitions"},"is_static":{"type":"boolean","description":"Whether the cohort is static"}},"required":["projectId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"annotations.create","description":"Create a release/event annotation in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Project ID"},"content":{"type":"string","description":"Annotation content"},"date_marker":{"type":"string","description":"ISO 8601 timestamp for the annotation"},"scope":{"type":"string","description":"Annotation scope (organization, project, dashboard_item)"},"dashboard_item":{"type":"integer","description":"Dashboard item ID when scope is dashboard_item"}},"required":["projectId","content","date_marker"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"insights.create","description":"Create a saved insight/dashboard tile in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Project ID"},"name":{"type":"string","description":"Insight name"},"description":{"type":"string","description":"Insight description"},"filters":{"type":"object","description":"Query filter definition"},"query":{"type":"object","description":"HogQL/insight query definition"},"dashboard":{"type":"integer","description":"Dashboard ID to attach the insight to"},"favorited":{"type":"boolean","description":"Whether to mark the insight as a favorite"}},"required":["projectId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"postiz","displayName":"Postiz","description":"Manage social media posts and scheduling across 30+ platforms.","auth":{"kind":"api-key","hint":"Postiz API key from Settings > Developers > Public API"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"posts.create","description":"Create a new social media post.","parameters":{"type":"object","properties":{"content":{"type":"string","description":"Text content of the post"},"type":{"type":"string","enum":["now","draft","schedule"],"description":"Post type: immediate, draft, or scheduled"},"date":{"type":"string","description":"ISO 8601 publish date for scheduled posts"},"media":{"type":"object","description":"Media file paths to attach"},"shortLink":{"type":"boolean","description":"Automatically shorten URLs"},"settings":{"type":"object","description":"Platform-specific settings"}},"required":["content","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.list","description":"List all social media posts.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"posts.delete","description":"Delete a social media post.","parameters":{"type":"object","properties":{"postId":{"type":"string","description":"The ID of the post to delete"}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.update","description":"Update a scheduled post.","parameters":{"type":"object","properties":{"postId":{"type":"string","description":"The ID of the post to update"},"content":{"type":"string","description":"Updated text content"},"type":{"type":"string","enum":["now","draft","schedule"],"description":"Post type"},"date":{"type":"string","description":"ISO 8601 publish date for scheduled posts"},"media":{"type":"object","description":"Media file paths to attach"},"shortLink":{"type":"boolean","description":"Automatically shorten URLs"},"settings":{"type":"object","description":"Platform-specific settings"}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.schedule","description":"Schedule a post for a future time. Pass type=\"schedule\" plus the ISO date.","parameters":{"type":"object","properties":{"content":{"type":"string","description":"Text content of the post"},"type":{"type":"string","enum":["schedule"],"description":"Must be \"schedule\"."},"date":{"type":"string","description":"ISO 8601 publish date"},"media":{"type":"object","description":"Media file paths to attach"},"shortLink":{"type":"boolean","description":"Automatically shorten URLs"},"settings":{"type":"object","description":"Platform-specific settings"}},"required":["content","type","date"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"integrations.disconnect","description":"Disconnect an integration.","parameters":{"type":"object","properties":{"integrationId":{"type":"string","description":"The ID of the integration to disconnect"}},"required":["integrationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.delete","description":"Delete an uploaded media asset.","parameters":{"type":"object","properties":{"mediaId":{"type":"string","description":"The ID of the media asset to delete"}},"required":["mediaId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"integrations.list","description":"List connected social media platform integrations.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"analytics.platform","description":"Get analytics for a specific platform.","parameters":{"type":"object","properties":{"days":{"type":"integer","description":"Number of days to look back (e.g. 7, 30, 90)"}},"required":["days"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"analytics.post","description":"Get analytics for a specific post.","parameters":{"type":"object","properties":{"postId":{"type":"string","description":"The ID of the post"}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"media.upload","description":"Upload media from a URL.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Public URL of the image or video to upload"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"slots.find","description":"Find available posting slots.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"postmark","displayName":"Postmark","description":"Send transactional email through the Postmark Server API — single send, batch send, template send, message search, bounce inspection, outbound stats, and template management.","auth":{"kind":"api-key","hint":"Postmark Server API token (Servers → your server → API Tokens). Sent as the `X-Postmark-Server-Token` header. Account-scoped operations (creating servers, domains, sender signatures) require a different token and are intentionally out of scope for this connector."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"server.get","description":"Return the Postmark server this token belongs to (GET /server). Use as a credential probe.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"email.send","description":"Send a single transactional email (POST /email). Either HtmlBody or TextBody (or both) must be supplied; Postmark rejects empty payloads.","parameters":{"type":"object","properties":{"From":{"type":"string","description":"Sender address. Must match a verified Postmark Signature or Domain."},"To":{"type":"string","description":"Comma-separated recipient list."},"Cc":{"type":"string"},"Bcc":{"type":"string"},"Subject":{"type":"string"},"Tag":{"type":"string","description":"Single tag used by Postmark analytics + filtering."},"HtmlBody":{"type":"string"},"TextBody":{"type":"string"},"ReplyTo":{"type":"string"},"Metadata":{"type":"object","description":"Up to 25 key/value pairs (string values, 1KB total) echoed in webhooks and stats.","additionalProperties":{"type":"string"}},"Headers":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string"},"Value":{"type":"string"}},"required":["Name","Value"]}},"TrackOpens":{"type":"boolean"},"TrackLinks":{"type":"string","enum":["None","HtmlAndText","HtmlOnly","TextOnly"]},"MessageStream":{"type":"string","description":"Outbound message stream ID (default \"outbound\" for transactional; \"broadcast\" for broadcast streams)."},"Attachments":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string","description":"Filename shown to the recipient."},"Content":{"type":"string","description":"Base64-encoded file content."},"ContentType":{"type":"string","description":"MIME type (e.g. application/pdf)."},"ContentID":{"type":"string","description":"Optional cid: identifier for inline attachments (used in HTML img src=\"cid:...\")."}},"required":["Name","Content","ContentType"]}}},"required":["From"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"email.send.batch","description":"Send up to 500 transactional emails in a single request (POST /email/batch). Returns one result object per submitted message, in order.","parameters":{"type":"object","properties":{"Messages":{"type":"array","items":{"type":"object","properties":{"From":{"type":"string","description":"Sender address. Must match a verified Postmark Signature or Domain."},"To":{"type":"string","description":"Comma-separated recipient list."},"Cc":{"type":"string"},"Bcc":{"type":"string"},"Subject":{"type":"string"},"Tag":{"type":"string","description":"Single tag used by Postmark analytics + filtering."},"HtmlBody":{"type":"string"},"TextBody":{"type":"string"},"ReplyTo":{"type":"string"},"Metadata":{"type":"object","description":"Up to 25 key/value pairs (string values, 1KB total) echoed in webhooks and stats.","additionalProperties":{"type":"string"}},"Headers":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string"},"Value":{"type":"string"}},"required":["Name","Value"]}},"TrackOpens":{"type":"boolean"},"TrackLinks":{"type":"string","enum":["None","HtmlAndText","HtmlOnly","TextOnly"]},"MessageStream":{"type":"string","description":"Outbound message stream ID (default \"outbound\" for transactional; \"broadcast\" for broadcast streams)."},"Attachments":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string","description":"Filename shown to the recipient."},"Content":{"type":"string","description":"Base64-encoded file content."},"ContentType":{"type":"string","description":"MIME type (e.g. application/pdf)."},"ContentID":{"type":"string","description":"Optional cid: identifier for inline attachments (used in HTML img src=\"cid:...\")."}},"required":["Name","Content","ContentType"]}}},"required":["From"]},"maxItems":500}},"required":["Messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"email.send.template","description":"Render and send a single email using a Postmark template (POST /email/withTemplate). Supply TemplateId or TemplateAlias plus a TemplateModel that fills the template variables.","parameters":{"type":"object","properties":{"From":{"type":"string","description":"Verified sender address."},"To":{"type":"string"},"Cc":{"type":"string"},"Bcc":{"type":"string"},"Tag":{"type":"string"},"ReplyTo":{"type":"string"},"TemplateId":{"type":"integer","description":"Numeric template identifier. Mutually exclusive with TemplateAlias."},"TemplateAlias":{"type":"string","description":"String alias of the template. Mutually exclusive with TemplateId."},"TemplateModel":{"type":"object","description":"Key/value map applied to the template variables.","additionalProperties":true},"InlineCss":{"type":"boolean","description":"If true (default for HTML templates), inlines CSS at send time."},"TrackOpens":{"type":"boolean"},"TrackLinks":{"type":"string","enum":["None","HtmlAndText","HtmlOnly","TextOnly"]},"MessageStream":{"type":"string"},"Metadata":{"type":"object","additionalProperties":{"type":"string"}},"Headers":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string"},"Value":{"type":"string"}},"required":["Name","Value"]}},"Attachments":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string","description":"Filename shown to the recipient."},"Content":{"type":"string","description":"Base64-encoded file content."},"ContentType":{"type":"string","description":"MIME type (e.g. application/pdf)."},"ContentID":{"type":"string","description":"Optional cid: identifier for inline attachments (used in HTML img src=\"cid:...\")."}},"required":["Name","Content","ContentType"]}}},"required":["From","TemplateModel"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"email.send.template.batch","description":"Send up to 500 template-rendered messages in one request (POST /email/batchWithTemplates). Each entry independently selects a TemplateId or TemplateAlias.","parameters":{"type":"object","properties":{"Messages":{"type":"array","maxItems":500,"items":{"type":"object","properties":{"From":{"type":"string","description":"RFC-5322 mailbox. Either bare `user@example.com` or `\"Name\" <user@example.com>`."},"To":{"type":"string"},"Cc":{"type":"string"},"Bcc":{"type":"string"},"TemplateId":{"type":"integer"},"TemplateAlias":{"type":"string"},"TemplateModel":{"type":"object","additionalProperties":true},"Tag":{"type":"string"},"MessageStream":{"type":"string"},"Metadata":{"type":"object","additionalProperties":{"type":"string"}},"Headers":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string"},"Value":{"type":"string"}},"required":["Name","Value"]}},"Attachments":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string","description":"Filename shown to the recipient."},"Content":{"type":"string","description":"Base64-encoded file content."},"ContentType":{"type":"string","description":"MIME type (e.g. application/pdf)."},"ContentID":{"type":"string","description":"Optional cid: identifier for inline attachments (used in HTML img src=\"cid:...\")."}},"required":["Name","Content","ContentType"]}}},"required":["From","TemplateModel"]}}},"required":["Messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.outbound.search","description":"Search outbound messages (GET /messages/outbound). Supports filters by recipient, tag, status, message stream, and date range; paginated by count + offset.","parameters":{"type":"object","properties":{"count":{"type":"integer","minimum":1,"maximum":500,"description":"Page size. Postmark default 50."},"offset":{"type":"integer","minimum":0},"recipient":{"type":"string"},"fromemail":{"type":"string"},"tag":{"type":"string"},"status":{"type":"string","enum":["queued","sent","failed"]},"todate":{"type":"string","description":"YYYY-MM-DD (exclusive upper bound)."},"fromdate":{"type":"string","description":"YYYY-MM-DD (inclusive lower bound)."},"messagestream":{"type":"string"},"subject":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.outbound.get","description":"Fetch a single outbound message by MessageID (GET /messages/outbound/{messageId}/details).","parameters":{"type":"object","properties":{"messageId":{"type":"string","description":"Postmark MessageID (UUID)."}},"required":["messageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bounces.search","description":"List bounces (GET /bounces). Filter by bounce type, inactive flag, recipient, tag, or message stream.","parameters":{"type":"object","properties":{"count":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0},"type":{"type":"string","description":"Postmark bounce type (HardBounce, Transient, Unsubscribe, Subscribe, AutoResponder, AddressChange, DnsError, SpamNotification, OpenRelayTest, Unknown, SoftBounce, VirusNotification, ChallengeVerification, BadEmailAddress, SpamComplaint, ManuallyDeactivated, Unconfirmed, Blocked, SMTPApiError, InboundError, DMARCPolicy, TemplateRenderingFailed)."},"inactive":{"type":"boolean"},"emailFilter":{"type":"string"},"tag":{"type":"string"},"messageID":{"type":"string"},"fromdate":{"type":"string"},"todate":{"type":"string"},"messagestream":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bounces.get","description":"Fetch a single bounce record (GET /bounces/{bounceId}).","parameters":{"type":"object","properties":{"bounceId":{"type":"integer"}},"required":["bounceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bounces.activate","description":"Reactivate a recipient previously suppressed because of a hard bounce (PUT /bounces/{bounceId}/activate). Postmark validates that the recipient is currently inactive.","parameters":{"type":"object","properties":{"bounceId":{"type":"integer"}},"required":["bounceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"stats.outbound.overview","description":"Outbound delivery overview for a window (GET /stats/outbound).","parameters":{"type":"object","properties":{"tag":{"type":"string"},"fromdate":{"type":"string","description":"YYYY-MM-DD."},"todate":{"type":"string","description":"YYYY-MM-DD."},"messagestream":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"templates.list","description":"List templates owned by this server (GET /templates).","parameters":{"type":"object","properties":{"count":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0},"templateType":{"type":"string","enum":["Standard","Layout"]},"layoutTemplate":{"type":"string","description":"Filter to templates that use the named layout."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"templates.get","description":"Fetch a single template by ID or alias (GET /templates/{idOrAlias}).","parameters":{"type":"object","properties":{"idOrAlias":{"type":"string"}},"required":["idOrAlias"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"templates.create","description":"Create a new template (POST /templates).","parameters":{"type":"object","properties":{"Name":{"type":"string"},"Subject":{"type":"string"},"HtmlBody":{"type":"string"},"TextBody":{"type":"string"},"Alias":{"type":"string"},"TemplateType":{"type":"string","enum":["Standard","Layout"]},"LayoutTemplate":{"type":"string"}},"required":["Name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"templates.update","description":"Update an existing template by ID or alias (PUT /templates/{idOrAlias}). Only the fields supplied are modified; omit fields to leave them unchanged.","parameters":{"type":"object","properties":{"idOrAlias":{"type":"string","description":"Template ID or string alias."},"Name":{"type":"string"},"Subject":{"type":"string"},"HtmlBody":{"type":"string"},"TextBody":{"type":"string"},"Alias":{"type":"string"},"TemplateType":{"type":"string","enum":["Standard","Layout"]},"LayoutTemplate":{"type":"string"}},"required":["idOrAlias"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"templates.delete","description":"Delete a template by ID or alias (DELETE /templates/{idOrAlias}).","parameters":{"type":"object","properties":{"idOrAlias":{"type":"string","description":"Template ID or string alias."}},"required":["idOrAlias"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bounces.delete","description":"Delete suppression records for one or more recipients on a message stream (POST /message-streams/{streamId}/suppressions/delete). This is Postmark's \"un-suppress\" operation — the way to clear a bounce-driven block so future sends to that recipient are accepted again.","parameters":{"type":"object","properties":{"streamId":{"type":"string","description":"Outbound message stream ID (e.g. \"outbound\", \"broadcast\")."},"Suppressions":{"type":"array","description":"List of email addresses to remove from the stream's suppression list.","items":{"type":"object","properties":{"EmailAddress":{"type":"string"}},"required":["EmailAddress"]}}},"required":["streamId","Suppressions"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"servers.update","description":"Update settings on the server this token belongs to (PUT /server). Server-token scoped — account-level server provisioning (creating new servers) requires an account token and is intentionally out of scope.","parameters":{"type":"object","properties":{"Name":{"type":"string"},"Color":{"type":"string","description":"UI badge color (Purple, Blue, Turquoise, Green, Red, Yellow, Grey)."},"SmtpApiActivated":{"type":"boolean"},"RawEmailEnabled":{"type":"boolean"},"DeliveryHookUrl":{"type":"string"},"InboundHookUrl":{"type":"string"},"BounceHookUrl":{"type":"string"},"OpenHookUrl":{"type":"string"},"ClickHookUrl":{"type":"string"},"DeliveryType":{"type":"string","enum":["Live","Sandbox"],"description":"Live sends real email; Sandbox is a no-send dev mode."},"PostFirstOpenOnly":{"type":"boolean"},"TrackOpens":{"type":"boolean"},"TrackLinks":{"type":"string","enum":["None","HtmlAndText","HtmlOnly","TextOnly"]},"IncludeBounceContentInHook":{"type":"boolean"},"EnableSmtpApiErrorHooks":{"type":"boolean"}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"predict-leads","displayName":"PredictLeads","description":"Query company intelligence data including companies, job openings, technologies, news events, and connections.","auth":{"kind":"api-key","hint":"PredictLeads API key and token."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"companies.find","description":"Find companies by location, size range, and filters.","parameters":{"type":"object","properties":{"location":{"type":"string"},"minMaxSizes":{"type":"string"},"activeOnly":{"type":"boolean"},"notClosed":{"type":"boolean"}},"required":["location","minMaxSizes"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.findByDomain","description":"Find a company by domain.","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobOpenings.find","description":"Find job openings with optional filters.","parameters":{"type":"object","properties":{"location":{"type":"string"},"minMaxSizes":{"type":"string"},"activeOnly":{"type":"boolean"},"withDescriptionOnly":{"type":"boolean"},"withLocationOnly":{"type":"boolean"},"categories":{"type":"string"},"onetCodes":{"type":"object"},"foundAtFrom":{"type":"string"},"foundAtUntil":{"type":"string"}},"required":["location","minMaxSizes"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobOpenings.getById","description":"Get a job opening by ID.","parameters":{"type":"object","properties":{"jobOpeningId":{"type":"string"}},"required":["jobOpeningId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobOpenings.getCompanyActions","description":"Get job opening actions for a company.","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"technologies.findByCompany","description":"Find technologies used by a company.","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.findByTechnologyId","description":"Find companies that use a specific technology.","parameters":{"type":"object","properties":{"technologyId":{"type":"string"}},"required":["technologyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"newsEvents.findById","description":"Find a news event by ID.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"newsEvents.findByDomain","description":"Find news events for a company by domain.","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"connections.find","description":"Find connections.","parameters":{"type":"object","properties":{"location":{"type":"string"},"minMaxSizes":{"type":"string"}},"required":["location","minMaxSizes"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"connections.findByDomain","description":"Find connections for a company by domain.","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"productboard","displayName":"Productboard","description":"Manage features and capture product feedback with Productboard.","auth":{"kind":"api-key","hint":"Productboard API token."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"features.create","description":"Create a new feature.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"parentType":{"type":"string"},"parentId":{"type":"string"},"type":{"type":"string"},"archived":{"type":"boolean"}},"required":["name","description","parentType","parentId","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"features.update","description":"Update an existing feature.","parameters":{"type":"object","properties":{"featureId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"archived":{"type":"boolean"}},"required":["featureId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"features.get","description":"Retrieve a feature by ID.","parameters":{"type":"object","properties":{"featureId":{"type":"string"}},"required":["featureId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"features.list","description":"List features.","parameters":{"type":"object","properties":{"archived":{"type":"boolean"},"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"notes.create","description":"Create a feedback note.","parameters":{"type":"object","properties":{"title":{"type":"string"},"content":{"type":"string"},"userEmail":{"type":"string"},"companyDomain":{"type":"string"},"displayUrl":{"type":"string"},"sourceOrigin":{"type":"string"},"sourceRecordId":{"type":"string"},"tags":{"type":"object"}},"required":["title","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.get","description":"Retrieve a note by ID.","parameters":{"type":"object","properties":{"noteId":{"type":"string"}},"required":["noteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"notes.list","description":"List feedback notes.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"features.delete","description":"Delete a feature.","parameters":{"type":"object","properties":{"featureId":{"type":"string"}},"required":["featureId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.update","description":"Update a customer feedback note.","parameters":{"type":"object","properties":{"noteId":{"type":"string"},"title":{"type":"string"},"content":{"type":"string"},"displayUrl":{"type":"string"},"tags":{"type":"object"}},"required":["noteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.delete","description":"Delete a customer feedback note.","parameters":{"type":"object","properties":{"noteId":{"type":"string"}},"required":["noteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"components.create","description":"Create a new component grouping.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"parentId":{"type":"string","description":"Optional parent component or product ID."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"proxycurl","displayName":"Proxycurl","description":"Enrich LinkedIn people and company profiles with Proxycurl.","auth":{"kind":"api-key","hint":"Proxycurl API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"person.profile.get","description":"Get person profile from LinkedIn URL.","parameters":{"type":"object","properties":{"linkedin_profile_url":{"type":"string"},"extra":{"type":"string"},"github_profile_id":{"type":"string"},"twitter_profile_id":{"type":"string"},"facebook_profile_id":{"type":"string"}},"required":["linkedin_profile_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.profile.get","description":"Get company profile from LinkedIn URL.","parameters":{"type":"object","properties":{"linkedin_company_url":{"type":"string"},"extra":{"type":"string"},"resolve_numeric_id":{"type":"boolean"},"categories":{"type":"string"}},"required":["linkedin_company_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"people.search","description":"Search people on LinkedIn.","parameters":{"type":"object","properties":{"linkedin_first_name":{"type":"string"},"linkedin_last_name":{"type":"string"},"linkedin_company_name":{"type":"string"},"linkedin_title":{"type":"string"},"linkedin_city":{"type":"string"},"linkedin_country":{"type":"string"},"page_size":{"type":"integer"},"enrich_profile":{"type":"boolean"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"person.email.lookup","description":"Lookup person email from LinkedIn profile URL.","parameters":{"type":"object","properties":{"linkedin_profile_url":{"type":"string"},"company_domain":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"}},"required":["linkedin_profile_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"pushbullet","displayName":"Pushbullet","description":"Send cross-device notifications via Pushbullet.","auth":{"kind":"oauth2","authorizationUrl":"https://www.pushbullet.com/authorize","tokenUrl":"https://api.pushbullet.com/oauth2/token","scopes":[],"clientIdEnv":"PUSHBULLET_OAUTH_CLIENT_ID","clientSecretEnv":"PUSHBULLET_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"notifications.sendLink","description":"Send a link notification.","parameters":{"type":"object","properties":{"deviceIden":{"type":"string"},"title":{"type":"string"},"body":{"type":"string"},"url":{"type":"string"}},"required":["title","body","url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notifications.sendNote","description":"Send a note notification.","parameters":{"type":"object","properties":{"deviceIden":{"type":"string"},"title":{"type":"string"},"body":{"type":"string"}},"required":["title","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"pushover","displayName":"Pushover","description":"Send push notifications to devices via Pushover.","auth":{"kind":"api-key","hint":"Pushover API token (application key) and user key. Both are required."},"category":"comms","defaultConsistencyModel":"advisory","capabilities":[{"name":"notifications.send","description":"Send a push notification to a Pushover user or group.","parameters":{"type":"object","properties":{"api_token":{"type":"string","description":"Pushover application API token/key."},"user_key":{"type":"string","description":"Pushover user key or group key to send the notification to."},"message":{"type":"string","description":"The message body to send."},"title":{"type":"string","description":"Optional title for the notification."},"priority":{"type":"integer","description":"Priority level of the notification (-2 to 2). -2 is lowest, 2 is emergency. Default is 0."},"url":{"type":"string","description":"Optional supplementary URL to include with the message."},"url_title":{"type":"string","description":"Optional title for the supplementary URL."},"device":{"type":"string","description":"Optional device name to send to. If omitted, sends to all user devices."},"html":{"type":"boolean","description":"Optional flag to enable HTML parsing in the message body."},"timestamp":{"type":"string","description":"Optional Unix timestamp to display instead of the current time."},"retry":{"type":"integer","description":"Optional retry interval in seconds. Only applicable when priority is 2."},"expire":{"type":"integer","description":"Optional expiration time in seconds. Only applicable when priority is 2."}},"required":["api_token","user_key","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"qawafel","displayName":"Qawafel","description":"B2B marketplace and ZATCA-compliant document platform — sync products, orders, merchants and invoices with Saudi Arabia.","auth":{"kind":"api-key","hint":"Qawafel API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"products.create","description":"Create a product in Qawafel.","parameters":{"type":"object","properties":{"sku":{"type":"string"},"unit_price":{"type":"string"},"description_en":{"type":"string"},"description_ar":{"type":"string"},"barcode":{"type":"string"},"is_active":{"type":"boolean"}},"required":["sku","unit_price"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.update","description":"Update a product in Qawafel.","parameters":{"type":"object","properties":{"product_id":{"type":"string"},"sku":{"type":"string"},"unit_price":{"type":"string"},"description_en":{"type":"string"},"description_ar":{"type":"string"},"barcode":{"type":"string"},"is_active":{"type":"boolean"}},"required":["product_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"products.get","description":"Get a single product from Qawafel.","parameters":{"type":"object","properties":{"product_id":{"type":"string"}},"required":["product_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.list","description":"List products in Qawafel.","parameters":{"type":"object","properties":{"supplier_id":{"type":"string"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.create","description":"Create an order in Qawafel.","parameters":{"type":"object","properties":{"items":{"type":"array"},"shipping_fees":{"type":"string"},"notes":{"type":"string"}},"required":["items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.updateStatus","description":"Update order status in Qawafel.","parameters":{"type":"object","properties":{"order_id":{"type":"string"},"transition":{"type":"string"}},"required":["order_id","transition"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"orders.cancel","description":"Cancel an order in Qawafel.","parameters":{"type":"object","properties":{"order_id":{"type":"string"},"reason":{"type":"string"}},"required":["order_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.get","description":"Get a single order from Qawafel.","parameters":{"type":"object","properties":{"order_id":{"type":"string"}},"required":["order_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.list","description":"List orders in Qawafel.","parameters":{"type":"object","properties":{"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"merchants.create","description":"Create a merchant in Qawafel.","parameters":{"type":"object","properties":{"legal_name":{"type":"string"},"name_en":{"type":"string"},"name_ar":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"cr_number":{"type":"string"},"vat_number":{"type":"string"},"unified_national_number":{"type":"string"},"is_taxable":{"type":"boolean"},"address_line":{"type":"string"},"city":{"type":"string"},"postal_code":{"type":"string"},"country":{"type":"string"},"district":{"type":"string"},"region":{"type":"string"},"short_address":{"type":"string"}},"required":["legal_name","name_en","name_ar","email","phone","cr_number","address_line","city","postal_code","country"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.create","description":"Create an invoice in Qawafel.","parameters":{"type":"object","properties":{"issue_date":{"type":"string"},"due_date":{"type":"string"},"shipping_fees":{"type":"string"},"payment_start_date":{"type":"string"},"payment_due_date":{"type":"string"},"notes":{"type":"string"},"items":{"type":"array"}},"required":["issue_date","due_date","items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.get","description":"Get a single invoice from Qawafel.","parameters":{"type":"object","properties":{"invoice_id":{"type":"string"}},"required":["invoice_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"invoices.list","description":"List invoices in Qawafel.","parameters":{"type":"object","properties":{"created_after":{"type":"string"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.delete","description":"Delete a product in Qawafel.","parameters":{"type":"object","properties":{"product_id":{"type":"string"}},"required":["product_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.refund","description":"Refund an order in Qawafel.","parameters":{"type":"object","properties":{"order_id":{"type":"string"},"amount":{"type":"string"},"reason":{"type":"string"}},"required":["order_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.update","description":"Update invoice fields in Qawafel.","parameters":{"type":"object","properties":{"invoice_id":{"type":"string"},"issue_date":{"type":"string"},"due_date":{"type":"string"},"shipping_fees":{"type":"string"},"payment_start_date":{"type":"string"},"payment_due_date":{"type":"string"},"notes":{"type":"string"},"items":{"type":"array"}},"required":["invoice_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.send","description":"Send an invoice to the customer in Qawafel.","parameters":{"type":"object","properties":{"invoice_id":{"type":"string"},"email":{"type":"string"}},"required":["invoice_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"qdrant","displayName":"Qdrant","description":"Manage Qdrant vector collections, upsert and query points, run similarity search and recommendation queries, and manage payload indexes and snapshots.","auth":{"kind":"api-key","hint":"Qdrant Cloud cluster API key. Generate one in the Qdrant Cloud Console under Data Access Control → API Keys, scoped to the target cluster."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"collections.list","description":"List all collections in the cluster.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"collections.get","description":"Get detailed info for a single collection (config, points count, status).","parameters":{"type":"object","properties":{"collection_name":{"type":"string"}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"collections.exists","description":"Check whether a collection exists.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"collections.create","description":"Create a new collection. Body carries vectors config (size + distance metric), optional sparse_vectors, shard_number, replication_factor, hnsw_config, quantization_config, on_disk_payload, sharding_method.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"vectors":{"description":"Either a single VectorParams object or a map of named vectors → VectorParams."},"sparse_vectors":{"type":"object"},"shard_number":{"type":"integer","minimum":1},"replication_factor":{"type":"integer","minimum":1},"write_consistency_factor":{"type":"integer","minimum":1},"on_disk_payload":{"type":"boolean"},"hnsw_config":{"type":"object"},"wal_config":{"type":"object"},"optimizers_config":{"type":"object"},"quantization_config":{"type":"object"},"init_from":{"type":"object"},"sharding_method":{"type":"string","enum":["auto","custom"]},"strict_mode_config":{"type":"object"}},"required":["collection_name","vectors"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.update","description":"Update collection parameters (optimizer config, HNSW config, quantization config, params, vectors config). Used to retune an existing collection without recreating it.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"optimizers_config":{"type":"object"},"params":{"type":"object"},"hnsw_config":{"type":"object"},"vectors_config":{"type":"object"},"quantization_config":{"type":"object"},"sparse_vectors_config":{"type":"object"},"strict_mode_config":{"type":"object"}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.delete","description":"Delete a collection and all of its points. Irreversible.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.aliases.list","description":"List all collection aliases in the cluster.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"collections.aliases.update","description":"Apply a batch of alias actions (create_alias / delete_alias / rename_alias). Atomic across the actions list.","parameters":{"type":"object","properties":{"actions":{"type":"array","items":{"type":"object"},"description":"Array of { create_alias | delete_alias | rename_alias } objects."}},"required":["actions"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.index.create","description":"Create a payload field index to accelerate filtered search. Body specifies field_name and field_schema (keyword / integer / float / geo / text / bool / datetime / uuid).","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"field_name":{"type":"string"},"field_schema":{"description":"Either a schema string (e.g. \"keyword\") or an object with type + tokenizer options."},"wait":{"type":"boolean"},"ordering":{"type":"string","enum":["weak","medium","strong"]}},"required":["collection_name","field_name","field_schema"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.index.delete","description":"Delete a payload field index by name.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"field_name":{"type":"string"},"wait":{"type":"boolean"},"ordering":{"type":"string","enum":["weak","medium","strong"]}},"required":["collection_name","field_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"points.upsert","description":"Insert or update points. Body carries either { points: [{id, vector, payload?}, ...] } or { batch: {ids, vectors, payloads?} }. Pass wait=true to block until WAL fsync.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"points":{"type":"array","items":{"type":"object"},"description":"Array of { id, vector, payload? } point structs."},"batch":{"type":"object","description":"Columnar variant — { ids, vectors, payloads? }. Use either `points` or `batch`, not both."},"shard_key":{},"wait":{"type":"boolean"},"ordering":{"type":"string","enum":["weak","medium","strong"]}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"points.get","description":"Fetch a batch of points by id, optionally returning vectors and/or payload.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"ids":{"type":"array","items":{},"description":"Array of point ids (uint64 or uuid strings)."},"with_payload":{},"with_vector":{},"shard_key":{},"consistency":{}},"required":["collection_name","ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"points.delete","description":"Delete points by explicit id list or by filter. Body is { points: [...ids] } or { filter: {...} }; pass exactly one.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"points":{"type":"array","items":{},"description":"Array of point ids to delete."},"filter":{"type":"object","description":"Qdrant filter object — must / must_not / should clauses."},"shard_key":{},"wait":{"type":"boolean"},"ordering":{"type":"string","enum":["weak","medium","strong"]}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"points.set_payload","description":"Merge a payload object into the existing payloads of selected points.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"payload":{"type":"object"},"points":{"type":"array","items":{}},"filter":{"type":"object"},"key":{"type":"string"},"shard_key":{},"wait":{"type":"boolean"},"ordering":{"type":"string","enum":["weak","medium","strong"]}},"required":["collection_name","payload"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"points.overwrite_payload","description":"Replace the entire payload of selected points with the supplied object.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"payload":{"type":"object"},"points":{"type":"array","items":{}},"filter":{"type":"object"},"shard_key":{},"wait":{"type":"boolean"},"ordering":{"type":"string","enum":["weak","medium","strong"]}},"required":["collection_name","payload"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"points.delete_payload","description":"Delete a list of payload keys from selected points.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"keys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{}},"filter":{"type":"object"},"shard_key":{},"wait":{"type":"boolean"},"ordering":{"type":"string","enum":["weak","medium","strong"]}},"required":["collection_name","keys"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"points.clear_payload","description":"Remove all payload from selected points.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"points":{"type":"array","items":{}},"filter":{"type":"object"},"shard_key":{},"wait":{"type":"boolean"},"ordering":{"type":"string","enum":["weak","medium","strong"]}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"points.update_vectors","description":"Update vector values for a list of points (named vectors supported).","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"points":{"type":"array","items":{"type":"object"},"description":"Array of { id, vector } where vector is either a list or a name→list map."},"shard_key":{},"wait":{"type":"boolean"},"ordering":{"type":"string","enum":["weak","medium","strong"]}},"required":["collection_name","points"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"points.delete_vectors","description":"Delete named vectors from selected points without removing the points themselves.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"vector":{"type":"array","items":{"type":"string"},"description":"List of vector names to drop."},"points":{"type":"array","items":{}},"filter":{"type":"object"},"shard_key":{},"wait":{"type":"boolean"},"ordering":{"type":"string","enum":["weak","medium","strong"]}},"required":["collection_name","vector"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"points.batch_update","description":"Apply a heterogeneous batch of point operations (upsert / delete / set_payload / overwrite_payload / delete_payload / clear_payload / update_vectors / delete_vectors) atomically per-shard.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"operations":{"type":"array","items":{"type":"object"}},"wait":{"type":"boolean"},"ordering":{"type":"string","enum":["weak","medium","strong"]}},"required":["collection_name","operations"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"points.search","description":"Run a similarity search. Body carries vector (or named { name, vector }), optional filter, params (hnsw_ef, exact), limit, offset, with_payload, with_vector, score_threshold.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"vector":{},"filter":{"type":"object"},"params":{"type":"object"},"limit":{"type":"integer","minimum":1},"offset":{"type":"integer","minimum":0},"with_payload":{},"with_vector":{},"score_threshold":{"type":"number"},"shard_key":{},"consistency":{},"timeout":{"type":"integer"}},"required":["collection_name","vector","limit"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"points.search_batch","description":"Execute many similarity searches in a single request against one collection.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"searches":{"type":"array","items":{"type":"object"}},"consistency":{},"timeout":{"type":"integer"}},"required":["collection_name","searches"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"points.query","description":"Unified query endpoint — supports nearest-neighbour, recommend, discover, context, fusion, and prefetch pipelines. Body is a Query object per Qdrant ≥1.10.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"query":{},"prefetch":{},"using":{"type":"string"},"filter":{"type":"object"},"params":{"type":"object"},"limit":{"type":"integer","minimum":1},"offset":{"type":"integer","minimum":0},"with_payload":{},"with_vector":{},"score_threshold":{"type":"number"},"shard_key":{},"lookup_from":{"type":"object"},"consistency":{},"timeout":{"type":"integer"}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"points.query_batch","description":"Batch variant of the unified query endpoint.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"searches":{"type":"array","items":{"type":"object"}},"consistency":{},"timeout":{"type":"integer"}},"required":["collection_name","searches"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"points.recommend","description":"Recommend points by example: positive and/or negative example point ids (or raw vectors), optional filter, params, limit.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"positive":{"type":"array","items":{}},"negative":{"type":"array","items":{}},"strategy":{"type":"string","enum":["average_vector","best_score"]},"filter":{"type":"object"},"params":{"type":"object"},"limit":{"type":"integer","minimum":1},"offset":{"type":"integer","minimum":0},"with_payload":{},"with_vector":{},"score_threshold":{"type":"number"},"using":{"type":"string"},"lookup_from":{"type":"object"},"shard_key":{},"consistency":{},"timeout":{"type":"integer"}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"points.scroll","description":"Paginated scan of points matching an optional filter. Returns the next `offset` token for the next page.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"offset":{},"limit":{"type":"integer","minimum":1},"filter":{"type":"object"},"with_payload":{},"with_vector":{},"order_by":{},"shard_key":{},"consistency":{},"timeout":{"type":"integer"}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"points.count","description":"Count points matching an optional filter. Pass exact=false for an approximate fast path.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"filter":{"type":"object"},"exact":{"type":"boolean"},"shard_key":{},"consistency":{},"timeout":{"type":"integer"}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"snapshots.list","description":"List snapshots for a collection.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"snapshots.create","description":"Create a new snapshot of the named collection.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"wait":{"type":"boolean"}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"snapshots.delete","description":"Delete a snapshot by name.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"snapshot_name":{"type":"string"},"wait":{"type":"boolean"}},"required":["collection_name","snapshot_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"snapshots.list_full","description":"List full-cluster snapshots (all collections).","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cluster.info","description":"Get cluster topology: peer ids, leader, raft state. Useful for routing-aware clients.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cluster.collection_info","description":"Get per-shard placement and replication state for a collection.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"snapshots.restore","description":"Restore a collection from a previously created snapshot URL. The Qdrant node fetches the snapshot file from `location` and replays it into the collection (creating it if needed). priority selects whether the local snapshot or the live replicas are authoritative during recovery.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"location":{"type":"string","description":"URL or local path of the snapshot file to recover from."},"priority":{"type":"string","enum":["no_sync","snapshot","replica"]},"checksum":{"type":"string","description":"Optional SHA-256 of the snapshot file for integrity."},"api_key":{"type":"string","description":"Optional api-key to authenticate the remote snapshot fetch."},"wait":{"type":"boolean"}},"required":["collection_name","location"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"shards.create","description":"Create a custom shard for collections that use sharding_method=\"custom\". Body carries shard_key (string or integer) and optional shards_number / replication_factor / placement overrides.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"shard_key":{"description":"Shard key — string or integer."},"shards_number":{"type":"integer","minimum":1},"replication_factor":{"type":"integer","minimum":1},"placement":{"type":"array","items":{"type":"integer"}},"wait":{"type":"boolean"},"timeout":{"type":"integer"}},"required":["collection_name","shard_key"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"shards.delete","description":"Delete a custom shard from a collection. Body carries the shard_key to drop. Only valid for collections that use sharding_method=\"custom\".","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"shard_key":{"description":"Shard key to delete — string or integer."},"wait":{"type":"boolean"},"timeout":{"type":"integer"}},"required":["collection_name","shard_key"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cluster.peer.remove","description":"Remove a peer from the Raft cluster by peer_id. Pass force=true to drop the peer even when it still holds replicas (data on that peer is lost). Use after physically decommissioning a node.","parameters":{"type":"object","properties":{"peer_id":{"type":"integer"},"force":{"type":"boolean"}},"required":["peer_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"quaderno","displayName":"Quaderno","description":"Manage contacts, invoices, and expenses in Quaderno for tax compliance and financial tracking.","auth":{"kind":"api-key","hint":"Quaderno API Key (account_name and api_key credentials)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.find","description":"Search for contacts by name, email, or tax ID.","parameters":{"type":"object","properties":{"searchQuery":{"type":"string"},"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create a new contact (customer or vendor).","parameters":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"fullName":{"type":"string"},"kind":{"type":"string"},"country":{"type":"string"},"city":{"type":"string"},"postalCode":{"type":"string"},"region":{"type":"string"},"streetLine1":{"type":"string"},"streetLine2":{"type":"string"},"taxId":{"type":"string"},"taxStatus":{"type":"string"},"language":{"type":"string"},"phone":{"type":"string"},"website":{"type":"string"},"discount":{"type":"number"},"notes":{"type":"string"},"processorId":{"type":"string"},"processor":{"type":"string"}},"required":["firstName","country"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.create","description":"Create a new invoice.","parameters":{"type":"object","properties":{"invoiceNumber":{"type":"string"},"dueDate":{"type":"string"},"customerFirstName":{"type":"string"},"customerLastName":{"type":"string"},"customerEmail":{"type":"string"},"customerCountry":{"type":"string"},"issueDate":{"type":"string"},"currency":{"type":"string"},"itemDescription":{"type":"string"},"itemQuantity":{"type":"number"},"itemUnitCost":{"type":"string"}},"required":["customerFirstName","issueDate","currency","itemDescription","itemQuantity","itemUnitCost"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update a contact's tax or billing fields.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"fullName":{"type":"string"},"kind":{"type":"string"},"country":{"type":"string"},"city":{"type":"string"},"postalCode":{"type":"string"},"region":{"type":"string"},"streetLine1":{"type":"string"},"streetLine2":{"type":"string"},"taxId":{"type":"string"},"taxStatus":{"type":"string"},"language":{"type":"string"},"phone":{"type":"string"},"website":{"type":"string"},"discount":{"type":"number"},"notes":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.delete","description":"Delete a contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.update","description":"Update an invoice.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"},"invoiceNumber":{"type":"string"},"dueDate":{"type":"string"},"issueDate":{"type":"string"},"currency":{"type":"string"},"poNumber":{"type":"string"},"notes":{"type":"string"},"tagList":{"type":"string"}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.deliver","description":"Email an invoice to the customer.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"},"emails":{"type":"string"}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"credits.create","description":"Create a credit note.","parameters":{"type":"object","properties":{"customerFirstName":{"type":"string"},"customerLastName":{"type":"string"},"customerEmail":{"type":"string"},"customerCountry":{"type":"string"},"issueDate":{"type":"string"},"currency":{"type":"string"},"creditNumber":{"type":"string"},"poNumber":{"type":"string"},"notes":{"type":"string"},"itemDescription":{"type":"string"},"itemQuantity":{"type":"number"},"itemUnitCost":{"type":"string"}},"required":["customerFirstName","issueDate","currency","itemDescription","itemQuantity","itemUnitCost"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"expenses.create","description":"Create a new expense.","parameters":{"type":"object","properties":{"issueDate":{"type":"string"},"currency":{"type":"string"},"contactFirstName":{"type":"string"},"contactLastName":{"type":"string"},"contactEmail":{"type":"string"},"contactCountry":{"type":"string"},"itemDescription":{"type":"string"},"itemQuantity":{"type":"number"},"itemUnitCost":{"type":"string"},"paymentMethod":{"type":"string"},"poNumber":{"type":"string"},"tagList":{"type":"string"}},"required":["issueDate","currency","contactFirstName","contactCountry","itemDescription","itemQuantity","itemUnitCost","paymentMethod"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"quickbooks","displayName":"QuickBooks","description":"Query QuickBooks Online entities with SQL-like queries and create or update customers, invoices, and items.","auth":{"kind":"oauth2","authorizationUrl":"https://appcenter.intuit.com/connect/oauth2","tokenUrl":"https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer","scopes":["com.intuit.quickbooks.accounting"],"clientIdEnv":"QUICKBOOKS_OAUTH_CLIENT_ID","clientSecretEnv":"QUICKBOOKS_OAUTH_CLIENT_SECRET"},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"reports.get","description":"Run a QuickBooks Online report. `reportName` is the QBO report id (ProfitAndLoss, BalanceSheet, TrialBalance, GeneralLedger, CashFlow, AgedReceivables, AgedPayables).","parameters":{"type":"object","properties":{"reportName":{"type":"string","enum":["ProfitAndLoss","BalanceSheet","TrialBalance","GeneralLedger","CashFlow","AgedReceivables","AgedPayables"]},"start_date":{"type":"string","description":"YYYY-MM-DD (inclusive)."},"end_date":{"type":"string","description":"YYYY-MM-DD (inclusive)."},"accounting_method":{"type":"string","enum":["Cash","Accrual"]},"date_macro":{"type":"string","description":"e.g. \"Last Fiscal Year\" — alternative to start/end dates."},"summarize_column_by":{"type":"string","description":"e.g. Month, Quarter, Year, Total."},"minorversion":{"type":"string"}},"required":["reportName"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"read"},{"name":"companyinfo.get","description":"Read the connected QuickBooks company profile (legal name, EIN/company id, fiscal year start, country) for the realm this connection was authorized against.","parameters":{"type":"object","properties":{"minorversion":{"type":"string"}}},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"read"},{"name":"entities.query","description":"Run a QuickBooks Online query (e.g. \"SELECT * FROM Customer WHERE Active = true MAXRESULTS 50\").","parameters":{"type":"object","properties":{"query":{"type":"string"},"minorversion":{"type":"string"}},"required":["query"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"read"},{"name":"customers.get","description":"Read a QuickBooks customer by id.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"minorversion":{"type":"string"}},"required":["customerId"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"read"},{"name":"customers.create","description":"Create a QuickBooks customer.","parameters":{"type":"object","properties":{"DisplayName":{"type":"string"},"GivenName":{"type":"string"},"FamilyName":{"type":"string"},"CompanyName":{"type":"string"},"PrimaryEmailAddr":{"type":"object"},"PrimaryPhone":{"type":"object"},"BillAddr":{"type":"object"},"Notes":{"type":"string"}},"required":["DisplayName"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.update","description":"Sparse-update a QuickBooks customer. Caller must include Id and SyncToken from the prior read.","parameters":{"type":"object","properties":{"Id":{"type":"string"},"SyncToken":{"type":"string"},"sparse":{"type":"boolean","default":true},"DisplayName":{"type":"string"},"GivenName":{"type":"string"},"FamilyName":{"type":"string"},"CompanyName":{"type":"string"},"PrimaryEmailAddr":{"type":"object"},"PrimaryPhone":{"type":"object"},"BillAddr":{"type":"object"},"Notes":{"type":"string"},"Active":{"type":"boolean"}},"required":["Id","SyncToken"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"invoices.get","description":"Read a QuickBooks invoice by id.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"},"minorversion":{"type":"string"}},"required":["invoiceId"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"read"},{"name":"invoices.create","description":"Create a QuickBooks invoice. `Line` and `CustomerRef` are required by the API.","parameters":{"type":"object","properties":{"CustomerRef":{"type":"object"},"Line":{"type":"array","items":{"type":"object"}},"TxnDate":{"type":"string"},"DueDate":{"type":"string"},"CurrencyRef":{"type":"object"},"BillEmail":{"type":"object"},"PrivateNote":{"type":"string"},"CustomerMemo":{"type":"object"}},"required":["CustomerRef","Line"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.update","description":"Sparse-update a QuickBooks invoice. Caller must include Id and SyncToken from the prior read.","parameters":{"type":"object","properties":{"Id":{"type":"string"},"SyncToken":{"type":"string"},"sparse":{"type":"boolean","default":true},"CustomerRef":{"type":"object"},"Line":{"type":"array","items":{"type":"object"}},"DueDate":{"type":"string"},"CustomerMemo":{"type":"object"},"PrivateNote":{"type":"string"}},"required":["Id","SyncToken"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"items.create","description":"Create a QuickBooks item (product or service).","parameters":{"type":"object","properties":{"Name":{"type":"string"},"Type":{"type":"string","enum":["Service","Inventory","NonInventory"]},"IncomeAccountRef":{"type":"object"},"ExpenseAccountRef":{"type":"object"},"UnitPrice":{"type":"number"},"Description":{"type":"string"},"Taxable":{"type":"boolean"}},"required":["Name","Type","IncomeAccountRef"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.delete","description":"Mark a QuickBooks customer inactive. QBO does not support hard deletes — caller must supply Id and SyncToken from the prior read.","parameters":{"type":"object","properties":{"Id":{"type":"string"},"SyncToken":{"type":"string"},"sparse":{"type":"boolean","default":true},"Active":{"type":"boolean","default":false}},"required":["Id","SyncToken"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.delete","description":"Void a QuickBooks invoice (QBO does not hard-delete invoices). Caller must supply Id and SyncToken.","parameters":{"type":"object","properties":{"Id":{"type":"string"},"SyncToken":{"type":"string"}},"required":["Id","SyncToken"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.send","description":"Email a QuickBooks invoice to the customer (optionally override the recipient with `sendTo`).","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"},"sendTo":{"type":"string"}},"required":["invoiceId"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bills.create","description":"Create a QuickBooks vendor bill. `VendorRef` and `Line` are required by the API.","parameters":{"type":"object","properties":{"VendorRef":{"type":"object"},"Line":{"type":"array","items":{"type":"object"}},"TxnDate":{"type":"string"},"DueDate":{"type":"string"},"CurrencyRef":{"type":"object"},"PrivateNote":{"type":"string"},"APAccountRef":{"type":"object"}},"required":["VendorRef","Line"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"vendors.create","description":"Create a QuickBooks vendor.","parameters":{"type":"object","properties":{"DisplayName":{"type":"string"},"GivenName":{"type":"string"},"FamilyName":{"type":"string"},"CompanyName":{"type":"string"},"PrimaryEmailAddr":{"type":"object"},"PrimaryPhone":{"type":"object"},"BillAddr":{"type":"object"},"TaxIdentifier":{"type":"string"},"AcctNum":{"type":"string"}},"required":["DisplayName"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payments.create","description":"Record a QuickBooks payment against a customer (and optionally apply to invoices via `Line[].LinkedTxn`).","parameters":{"type":"object","properties":{"CustomerRef":{"type":"object"},"TotalAmt":{"type":"number"},"TxnDate":{"type":"string"},"PaymentMethodRef":{"type":"object"},"DepositToAccountRef":{"type":"object"},"Line":{"type":"array","items":{"type":"object"}},"PrivateNote":{"type":"string"}},"required":["CustomerRef","TotalAmt"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"quickzu","displayName":"Quickzu","description":"Streamline WhatsApp ordering with Quickzu — manage products, categories, orders, discounts, and business hours.","auth":{"kind":"api-key","hint":"Quickzu API key."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"business.hours.update","description":"Update business hours for a specific day.","parameters":{"type":"object","properties":{"weekday":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"]},"start":{"type":"string","description":"Start time in 24-hour format (HH:MM)."},"end":{"type":"string","description":"End time in 24-hour format (HH:MM)."},"status":{"type":"boolean","description":"Enable or disable the business day."}},"required":["weekday","start","end","status"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"categories.list","description":"List all product categories.","parameters":{"type":"object","properties":{"search":{"type":"string","description":"Search term to filter categories."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"categories.create","description":"Create a new product category.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Category name."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"categories.update","description":"Update an existing category.","parameters":{"type":"object","properties":{"categoryId":{"type":"string"},"name":{"type":"string","description":"Updated category name."}},"required":["categoryId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"categories.delete","description":"Delete a product category.","parameters":{"type":"object","properties":{"categoryId":{"type":"string"}},"required":["categoryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"products.list","description":"List all products with optional pagination and filtering.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Number of live orders to fetch per status."},"page":{"type":"integer","description":"Current page number."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.add","description":"Add a new product to the catalog.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Product name."},"desc":{"type":"string","description":"Product description."},"mrp":{"type":"number","description":"Maximum Retail Price."},"price":{"type":"number","description":"Selling price (must be <= MRP)."},"unit":{"type":"string","enum":["kg","ltr","pcs","dozen","box"],"description":"Unit of measure."},"value_per_unit":{"type":"number","description":"Unit value."},"availability":{"type":"boolean","description":"Product availability status."},"exclude_tax":{"type":"boolean","description":"Exclude tax from price."},"enable_variants":{"type":"boolean","description":"Enable product variants."}},"required":["name","mrp","unit","value_per_unit","availability"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.update","description":"Update an existing product.","parameters":{"type":"object","properties":{"productId":{"type":"string"},"name":{"type":"string"},"desc":{"type":"string"},"mrp":{"type":"number"},"price":{"type":"number"},"unit":{"type":"string"},"value_per_unit":{"type":"number"},"availability":{"type":"boolean"},"exclude_tax":{"type":"boolean"},"enable_variants":{"type":"boolean"}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"products.delete","description":"Delete a product from the catalog.","parameters":{"type":"object","properties":{"productId":{"type":"string"}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"orders.list","description":"List all orders with pagination.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Number of orders per page."},"page":{"type":"integer","description":"Page number."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.live","description":"List live orders with optional pagination.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Number of live orders per status."},"page":{"type":"integer","description":"Page number."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.get","description":"Get details of a specific order.","parameters":{"type":"object","properties":{"orderId":{"type":"string"}},"required":["orderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.update-status","description":"Update the status of an order.","parameters":{"type":"object","properties":{"orderId":{"type":"string"},"status":{"type":"string","description":"New order status."}},"required":["orderId","status"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"orders.cancel","description":"Cancel an open order.","parameters":{"type":"object","properties":{"orderId":{"type":"string"}},"required":["orderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.refund","description":"Refund an order, optionally specifying an amount and reason.","parameters":{"type":"object","properties":{"orderId":{"type":"string"},"amount":{"type":"number","description":"Optional refund amount (defaults to full order total)."},"reason":{"type":"string","description":"Optional refund reason."}},"required":["orderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"discounts.create","description":"Create a product discount.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"Discount title."},"type":{"type":"string","enum":["products","categories"],"description":"What gets discounted."},"selectedFilterValues":{"type":"array","items":{"type":"string"},"description":"Product or category IDs eligible for discount."},"value":{"type":"number","description":"Discount value (percentage or amount)."},"is_enabled":{"type":"boolean","description":"Enable or disable the discount."},"is_visible":{"type":"boolean","description":"Visibility to customers."}},"required":["title","type","value","is_enabled"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"discounts.delete","description":"Delete a product discount.","parameters":{"type":"object","properties":{"discountId":{"type":"string","description":"Discount ID."}},"required":["discountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"promo-codes.delete","description":"Delete a promotional code.","parameters":{"type":"object","properties":{"promoCodeId":{"type":"string","description":"Promo code ID."}},"required":["promoCodeId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"categories.reorder","description":"Reorder the category list.","parameters":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"string"},"description":"Category IDs in their desired display order."}},"required":["categoryIds"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"promo-codes.create","description":"Create a promotional code.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"Promotion title."},"promo_code":{"type":"string","description":"Promo code string."},"value":{"type":"number","description":"Discount value."},"filter_type":{"type":"string","enum":["products","categories"],"description":"What gets discounted."},"selectedFilterValues":{"type":"array","items":{"type":"string"},"description":"Eligible product or category IDs."},"start_date":{"type":"string","description":"Valid from date (YYYY-MM-DD format)."},"end_date":{"type":"string","description":"Valid to date (YYYY-MM-DD format)."},"minimum_cart_value":{"type":"number","description":"Minimum order amount."},"max_users_limit":{"type":"number","description":"Maximum number of uses."},"is_enabled":{"type":"boolean","description":"Enable or disable the code."}},"required":["title","promo_code","value","start_date","end_date"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"rabbitmq","displayName":"RabbitMQ","description":"Inspect queues and exchanges and publish confirmed JSON messages over verified TLS.","auth":{"kind":"api-key","hint":"JSON with a public RabbitMQ host, username, password, virtual host, and optional TLS client credentials."},"defaultConsistencyModel":"advisory","category":"webhook","rateLimit":{"requests":120,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"rabbitmq.queues.inspect","class":"read","description":"Check a queue and return its current message and consumer counts.","parameters":{"type":"object","properties":{"queue":{"type":"string","minLength":1,"maxLength":255,"description":"Existing RabbitMQ queue name."}},"required":["queue"],"additionalProperties":false}},{"name":"rabbitmq.exchanges.inspect","class":"read","description":"Check whether a named exchange exists and is visible to the connection.","parameters":{"type":"object","properties":{"exchange":{"type":"string","minLength":1,"maxLength":255,"description":"Existing RabbitMQ exchange name."}},"required":["exchange"],"additionalProperties":false}},{"name":"send.message.to.queue","class":"mutation","description":"Publish a persistent JSON message directly to an existing queue with broker confirmation.","parameters":{"type":"object","properties":{"queue":{"type":"string","minLength":1,"maxLength":255,"description":"Existing RabbitMQ queue name."},"data":{},"persistent":{"type":"boolean","default":true},"expirationMs":{"type":"integer","minimum":1,"maximum":604800000},"priority":{"type":"integer","minimum":0,"maximum":255}},"required":["queue","data"],"additionalProperties":false},"cas":"none","externalEffect":true},{"name":"send.message.to.exchange","class":"mutation","description":"Publish a persistent JSON message to an existing exchange with broker confirmation.","parameters":{"type":"object","properties":{"exchange":{"type":"string","minLength":1,"maxLength":255,"description":"Existing RabbitMQ exchange name."},"routingKey":{"type":"string","maxLength":255,"default":""},"data":{},"persistent":{"type":"boolean","default":true},"expirationMs":{"type":"integer","minimum":1,"maximum":604800000},"priority":{"type":"integer","minimum":0,"maximum":255}},"required":["exchange","data"],"additionalProperties":false},"cas":"none","externalEffect":true}]},{"kind":"raia-ai","displayName":"Raia AI","description":"Run AI agent workflows with Raia, including prompting agents and uploading agent files.","auth":{"kind":"api-key","hint":"Raia API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"agent.prompt","description":"Run a prompt against an AI agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string"},"prompt":{"type":"string"}},"required":["agentId","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"agent.file.upload","description":"Upload a file to an AI agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string"},"file":{"type":"string"}},"required":["agentId","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"ramp","displayName":"Ramp","description":"Read Ramp cards, users, transactions, reimbursements, vendors, and spend programs.","auth":{"kind":"api-key","hint":"Ramp OAuth access token. Create a free developer app or customer-issued API connection and paste the bearer token."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.list","description":"List Ramp users and their status.","parameters":{"type":"object","properties":{"page_size":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"string","description":"Opaque next-page cursor."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cards.list","description":"List physical and virtual cards.","parameters":{"type":"object","properties":{"page_size":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"string","description":"Opaque next-page cursor."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transactions.list","description":"List card transactions and accounting status.","parameters":{"type":"object","properties":{"page_size":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"string","description":"Opaque next-page cursor."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reimbursements.list","description":"List employee reimbursements.","parameters":{"type":"object","properties":{"page_size":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"string","description":"Opaque next-page cursor."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"vendors.list","description":"List vendors known to Ramp.","parameters":{"type":"object","properties":{"page_size":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"string","description":"Opaque next-page cursor."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"spend-programs.list","description":"List spend programs and controls.","parameters":{"type":"object","properties":{"page_size":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"string","description":"Opaque next-page cursor."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"rapidtext-ai","displayName":"RapidText AI","description":"Generate articles and send prompts using RapidText AI.","auth":{"kind":"api-key","hint":"RapidText AI API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"article.generate","description":"Generate an article using RapidText AI.","parameters":{"type":"object","properties":{"prompt":{"type":"string","description":"The prompt for article generation."},"max_tokens":{"type":"integer","description":"Maximum number of tokens to generate."},"temperature":{"type":"number","description":"Sampling temperature between 0 and 2."},"top_p":{"type":"number","description":"Nucleus sampling parameter."},"frequency_penalty":{"type":"number","description":"Penalty for new tokens based on frequency."},"presence_penalty":{"type":"number","description":"Penalty for new tokens based on presence."}},"required":["prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"prompt.send","description":"Send a prompt to RapidText AI for processing.","parameters":{"type":"object","properties":{"prompt":{"type":"string","description":"The text prompt to process."},"max_tokens":{"type":"integer","description":"Maximum number of tokens to generate."},"temperature":{"type":"number","description":"Sampling temperature between 0 and 2."},"top_p":{"type":"number","description":"Nucleus sampling parameter."},"frequency_penalty":{"type":"number","description":"Penalty for new tokens based on frequency."},"presence_penalty":{"type":"number","description":"Penalty for new tokens based on presence."}},"required":["prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"reachinbox","displayName":"ReachInbox","description":"Manage campaigns, leads, email accounts, and warmup schedules in ReachInbox.","auth":{"kind":"api-key","hint":"ReachInbox API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"campaigns.list","description":"Get campaign analytics and summary information.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.summary","description":"Get overall account summary.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.add","description":"Add leads to a campaign.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"},"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"customVariables":{"type":"object"}},"required":["campaignId","email","firstName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update","description":"Update a lead with custom variables or details.","parameters":{"type":"object","properties":{"leadId":{"type":"string"},"customVariables":{"type":"object"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"leads.remove","description":"Remove an email from a campaign.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"},"email":{"type":"string"}},"required":["campaignId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"blocklist.add","description":"Add emails or domains to the blocklist.","parameters":{"type":"object","properties":{"emails":{"type":"array"},"domains":{"type":"array"},"keywords":{"type":"array"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.start","description":"Start a campaign.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.pause","description":"Pause a campaign.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"warmup.enable","description":"Enable email warmup for account(s).","parameters":{"type":"object","properties":{"accountId":{"type":"string"}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"warmup.pause","description":"Pause email warmup for account(s).","parameters":{"type":"object","properties":{"accountId":{"type":"string"}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"schedule.set","description":"Set a warmup or campaign schedule.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"scheduleName":{"type":"string"},"startDate":{"type":"string"},"endDate":{"type":"string"},"startTime":{"type":"string"},"endTime":{"type":"string"},"timezone":{"type":"string"},"sunday":{"type":"boolean"},"monday":{"type":"boolean"},"tuesday":{"type":"boolean"},"wednesday":{"type":"boolean"},"thursday":{"type":"boolean"},"friday":{"type":"boolean"},"saturday":{"type":"boolean"}},"required":["accountId","scheduleName","startDate","endDate","startTime","endTime","timezone","sunday","monday","tuesday","wednesday","thursday","friday","saturday"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"email.add","description":"Add a new email account.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.create","description":"Create a new outbound email campaign.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"fromEmail":{"type":"string"},"subject":{"type":"string"},"body":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.delete","description":"Delete a campaign.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"templates.list","description":"List email templates available in the workspace.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"inbox.replies.fetch","description":"Fetch latest replies from the unified inbox (uni-box / master inbox).","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"campaignId":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"recall-ai","displayName":"Recall.ai","description":"Create meeting bots, inspect bot state, and send in-meeting chat messages.","auth":{"kind":"api-key","hint":"Recall.ai API key. Select a regional server on the connection; us-east-1 is the default."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"bots.create","description":"Create a Recall.ai bot that joins the supplied meeting URL.","parameters":{"type":"object","properties":{"meeting_url":{"type":"string","description":"URL of the meeting to join."},"bot_name":{"type":"string","maxLength":100,"description":"Display name shown in the meeting."}},"required":["meeting_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bots.retrieve","description":"Retrieve the status and details of a Recall.ai bot.","parameters":{"type":"object","properties":{"bot_id":{"type":"string","description":"UUID of the bot to retrieve."}},"required":["bot_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.send","description":"Send a chat message from an active Recall.ai bot.","parameters":{"type":"object","properties":{"bot_id":{"type":"string","description":"UUID of the bot sending the message."},"message":{"type":"string","maxLength":4096},"to":{"type":"string","description":"Recipient; defaults to everyone."},"pin":{"type":"boolean","description":"Pin the message when the meeting platform supports it."}},"required":["bot_id","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"recurly","displayName":"Recurly","description":"Manage Recurly billing accounts, plans, subscriptions, invoices, and subscription lifecycle state.","auth":{"kind":"api-key","hint":"Recurly private API key from Developer Settings. Sent as the HTTP Basic username with an empty password."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"sites.list","description":"List sites accessible to the supplied Recurly private API key.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.list","description":"List billing accounts with optional lifecycle and time filters.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200},"cursor":{"type":"string"},"sort":{"type":"string","enum":["asc","desc"]},"begin_time":{"type":"string","description":"ISO 8601 lower timestamp bound."},"end_time":{"type":"string","description":"ISO 8601 upper timestamp bound."},"state":{"type":"string","enum":["active","closed","any"]},"email":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.get","description":"Read one billing account by UUID or code-prefixed identifier.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Account UUID or `code-<account code>`."}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.create","description":"Create a billing account.","parameters":{"type":"object","properties":{"code":{"type":"string"},"email":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"company":{"type":"string"},"preferred_locale":{"type":"string"},"preferred_time_zone":{"type":"string"},"address":{"type":"object"},"custom_fields":{"type":"array","items":{"type":"object"}}},"required":["code","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"accounts.update","description":"Update profile, address, locale, or custom fields on a billing account.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Account UUID or `code-<account code>`."},"email":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"company":{"type":"string"},"preferred_locale":{"type":"string"},"preferred_time_zone":{"type":"string"},"address":{"type":"object"},"custom_fields":{"type":"array","items":{"type":"object"}}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"plans.list","description":"List subscription plans.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200},"cursor":{"type":"string"},"sort":{"type":"string","enum":["asc","desc"]},"begin_time":{"type":"string","description":"ISO 8601 lower timestamp bound."},"end_time":{"type":"string","description":"ISO 8601 upper timestamp bound."},"state":{"type":"string","enum":["active","inactive"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.list","description":"List subscriptions across the site.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200},"cursor":{"type":"string"},"sort":{"type":"string","enum":["asc","desc"]},"begin_time":{"type":"string","description":"ISO 8601 lower timestamp bound."},"end_time":{"type":"string","description":"ISO 8601 upper timestamp bound."},"state":{"type":"string","enum":["active","canceled","expired","failed","future","paused"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.subscriptions.list","description":"List subscriptions belonging to one billing account.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200},"cursor":{"type":"string"},"sort":{"type":"string","enum":["asc","desc"]},"begin_time":{"type":"string","description":"ISO 8601 lower timestamp bound."},"end_time":{"type":"string","description":"ISO 8601 upper timestamp bound."},"accountId":{"type":"string","description":"Account UUID or `code-<account code>`."},"state":{"type":"string","enum":["active","canceled","expired","failed","future","paused"]}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.get","description":"Read one subscription by UUID.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string","description":"Subscription UUID."}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.create","description":"Start a subscription for an existing or inline billing account.","parameters":{"type":"object","properties":{"plan_code":{"type":"string"},"currency":{"type":"string","minLength":3,"maxLength":3},"account":{"type":"object","description":"Existing account reference or inline account object."},"quantity":{"type":"integer","minimum":1},"starts_at":{"type":"string"},"trial_ends_at":{"type":"string"},"collection_method":{"type":"string","enum":["automatic","manual"]},"net_terms":{"type":"integer","minimum":0},"custom_fields":{"type":"array","items":{"type":"object"}}},"required":["plan_code","currency","account"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.cancel","description":"Schedule a subscription to cancel at its renewal date.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string","description":"Subscription UUID."}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.reactivate","description":"Reactivate a subscription that is pending cancellation.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string","description":"Subscription UUID."}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.terminate","description":"Immediately terminate a subscription, with an explicit refund policy.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string","description":"Subscription UUID."},"refund":{"type":"string","enum":["none","partial","full"]}},"required":["subscriptionId","refund"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.list","description":"List invoices with account, state, type, and time filters.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200},"cursor":{"type":"string"},"sort":{"type":"string","enum":["asc","desc"]},"begin_time":{"type":"string","description":"ISO 8601 lower timestamp bound."},"end_time":{"type":"string","description":"ISO 8601 upper timestamp bound."},"accountId":{"type":"string","description":"Optional account UUID or `code-<account code>`."},"state":{"type":"string","enum":["pending","processing","past_due","paid","failed","voided"]},"type":{"type":"string","enum":["charge","credit","non-legacy"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"invoices.get","description":"Read one invoice by UUID or number-prefixed identifier.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string","description":"Invoice UUID or `number-<invoice number>`."}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.invoices.list","description":"List invoices belonging to one billing account.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200},"cursor":{"type":"string"},"sort":{"type":"string","enum":["asc","desc"]},"begin_time":{"type":"string","description":"ISO 8601 lower timestamp bound."},"end_time":{"type":"string","description":"ISO 8601 upper timestamp bound."},"accountId":{"type":"string","description":"Account UUID or `code-<account code>`."},"state":{"type":"string","enum":["pending","processing","past_due","paid","failed","voided"]},"type":{"type":"string","enum":["charge","credit","non-legacy"]}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"reddit","displayName":"Reddit","description":"Interact with Reddit — fetch and submit posts, retrieve comments, create and edit posts/comments.","auth":{"kind":"oauth2","authorizationUrl":"https://www.reddit.com/api/v1/authorize","tokenUrl":"https://www.reddit.com/api/v1/access_token","scopes":["identity","read","submit","edit"],"pkce":"unsupported","tokenClientAuthMethod":"client_secret_basic","extraAuthParams":{"duration":"permanent"},"tokenRequestHeaders":{"User-Agent":"web:tools.tangle.integration-hub:v1.0 (contact: https://tangle.tools)"},"clientIdEnv":"REDDIT_OAUTH_CLIENT_ID","clientSecretEnv":"REDDIT_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"post.retrieve","description":"Retrieve a Reddit post by its fullname, such as t3_abc123.","parameters":{"type":"object","properties":{"postId":{"type":"string","description":"Reddit post fullname, such as t3_abc123."}},"required":["postId"]},"requiredScopes":["read"],"class":"read"},{"name":"post.details","description":"Get detailed metadata for a Reddit post including title, body, and engagement metrics.","parameters":{"type":"object","properties":{"subreddit":{"type":"string"},"postId":{"type":"string"}},"required":["subreddit","postId"]},"requiredScopes":["read"],"class":"read"},{"name":"post.create","description":"Create a new post in a subreddit. Supports self-posts (with title and text body) and link posts (with title and URL).","parameters":{"type":"object","properties":{"subreddit":{"type":"string"},"title":{"type":"string"},"kind":{"type":"string","enum":["self","link"]},"text":{"type":"string"},"url":{"type":"string"},"flair_id":{"type":"string"}},"required":["subreddit","title","kind"]},"requiredScopes":["submit"],"class":"mutation","cas":"none","externalEffect":true},{"name":"comment.create","description":"Create a comment on a Reddit post or reply to another comment.","parameters":{"type":"object","properties":{"parentId":{"type":"string"},"text":{"type":"string"}},"required":["parentId","text"]},"requiredScopes":["submit"],"class":"mutation","cas":"none","externalEffect":true},{"name":"comments.fetch","description":"Fetch all comments on a post, optionally filtered by sort order (best, top, new, controversial, old, qa) and depth.","parameters":{"type":"object","properties":{"subreddit":{"type":"string"},"postId":{"type":"string"},"sort":{"type":"string","enum":["best","top","new","controversial","old","qa"]},"limit":{"type":"integer"}},"required":["subreddit","postId"]},"requiredScopes":["read"],"class":"read"},{"name":"post.edit","description":"Edit the body text of a self-post (title is immutable post-creation).","parameters":{"type":"object","properties":{"thingId":{"type":"string"},"text":{"type":"string"}},"required":["thingId","text"]},"requiredScopes":["edit"],"class":"mutation","cas":"none","externalEffect":true},{"name":"comment.edit","description":"Edit the text of a comment you authored.","parameters":{"type":"object","properties":{"thingId":{"type":"string"},"text":{"type":"string"}},"required":["thingId","text"]},"requiredScopes":["edit"],"class":"mutation","cas":"none","externalEffect":true},{"name":"post.delete","description":"Delete a post you authored (permanent deletion).","parameters":{"type":"object","properties":{"thingId":{"type":"string"}},"required":["thingId"]},"requiredScopes":["edit"],"class":"mutation","cas":"none","externalEffect":true},{"name":"comment.delete","description":"Delete a comment you authored (permanent deletion).","parameters":{"type":"object","properties":{"thingId":{"type":"string"}},"required":["thingId"]},"requiredScopes":["edit"],"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"redis","displayName":"Redis","description":"Inspect and scan Redis keys and perform bounded, approved string compare-and-swap mutations over verified TLS.","auth":{"kind":"api-key","hint":"JSON with a public Redis host, password, optional ACL username/database, and optional TLS CA. Verified TLS is mandatory."},"defaultConsistencyModel":"authoritative","category":"database","rateLimit":{"requests":120,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"redis.keys.scan","class":"read","description":"Read one bounded SCAN page without blocking the server with KEYS.","parameters":{"type":"object","properties":{"cursor":{"type":"string","pattern":"^[0-9]+$","default":"0"},"match":{"type":"string","maxLength":4096,"default":"*"},"count":{"type":"integer","minimum":1,"maximum":1000,"default":100},"type":{"type":"string","enum":["string","list","set","zset","hash","stream"]}},"additionalProperties":false}},{"name":"redis.key.inspect","class":"read","description":"Read a key type and remaining expiry atomically.","parameters":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":1024}},"required":["key"],"additionalProperties":false}},{"name":"redis.string.get","class":"read","description":"Read one bounded string value, type, and remaining expiry atomically.","parameters":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":1024}},"required":["key"],"additionalProperties":false}},{"name":"redis.string.set","class":"mutation","description":"Set a bounded string only when the key is absent, present, or matches an expected value.","parameters":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":1024},"value":{"type":"string","maxLength":1048576},"condition":{"type":"string","enum":["absent","present","matches"]},"expectedValue":{"type":"string","maxLength":1048576},"ttlMs":{"type":"integer","minimum":1,"maximum":2592000000},"keepTtl":{"type":"boolean","default":false}},"required":["key","value","condition"],"additionalProperties":false},"cas":"optimistic-read-verify","externalEffect":true},{"name":"redis.string.delete","class":"mutation","description":"Delete a string key only when its current value exactly matches the caller expectation.","parameters":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":1024},"expectedValue":{"type":"string","maxLength":1048576}},"required":["key","expectedValue"],"additionalProperties":false},"cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"redshift","displayName":"Amazon Redshift","description":"Inspect Redshift schemas and tables and run bounded structured row reads over the verified PostgreSQL wire protocol.","auth":{"kind":"api-key","hint":"JSON with a public Redshift host, database, user, password, optional port, and optional TLS CA. Verified TLS is mandatory."},"defaultConsistencyModel":"authoritative","category":"database","rateLimit":{"requests":120,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"redshift.schemas.list","class":"read","description":"List schemas visible to the connected Amazon Redshift user.","parameters":{"type":"object","properties":{},"additionalProperties":false}},{"name":"redshift.tables.list","class":"read","description":"List tables and views in one schema.","parameters":{"type":"object","properties":{"schema":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Schema name; defaults to public."}},"additionalProperties":false}},{"name":"redshift.tables.describe","class":"read","description":"Read ordered column metadata for one table or view.","parameters":{"type":"object","properties":{"schema":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Schema name; defaults to public."},"table":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Table or view name."}},"required":["table"],"additionalProperties":false}},{"name":"redshift.rows.select","class":"read","description":"Read bounded rows using an identifier-safe query builder with scalar predicates.","parameters":{"type":"object","properties":{"schema":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Schema name; defaults to public."},"table":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Table or view name."},"columns":{"type":"array","minItems":1,"maxItems":64,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Column name."}},"filters":{"type":"array","maxItems":20,"items":{"type":"object","properties":{"column":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Column name."},"operator":{"type":"string","enum":["eq","ne","lt","lte","gt","gte","like","is-null","not-null"]},"value":{"type":["string","number","boolean","null"]}},"required":["column","operator"],"additionalProperties":false}},"orderBy":{"type":"array","maxItems":8,"items":{"type":"object","properties":{"column":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Column name."},"direction":{"type":"string","enum":["asc","desc"],"default":"asc"}},"required":["column"],"additionalProperties":false}},"limit":{"type":"integer","minimum":1,"maximum":10000,"default":100},"offset":{"type":"integer","minimum":0,"maximum":1000000,"default":0}},"required":["table","columns"],"additionalProperties":false}}]},{"kind":"reoon-verifier","displayName":"Reoon Verifier","description":"Email validation service that cleans invalid, temporary, and unsafe email addresses.","auth":{"kind":"api-key","hint":"Reoon API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"verify.email","description":"Verify a single email address.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bulk.email.verification","description":"Start a bulk email verification task.","parameters":{"type":"object","properties":{"taskName":{"type":"string"},"emails":{"type":"array","items":{"type":"string"}}},"required":["taskName","emails"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bulk.verification.result","description":"Get results from a bulk verification task.","parameters":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"reply-io","displayName":"Reply.io","description":"Sales engagement platform for contacts, campaigns, and outbound outreach workflows.","auth":{"kind":"api-key","hint":"Reply.io API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.create","description":"Create a new contact or update an existing contact by email.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Contact email address."},"firstName":{"type":"string","description":"Contact first name."},"lastName":{"type":"string","description":"Contact last name."},"company":{"type":"string","description":"Contact company."},"title":{"type":"string","description":"Contact job title."},"phone":{"type":"string","description":"Contact phone number."},"linkedInProfile":{"type":"string","description":"Contact LinkedIn profile URL."},"notes":{"type":"string","description":"Internal notes about the contact."},"city":{"type":"string","description":"Contact city."},"state":{"type":"string","description":"Contact state or province."},"country":{"type":"string","description":"Contact country."},"timeZoneId":{"type":"string","description":"IANA timezone identifier."}},"required":["email","firstName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.push_to_campaign","description":"Push an existing contact to a campaign.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact ID."},"campaignId":{"type":"string","description":"Campaign ID to push contact into."},"forcePush":{"type":"boolean","description":"Force push even if contact is in another active campaign."}},"required":["contactId","campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.create_and_push","description":"Create a new contact and push directly to a campaign.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Contact email address."},"firstName":{"type":"string","description":"Contact first name."},"lastName":{"type":"string","description":"Contact last name."},"company":{"type":"string","description":"Contact company."},"title":{"type":"string","description":"Contact job title."},"phone":{"type":"string","description":"Contact phone number."},"linkedInProfile":{"type":"string","description":"Contact LinkedIn profile URL."},"notes":{"type":"string","description":"Internal notes about the contact."},"city":{"type":"string","description":"Contact city."},"state":{"type":"string","description":"Contact state or province."},"country":{"type":"string","description":"Contact country."},"timeZoneId":{"type":"string","description":"IANA timezone identifier."},"campaignId":{"type":"string","description":"Campaign ID to push contact into."},"forcePush":{"type":"boolean","description":"Force push even if contact is in another active campaign."}},"required":["email","firstName","campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.get","description":"Retrieve a contact by ID.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact ID."}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.mark_replied","description":"Mark a contact as replied.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact ID."}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.mark_finished","description":"Mark a contact as finished.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact ID."}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.remove_from_campaign","description":"Remove a contact from a specific campaign.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact ID."},"campaignId":{"type":"string","description":"Campaign ID to remove contact from."}},"required":["contactId","campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.remove_from_all_campaigns","description":"Remove a contact from all campaigns.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact ID."}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.delete","description":"Delete a contact permanently.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact ID."}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.list","description":"List campaigns visible to the authenticated account.","parameters":{"type":"object","properties":{"state":{"type":"string","description":"Optional campaign state filter (e.g. active, paused, new)."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.start","description":"Start (or resume) a campaign by id.","parameters":{"type":"object","properties":{"campaignId":{"type":"string","description":"Campaign id to start."}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.pause","description":"Pause a running campaign by id.","parameters":{"type":"object","properties":{"campaignId":{"type":"string","description":"Campaign id to pause."}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"templates.create","description":"Create a reusable email template.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Template name."},"subject":{"type":"string","description":"Email subject."},"body":{"type":"string","description":"Email body (HTML or text)."}},"required":["name","subject","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"retable","displayName":"Retable","description":"Turn your spreadsheets into smart database apps. Create and manage projects, workspaces, and records.","auth":{"kind":"api-key","hint":"Retable API key."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"workspaces.list","description":"List all workspaces.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workspaces.create","description":"Create a new workspace.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"color":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.list","description":"List all projects.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.create","description":"Create a new project.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"color":{"type":"string"},"workspaceId":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"retables.list","description":"List all retables (tables) in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.create","description":"Create a new record in a retable.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"retableId":{"type":"string"},"fields":{"type":"object"}},"required":["projectId","retableId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.get","description":"Get a specific record from a retable.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"retableId":{"type":"string"},"recordId":{"type":"string"}},"required":["projectId","retableId","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.list","description":"List records in a retable.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"retableId":{"type":"string"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["projectId","retableId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.update","description":"Update a record in a retable.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"retableId":{"type":"string"},"recordId":{"type":"string"},"fields":{"type":"object"}},"required":["projectId","retableId","recordId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.delete","description":"Delete a record in a retable.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"retableId":{"type":"string"},"recordId":{"type":"string"}},"required":["projectId","retableId","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.delete","description":"Delete a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workspaces.delete","description":"Delete a workspace.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"}},"required":["workspaceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"retables.delete","description":"Delete a retable (table) in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"retableId":{"type":"string"}},"required":["projectId","retableId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"retell-ai","displayName":"Retell AI","description":"Make phone calls, manage phone numbers, and retrieve call/agent/voice information.","auth":{"kind":"api-key","hint":"Retell AI API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.make","description":"Make an outbound phone call.","parameters":{"type":"object","properties":{"fromNumber":{"type":"string","description":"Phone number to call from in E.164 format."},"toNumber":{"type":"string","description":"Phone number to call in E.164 format."},"agentId":{"type":"string","description":"ID of the agent to use for the call."},"overrideAgentVersion":{"type":"integer","description":"Optional agent version to override."},"metadata":{"type":"object","description":"Optional metadata to attach to the call."},"dynamicVariables":{"type":"object","description":"Optional dynamic variables for the agent."},"customSipHeaders":{"type":"object","description":"Optional custom SIP headers."}},"required":["fromNumber","toNumber","agentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.get","description":"Retrieve details of a phone call.","parameters":{"type":"object","properties":{"callId":{"type":"string","description":"ID of the call to retrieve."}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"phonenumbers.create","description":"Create a new phone number.","parameters":{"type":"object","properties":{"nickname":{"type":"string","description":"Nickname for the phone number."},"inboundAgentVersion":{"type":"integer","description":"Version of inbound agent."},"outboundAgentVersion":{"type":"integer","description":"Version of outbound agent."},"areaCode":{"type":"integer","description":"3-digit US area code."},"countryCode":{"type":"string","description":"Country code for the phone number."},"tollFree":{"type":"boolean","description":"Whether to purchase a toll-free number."},"phoneNumber":{"type":"string","description":"Phone number to purchase in E.164 format."},"inboundWebhookUrl":{"type":"string","description":"Webhook URL for inbound calls."}},"required":["nickname"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"phonenumbers.get","description":"Retrieve details of a phone number.","parameters":{"type":"object","properties":{"phoneNumberId":{"type":"string","description":"ID of the phone number."}},"required":["phoneNumberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"agents.get","description":"Retrieve details of an agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent to retrieve."}},"required":["agentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"voices.get","description":"Retrieve details of a voice.","parameters":{"type":"object","properties":{"voiceId":{"type":"string","description":"ID of the voice to retrieve."}},"required":["voiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"voices.list","description":"List all available voices.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"ringcentral","displayName":"RingCentral","description":"Read RingCentral extensions, call logs, and messages, send SMS, and create webhook subscriptions through the REST v1.0 API.","auth":{"kind":"oauth2","authorizationUrl":"https://platform.ringcentral.com/restapi/oauth/authorize","tokenUrl":"https://platform.ringcentral.com/restapi/oauth/token","scopes":["ReadAccounts","ReadCallLog","ReadMessages","SMS","ReadContacts","SubscriptionWebhook"],"clientIdEnv":"RINGCENTRAL_OAUTH_CLIENT_ID","clientSecretEnv":"RINGCENTRAL_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"extension.get","description":"Get the authenticated user's extension record.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"extensions.list","description":"List extensions on an account. Pass accountId or ~ for the authenticated account.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Internal account id, or ~ for the authenticated account."},"page":{"type":"number","description":"Page number for pagination."},"perPage":{"type":"number","description":"Records per page."},"status":{"type":"string","description":"Filter by extension status (e.g. Enabled, Disabled)."}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"callLog.list","description":"List the authenticated extension's call log. Use view=Detailed for full records.","parameters":{"type":"object","properties":{"dateFrom":{"type":"string","description":"Start of range, ISO-8601 UTC."},"dateTo":{"type":"string","description":"End of range, ISO-8601 UTC."},"view":{"type":"string","description":"Set to 'Detailed' to fetch detailed call records."},"perPage":{"type":"number","description":"Records per page."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.list","description":"List the authenticated extension's message store (SMS, Fax, VoiceMail).","parameters":{"type":"object","properties":{"messageType":{"type":"string","description":"Filter by message type: SMS, Fax, or VoiceMail."},"dateFrom":{"type":"string","description":"Start of range, ISO-8601."},"dateTo":{"type":"string","description":"End of range, ISO-8601."},"perPage":{"type":"number","description":"Records per page (up to 1000)."},"readStatus":{"type":"string","description":"Filter by read status: Read or Unread."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sms.send","description":"Send an SMS from the authenticated extension. from = { phoneNumber }, to = [{ phoneNumber }] (up to 10), text = body.","parameters":{"type":"object","properties":{"from":{"type":"object","description":"Sender: { phoneNumber } — must be a number assigned to the user.","additionalProperties":true},"to":{"type":"array","description":"Recipients: [{ phoneNumber }] — up to 10.","items":{"type":"object","additionalProperties":true}},"text":{"type":"string","description":"SMS message text."}},"required":["from","to","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.create","description":"Create a webhook subscription. eventFilters = array of event URIs, deliveryMode = { transportType: \"WebHook\", address }.","parameters":{"type":"object","properties":{"eventFilters":{"type":"array","description":"Event filter URI strings, e.g. /restapi/v1.0/account/~/extension/~/message-store.","items":{"type":"string"}},"deliveryMode":{"type":"object","description":"Delivery config: { transportType: \"WebHook\", address }.","additionalProperties":true},"expiresIn":{"type":"number","description":"Subscription lifetime in seconds."}},"required":["eventFilters","deliveryMode"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"rippling","displayName":"Rippling","description":"Read Rippling HRIS data (employees, groups, departments, work locations) and update employee records via the Rippling Platform API.","auth":{"kind":"oauth2","authorizationUrl":"https://app.rippling.com/apps/PLATFORM/{appName}/authorize","tokenUrl":"https://api.rippling.com/api/o/token/","scopes":["company:read","employees:read","employees:write","groups:read","departments:read","work_locations:read","teams:read","company_activity:read"],"clientIdEnv":"RIPPLING_OAUTH_CLIENT_ID","clientSecretEnv":"RIPPLING_OAUTH_CLIENT_SECRET","tokenClientAuthMethod":"client_secret_basic","pkce":"unsupported","urlTemplateMetadata":{"appName":{"kind":"path-segment"}}},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"company.get","description":"Read the installing company record (name, primary work location, currency, identifiers).","parameters":{"type":"object","properties":{}},"requiredScopes":["company:read"],"class":"read"},{"name":"me.get","description":"Read the authenticated installer account (used as a health check and to discover the company id).","parameters":{"type":"object","properties":{}},"requiredScopes":["company:read"],"class":"read"},{"name":"employees.list","description":"List employees with optional pagination and status filtering (ACTIVE, TERMINATED, etc.).","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0},"status":{"type":"string","enum":["ACTIVE","TERMINATED","HIRED"]}}},"requiredScopes":["employees:read"],"class":"read"},{"name":"employees.get","description":"Read a single employee record by Rippling employee id.","parameters":{"type":"object","properties":{"employeeId":{"type":"string"}},"required":["employeeId"]},"requiredScopes":["employees:read"],"class":"read"},{"name":"employees.update","description":"Update mutable fields on an employee (work email, personal email, phone, title, department, manager, etc.). Only fields included in the body are changed.","parameters":{"type":"object","properties":{"employeeId":{"type":"string"},"workEmail":{"type":"string"},"personalEmail":{"type":"string"},"phoneNumber":{"type":"string"},"title":{"type":"string"},"department":{"type":"string"},"manager":{"type":"string"},"workLocation":{"type":"string"},"customFields":{"type":"object"}},"required":["employeeId"]},"requiredScopes":["employees:write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"groups.list","description":"List company groups (used by Rippling to model role/permission sets and provisioning targets).","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["groups:read"],"class":"read"},{"name":"groups.get","description":"Read a single group by id, including its current member set.","parameters":{"type":"object","properties":{"groupId":{"type":"string"}},"required":["groupId"]},"requiredScopes":["groups:read"],"class":"read"},{"name":"departments.list","description":"List the company departments (parent of employee.department references).","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["departments:read"],"class":"read"},{"name":"departments.get","description":"Read a single department by id.","parameters":{"type":"object","properties":{"departmentId":{"type":"string"}},"required":["departmentId"]},"requiredScopes":["departments:read"],"class":"read"},{"name":"work_locations.list","description":"List the company work locations (used for employee.workLocation references).","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["work_locations:read"],"class":"read"},{"name":"work_locations.get","description":"Read a single work location by id.","parameters":{"type":"object","properties":{"workLocationId":{"type":"string"}},"required":["workLocationId"]},"requiredScopes":["work_locations:read"],"class":"read"},{"name":"teams.list","description":"List the company teams (reporting/working groups distinct from departments).","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["teams:read"],"class":"read"},{"name":"company_activity.list","description":"List company activity events (hires, terminations, role changes, etc.) optionally bounded by start/end timestamps.","parameters":{"type":"object","properties":{"startDate":{"type":"string","description":"ISO-8601 timestamp lower bound."},"endDate":{"type":"string","description":"ISO-8601 timestamp upper bound."},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["company_activity:read"],"class":"read"}]},{"kind":"robolly","displayName":"Robolly","description":"Generate personalized images, videos, and PDFs using Robolly templates.","auth":{"kind":"api-key","hint":"Robolly API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"images.generate","description":"Generate a personalized image from a template.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"The template ID to generate from."},"format":{"type":"string","description":"The output format (e.g., png, jpg, webp)."},"fields":{"type":"object","description":"Template field values to personalize the image."},"modifications":{"type":"object","description":"Additional modifications to apply."}},"required":["templateId","format"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"rss","displayName":"RSS / Atom Feed","description":"Pull entries from any public RSS 2.0 or Atom 1.0 feed. No auth required — the operator pins one feed URL at connect time (`feed.fetch`), and the agent can also resolve ad-hoc feed URLs at request time (`feed.lookup`). The connector parses both formats and emits a normalized entry shape so downstream tools do not have to branch on the feed dialect.","auth":{"kind":"none"},"category":"webhook","defaultConsistencyModel":"cache","capabilities":[{"name":"feed.fetch","class":"read","description":"Fetch and parse the RSS/Atom feed URL pinned in DataSource.metadata.feedUrl. Returns normalized entries newest-first. Forwards the upstream ETag/Last-Modified so downstream conditional reads can avoid re-parsing unchanged feeds.","parameters":{"type":"object","properties":{"limit":{"type":"number","description":"Maximum entries to return, newest first. Defaults to 20, capped at 200."},"since":{"type":"string","description":"ISO-8601 timestamp. When set, entries with `published` (or `updated` for Atom) strictly older than this are dropped."}}}},{"name":"feed.lookup","class":"read","description":"Fetch and parse an arbitrary RSS/Atom feed URL the agent constructs at request time (e.g. search-result feeds, comment streams). Same normalization as `feed.fetch`.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Absolute http(s) URL of the feed to fetch."},"limit":{"type":"number","description":"Maximum entries to return, newest first. Defaults to 20, capped at 200."},"since":{"type":"string","description":"ISO-8601 timestamp. When set, entries with `published` (or `updated` for Atom) strictly older than this are dropped."}},"required":["url"]}}]},{"kind":"runware","displayName":"Runware","description":"Generate images and videos from text prompts or existing images using Runware.AI API.","auth":{"kind":"api-key","hint":"Runware API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"images.generate.from-text","description":"Generate images from a text prompt.","parameters":{"type":"object","properties":{"prompt":{"type":"string","description":"Text description of the image to generate"},"width":{"type":"integer","description":"Width of the generated image"},"height":{"type":"integer","description":"Height of the generated image"},"numImages":{"type":"integer","description":"Number of images to generate"},"seed":{"type":"integer","description":"Seed for reproducibility"}},"required":["prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"images.generate.from-image","description":"Generate images from an existing image.","parameters":{"type":"object","properties":{"imageUrl":{"type":"string","description":"URL of the source image"},"prompt":{"type":"string","description":"Text prompt to guide the generation"},"strength":{"type":"number","description":"Strength of the generation (0-1)"},"numImages":{"type":"integer","description":"Number of images to generate"}},"required":["imageUrl","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"video.generate.from-text","description":"Generate video from a text prompt.","parameters":{"type":"object","properties":{"prompt":{"type":"string","description":"Text description of the video to generate"},"duration":{"type":"integer","description":"Duration of the video in seconds"},"fps":{"type":"integer","description":"Frames per second"}},"required":["prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"image.remove-background","description":"Remove background from an image.","parameters":{"type":"object","properties":{"imageUrl":{"type":"string","description":"URL of the image to process"}},"required":["imageUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"saastic","displayName":"Saastic","description":"Create and manage customers and charges in Saastic, the SaaS management platform.","auth":{"kind":"api-key","hint":"Saastic API key from https://saastic.com/settings/developers"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"customers.create","description":"Create a new customer in Saastic.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Customer email address"},"first_name":{"type":"string","description":"Customer first name"},"last_name":{"type":"string","description":"Customer last name"},"phone":{"type":"string","description":"Customer phone number"},"signed_up_at":{"type":"string","description":"ISO 8601 date when customer signed up"}},"required":["email","first_name","last_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"charges.create","description":"Create a charge for a customer in Saastic.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Customer email address"},"amount":{"type":"number","description":"Amount in the smallest currency unit"},"currency":{"type":"string","description":"ISO 4217 currency code (e.g., USD, EUR)"},"charged_at":{"type":"string","description":"ISO 8601 date when charge occurred"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.list","description":"List all customers.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of results to return"},"offset":{"type":"integer","description":"Number of results to skip"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.get","description":"Retrieve a customer by email.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Customer email address"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.update","description":"Update an existing customer profile.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Customer email address (identifier)"},"first_name":{"type":"string","description":"Customer first name"},"last_name":{"type":"string","description":"Customer last name"},"phone":{"type":"string","description":"Customer phone number"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.delete","description":"Delete a customer by email.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Customer email address (identifier)"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"charges.refund","description":"Refund an existing charge.","parameters":{"type":"object","properties":{"chargeId":{"type":"string","description":"Charge ID to refund"},"amount":{"type":"number","description":"Optional partial refund amount; omit to refund the full charge."}},"required":["chargeId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.cancel","description":"Cancel an active subscription.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string","description":"Subscription ID to cancel"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"sage-intacct","displayName":"Sage Intacct","description":"Read Sage Intacct vendors, customers, bills, invoices, and general-ledger accounts through the REST API.","auth":{"kind":"api-key","hint":"Sage Intacct REST API OAuth access token, stored as a bearer token."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"general-ledger.accounts.list","description":"List general-ledger accounts.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":2000},"offset":{"type":"integer","minimum":0},"filter":{"type":"string"},"fields":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"vendors.list","description":"List accounts-payable vendors.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":2000},"offset":{"type":"integer","minimum":0},"filter":{"type":"string"},"fields":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bills.list","description":"List accounts-payable bills.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":2000},"offset":{"type":"integer","minimum":0},"filter":{"type":"string"},"fields":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.list","description":"List accounts-receivable customers.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":2000},"offset":{"type":"integer","minimum":0},"filter":{"type":"string"},"fields":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"invoices.list","description":"List accounts-receivable invoices.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":2000},"offset":{"type":"integer","minimum":0},"filter":{"type":"string"},"fields":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"saleor","displayName":"Saleor","description":"Query Saleor GraphQL API, retrieve orders, and add order notes.","auth":{"kind":"api-key","hint":"Saleor API token."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"graphql.query","description":"Execute a raw GraphQL query against Saleor API.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"GraphQL query string"},"variables":{"type":"object","description":"GraphQL query variables"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.get","description":"Retrieve a Saleor order by ID.","parameters":{"type":"object","properties":{"orderId":{"type":"string","description":"Order ID"}},"required":["orderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.addNote","description":"Add a note to a Saleor order.","parameters":{"type":"object","properties":{"orderId":{"type":"string","description":"Order ID"},"message":{"type":"string","description":"Note message"}},"required":["orderId","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.cancel","description":"Cancel a Saleor order.","parameters":{"type":"object","properties":{"orderId":{"type":"string","description":"Order ID"}},"required":["orderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.fulfill","description":"Mark an order line as fulfilled by creating a fulfillment for the given quantities.","parameters":{"type":"object","properties":{"orderId":{"type":"string","description":"Order ID"},"lines":{"type":"array","description":"Order lines to fulfill. Each entry is an OrderFulfillLineInput.","items":{"type":"object","properties":{"orderLineId":{"type":"string"},"stocks":{"type":"array","items":{"type":"object","properties":{"quantity":{"type":"number"},"warehouse":{"type":"string"}},"required":["quantity","warehouse"]}}},"required":["orderLineId","stocks"]}},"notifyCustomer":{"type":"boolean","description":"Whether to notify the customer. Defaults to true caller-side."}},"required":["orderId","lines","notifyCustomer"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.refund","description":"Refund a Saleor order by creating an order refund.","parameters":{"type":"object","properties":{"orderId":{"type":"string","description":"Order ID"},"amount":{"type":"number","description":"Refund amount in the order currency."}},"required":["orderId","amount"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.update","description":"Update order metadata or status (billing/shipping address, user email, language).","parameters":{"type":"object","properties":{"orderId":{"type":"string","description":"Order ID"},"input":{"type":"object","description":"OrderUpdateInput fields (e.g. billingAddress, shippingAddress, userEmail, languageCode)."}},"required":["orderId","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"salesforce","displayName":"Salesforce","description":"Query Salesforce records with SOQL and create or update sObjects.","auth":{"kind":"oauth2","authorizationUrl":"https://login.salesforce.com/services/oauth2/authorize","tokenUrl":"https://login.salesforce.com/services/oauth2/token","scopes":["api","refresh_token"],"clientIdEnv":"SALESFORCE_OAUTH_CLIENT_ID","clientSecretEnv":"SALESFORCE_OAUTH_CLIENT_SECRET","tokenMetadata":{"instanceUrl":{"field":"instance_url","required":true}}},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.query","description":"Run a SOQL query.","parameters":{"type":"object","properties":{"q":{"type":"string"}},"required":["q"]},"requiredScopes":["api"],"class":"read"},{"name":"records.get","description":"Read a Salesforce sObject record.","parameters":{"type":"object","properties":{"objectName":{"type":"string"},"recordId":{"type":"string"}},"required":["objectName","recordId"]},"requiredScopes":["api"],"class":"read"},{"name":"records.create","description":"Create a Salesforce sObject record.","parameters":{"type":"object","properties":{"objectName":{"type":"string"},"fields":{"type":"object"}},"required":["objectName","fields"]},"requiredScopes":["api"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Update a Salesforce sObject record.","parameters":{"type":"object","properties":{"objectName":{"type":"string"},"recordId":{"type":"string"},"fields":{"type":"object"}},"required":["objectName","recordId","fields"]},"requiredScopes":["api"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"records.delete","description":"Delete a Salesforce sObject record by id.","parameters":{"type":"object","properties":{"objectName":{"type":"string"},"recordId":{"type":"string"}},"required":["objectName","recordId"]},"requiredScopes":["api"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.upsert","description":"Upsert a Salesforce sObject record using an external id field. The caller passes the external id field name and the external id value; the body is the record fields.","parameters":{"type":"object","properties":{"objectName":{"type":"string"},"externalIdField":{"type":"string","description":"API name of the external-id field (e.g. ExternalId__c)."},"externalId":{"type":"string","description":"External id value used to match an existing record."},"fields":{"type":"object","description":"Record fields to set on insert/update."}},"required":["objectName","externalIdField","externalId","fields"]},"requiredScopes":["api"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.composite","description":"Execute a Salesforce composite request (multiple subrequests in one transaction). The caller passes the full composite envelope `{ allOrNone, compositeRequest: [...] }`.","parameters":{"type":"object","properties":{"allOrNone":{"type":"boolean","description":"Roll back all subrequests on any failure when true."},"compositeRequest":{"type":"array","description":"Ordered list of Salesforce composite subrequests.","items":{"type":"object","additionalProperties":true}}},"required":["compositeRequest"]},"requiredScopes":["api"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.upload","description":"Upload a ContentVersion file. `fields` is the Salesforce ContentVersion record body using PascalCase field names — `Title`, `PathOnClient`, `VersionData` (base64), and optionally `FirstPublishLocationId` to attach the resulting ContentDocument to a record.","parameters":{"type":"object","properties":{"fields":{"type":"object","description":"ContentVersion record fields. Required: Title, PathOnClient, VersionData (base64). Optional: FirstPublishLocationId.","additionalProperties":true}},"required":["fields"]},"requiredScopes":["api"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"saleshandy","displayName":"Saleshandy","description":"Cold email outreach platform: manage prospects, build sequences, add prospects to sequence steps, and control sequence status.","auth":{"kind":"api-key","hint":"Generate an API key in company Settings -> API Settings. Sent as the x-api-key header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"sequences.list","description":"List sequences and their steps.","parameters":{"type":"object","properties":{"sequenceName":{"type":"string","description":"Filter by sequence name."},"page":{"type":"integer","description":"Page number."},"pageSize":{"type":"integer","description":"Results per page."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"prospects.list","description":"List all prospects with pagination and search.","parameters":{"type":"object","properties":{"search":{"type":"string","description":"Search term."},"page":{"type":"integer","description":"Page number."},"pageSize":{"type":"integer","description":"Results per page."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sequence.import_prospects","description":"Import prospects (keyed by field name) into a sequence at a given step.","parameters":{"type":"object","properties":{"prospectList":{"type":"array","description":"Array of prospect objects keyed by field name (e.g. Email, First Name).","items":{"type":"object"}},"stepId":{"type":"integer","description":"Sequence step ID to add prospects to."},"conflictAction":{"type":"string","description":"How to handle duplicates (e.g. skip, update)."},"verifyProspects":{"type":"boolean","description":"Verify emails on import."},"tags":{"type":"array","items":{"type":"string"},"description":"Tags to apply."}},"required":["prospectList","stepId","conflictAction"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sequence.set_status","description":"Activate or pause one or more sequences.","parameters":{"type":"object","properties":{"sequenceIds":{"type":"array","items":{"type":"string"},"description":"Sequence IDs to update."},"status":{"type":"string","description":"Target status (e.g. ACTIVE, PAUSED)."}},"required":["sequenceIds","status"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"salesloft","displayName":"Salesloft","description":"Manage Salesloft people and accounts and enroll people into cadences through the REST API v2.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.salesloft.com/oauth/authorize","tokenUrl":"https://accounts.salesloft.com/oauth/token","scopes":[],"clientIdEnv":"SALESLOFT_OAUTH_CLIENT_ID","clientSecretEnv":"SALESLOFT_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"me.get","description":"Return the authenticated user and team — the cheapest grant-validity probe.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"people.list","description":"List people (contacts). Paginate with page/per_page.","parameters":{"type":"object","properties":{"page":{"type":"number","description":"Page number (1-based)."},"per_page":{"type":"number","description":"Records per page (max 100)."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"people.create","description":"Create a person. Provide email_address, OR phone paired with last_name. first_name/last_name optional otherwise.","parameters":{"type":"object","properties":{"email_address":{"type":"string","description":"Email address; required unless phone+last_name are provided."},"first_name":{"type":"string","description":"Person's first name."},"last_name":{"type":"string","description":"Person's last name; required when phone is provided instead of email_address."},"phone":{"type":"string","description":"Phone number; required (with last_name) when email_address is absent."}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"accounts.create","description":"Create an account (company). name is required; domain must be unique on the team.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Account/company name."},"domain":{"type":"string","description":"Website domain; must be unique on the team."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cadences.list","description":"List cadences. Paginate with page/per_page.","parameters":{"type":"object","properties":{"page":{"type":"number","description":"Page number (1-based)."},"per_page":{"type":"number","description":"Records per page (max 100)."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cadence_memberships.create","description":"Add a person to a cadence. Provide person_id and cadence_id; user_id defaults to the authenticated user.","parameters":{"type":"object","properties":{"person_id":{"type":"number","description":"Id of the person to enroll (must be visible to the authenticated user)."},"cadence_id":{"type":"number","description":"Id of the cadence to enroll the person into."},"user_id":{"type":"number","description":"Owner of the membership; defaults to the authenticated user."}},"required":["person_id","cadence_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"sanity","displayName":"Sanity","description":"Query Sanity datasets with GROQ, fetch documents by ID, and create, patch, or delete documents through the Content Lake HTTP API.","auth":{"kind":"oauth2","authorizationUrl":"https://api.sanity.io/v1/oauth/authorize","tokenUrl":"https://api.sanity.io/v1/oauth/token","scopes":["read","write"],"clientIdEnv":"SANITY_OAUTH_CLIENT_ID","clientSecretEnv":"SANITY_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"documents.query","description":"Run a GROQ query against a Sanity dataset. `params` is a flat record of GROQ parameters; each value is JSON-encoded and sent as a `$<name>` query parameter.","parameters":{"type":"object","properties":{"dataset":{"type":"string","description":"Sanity dataset name, e.g. \"production\"."},"apiVersion":{"type":"string","description":"Sanity API version, dated yyyy-mm-dd with a leading \"v\" (defaults to v2025-02-19).","default":"v2025-02-19"},"query":{"type":"string","description":"GROQ query string."},"params":{"type":"object","description":"GROQ parameter bindings. Each entry becomes a $name=<json> query parameter.","additionalProperties":true}},"required":["dataset","query"]},"requiredScopes":["read"],"class":"read"},{"name":"documents.get","description":"Fetch a single Sanity document by ID from a dataset.","parameters":{"type":"object","properties":{"dataset":{"type":"string","description":"Sanity dataset name, e.g. \"production\"."},"apiVersion":{"type":"string","description":"Sanity API version, dated yyyy-mm-dd with a leading \"v\" (defaults to v2025-02-19).","default":"v2025-02-19"},"documentId":{"type":"string","description":"Sanity document _id."}},"required":["dataset","documentId"]},"requiredScopes":["read"],"class":"read"},{"name":"documents.create","description":"Create a Sanity document. `document` must include `_type` and may include `_id`. The connector wraps it in a single-mutation transaction and threads the invocation idempotency key as `transactionId` so retries collapse.","parameters":{"type":"object","properties":{"dataset":{"type":"string","description":"Sanity dataset name, e.g. \"production\"."},"apiVersion":{"type":"string","description":"Sanity API version, dated yyyy-mm-dd with a leading \"v\" (defaults to v2025-02-19).","default":"v2025-02-19"},"document":{"type":"object","description":"Document body. Must include `_type`; `_id` is optional (auto-assigned otherwise).","additionalProperties":true}},"required":["dataset","document"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.patch","description":"Patch a Sanity document. `patch` is the Sanity patch envelope (e.g. `{ set: { title: \"x\" } }`). `ifRevisionId` must be the document's current `_rev`; mismatched revisions return 409.","parameters":{"type":"object","properties":{"dataset":{"type":"string","description":"Sanity dataset name, e.g. \"production\"."},"apiVersion":{"type":"string","description":"Sanity API version, dated yyyy-mm-dd with a leading \"v\" (defaults to v2025-02-19).","default":"v2025-02-19"},"documentId":{"type":"string"},"patch":{"type":"object","description":"Sanity patch operations (`set`, `setIfMissing`, `unset`, `inc`, `dec`, `insert`, `diffMatchPatch`).","additionalProperties":true},"ifRevisionId":{"type":"string","description":"Current `_rev` of the document, returned from a prior read; mismatched revisions return 409."}},"required":["dataset","documentId","patch"]},"requiredScopes":["write"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"documents.delete","description":"Delete a Sanity document by ID. Wrapped as a single-mutation transaction so retries collapse.","parameters":{"type":"object","properties":{"dataset":{"type":"string","description":"Sanity dataset name, e.g. \"production\"."},"apiVersion":{"type":"string","description":"Sanity API version, dated yyyy-mm-dd with a leading \"v\" (defaults to v2025-02-19).","default":"v2025-02-19"},"documentId":{"type":"string"}},"required":["dataset","documentId"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.createOrReplace","description":"Create a Sanity document, or replace it wholesale if a document with the same `_id` already exists. The caller passes the full document body including `_id` and `_type`.","parameters":{"type":"object","properties":{"dataset":{"type":"string","description":"Sanity dataset name, e.g. \"production\"."},"apiVersion":{"type":"string","description":"Sanity API version, dated yyyy-mm-dd with a leading \"v\" (defaults to v2025-02-19).","default":"v2025-02-19"},"document":{"type":"object","description":"Document body. Must include `_id` and `_type`.","additionalProperties":true}},"required":["dataset","document"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.publish","description":"Publish a Sanity draft document. Issues a `sanity.action.document.publish` action against the dataset; `draftId` is typically `drafts.<publishedId>`.","parameters":{"type":"object","properties":{"dataset":{"type":"string","description":"Sanity dataset name, e.g. \"production\"."},"apiVersion":{"type":"string","description":"Sanity API version, dated yyyy-mm-dd with a leading \"v\" (defaults to v2025-02-19).","default":"v2025-02-19"},"draftId":{"type":"string","description":"Draft document _id, usually `drafts.<publishedId>`."},"publishedId":{"type":"string","description":"Published document _id (without the `drafts.` prefix)."}},"required":["dataset","draftId","publishedId"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.delete-batch","description":"Delete multiple documents in a single Sanity transaction using a GROQ delete-by-query (`*[_id in $ids]`). All deletes commit or roll back together.","parameters":{"type":"object","properties":{"dataset":{"type":"string","description":"Sanity dataset name, e.g. \"production\"."},"apiVersion":{"type":"string","description":"Sanity API version, dated yyyy-mm-dd with a leading \"v\" (defaults to v2025-02-19).","default":"v2025-02-19"},"documentIds":{"type":"array","description":"IDs of the documents to delete in a single transaction.","items":{"type":"string"}}},"required":["dataset","documentIds"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"sardis","displayName":"Sardis","description":"Policy-controlled payments for AI agents.","auth":{"kind":"api-key","hint":"Sardis API key for your agent."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"payment.send","description":"Send a payment with policy validation.","parameters":{"type":"object","properties":{"to":{"type":"string"},"amount":{"type":"number"},"memo":{"type":"string"},"agentId":{"type":"string"},"policyText":{"type":"string"}},"required":["to","amount","agentId","policyText"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"balance.check","description":"Check agent balance.","parameters":{"type":"object","properties":{"agentId":{"type":"string"}},"required":["agentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"policy.check","description":"Check if a payment complies with spending policy.","parameters":{"type":"object","properties":{"agentId":{"type":"string"},"amount":{"type":"number"},"merchant":{"type":"string"}},"required":["agentId","amount","merchant"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"policy.set","description":"Set spending policy for an agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string"},"policyText":{"type":"string"},"limit":{"type":"number"}},"required":["agentId","policyText"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.list","description":"List transactions for an agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string"},"limit":{"type":"integer"}},"required":["agentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transactions.get","description":"Fetch a single transaction by id.","parameters":{"type":"object","properties":{"transactionId":{"type":"string"}},"required":["transactionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"payment.refund","description":"Refund or reverse a previously-sent payment. Pass an optional `reason` inside `args` — when present it is forwarded to Sardis.","parameters":{"type":"object","properties":{"transactionId":{"type":"string","description":"Id of the payment transaction to refund."},"reason":{"type":"string"}},"required":["transactionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"policy.delete","description":"Delete the spending policy associated with an agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string"}},"required":["agentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"balance.update","description":"Adjust the on-chain balance for an agent (e.g. top-up or debit). `amount` is signed — positive credits the balance, negative debits it.","parameters":{"type":"object","properties":{"agentId":{"type":"string"},"amount":{"type":"number"},"reason":{"type":"string"}},"required":["agentId","amount"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"savvycal","displayName":"SavvyCal","description":"Manage SavvyCal scheduling links, bookings, availability, and workflows.","auth":{"kind":"oauth2","authorizationUrl":"https://savvycal.com/oauth/authorize","tokenUrl":"https://savvycal.com/oauth/token","scopes":[],"sendScopeParam":false,"clientIdEnv":"SAVVYCAL_OAUTH_CLIENT_ID","clientSecretEnv":"SAVVYCAL_OAUTH_CLIENT_SECRET"},"category":"calendar","defaultConsistencyModel":"authoritative","capabilities":[{"name":"user.current","description":"Read the authenticated SavvyCal user.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"events.list","description":"List scheduled events with cursor, state, period, date, and attendance filters.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"after":{"type":"string"},"before":{"type":"string"},"state":{"type":"string","enum":["all","confirmed","canceled","awaiting_reschedule","awaiting_checkout","checkout_expired","awaiting_approval","declined","tentative"]},"period":{"type":"string","enum":["past","upcoming","fixed","all"]},"from":{"type":"string"},"until":{"type":"string"},"direction":{"type":"string","enum":["asc","desc"]},"attendance":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"events.get","description":"Read one scheduled event by ID or UUID.","parameters":{"type":"object","properties":{"eventId":{"type":"string"}},"required":["eventId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"events.create","description":"Book an available slot through a scheduling link.","parameters":{"type":"object","properties":{"linkId":{"type":"string"},"display_name":{"type":"string"},"email":{"type":"string"},"start_at":{"type":"string"},"end_at":{"type":"string"},"time_zone":{"type":"string"},"phone_number":{"type":"string"},"fields":{"type":"array","items":{"type":"object"}},"metadata":{"type":"object"}},"required":["linkId","display_name","email","start_at","end_at","time_zone"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.cancel","description":"Cancel an event with an optional reason.","parameters":{"type":"object","properties":{"eventId":{"type":"string"},"cancel_reason":{"type":"string"}},"required":["eventId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"links.list","description":"List scheduling links with cursor and state filters.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"after":{"type":"string"},"before":{"type":"string"},"state":{"type":"string","enum":["active","disabled"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"links.get","description":"Read one scheduling link.","parameters":{"type":"object","properties":{"linkId":{"type":"string"}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"links.slots","description":"Read available slots for a scheduling link over at most 31 days.","parameters":{"type":"object","properties":{"linkId":{"type":"string"},"from":{"type":"string"},"until":{"type":"string"}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workflows.list","description":"List workflows with cursor pagination.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"after":{"type":"string"},"before":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workflows.rules","description":"List rules for one workflow.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"links.create","description":"Create a personal recurring or single-use scheduling link.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"private_name":{"type":"string"},"type":{"type":"string","enum":["recurring","single"]}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"links.update","description":"Update a scheduling link name, description, private name, or type.","parameters":{"type":"object","properties":{"linkId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"private_name":{"type":"string"},"type":{"type":"string","enum":["recurring","single"]}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"links.delete","description":"Delete a scheduling link.","parameters":{"type":"object","properties":{"linkId":{"type":"string"}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"links.duplicate","description":"Create a copy of a scheduling link.","parameters":{"type":"object","properties":{"linkId":{"type":"string"}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"links.toggle","description":"Toggle a scheduling link between active and disabled.","parameters":{"type":"object","properties":{"linkId":{"type":"string"}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"scim","displayName":"SCIM","description":"Provision users, groups, and group memberships against any public SCIM 2.0 service provider.","auth":{"kind":"api-key","hint":"SCIM bearer token. Set baseUrl to the provider SCIM 2.0 root, for example https://tenant.example.com/scim/v2."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.list","description":"List or filter SCIM users with standard pagination and attribute selection.","parameters":{"type":"object","properties":{"filter":{"type":"string"},"startIndex":{"type":"integer","minimum":1},"count":{"type":"integer","minimum":1,"maximum":1000},"attributes":{"type":"string"},"excludedAttributes":{"type":"string"},"sortBy":{"type":"string"},"sortOrder":{"type":"string","enum":["ascending","descending"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.get","description":"Read one SCIM user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"SCIM user resource id."}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.create","description":"Create a SCIM user from a complete provider-compatible resource.","parameters":{"type":"object","properties":{"user":{"type":"object"}},"required":["user"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.replace","description":"Replace a SCIM user resource.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"SCIM user resource id."},"user":{"type":"object"}},"required":["userId","user"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"users.update","description":"Apply SCIM PatchOp operations to a user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"SCIM user resource id."},"operations":{"type":"array","items":{"type":"object"}}},"required":["userId","operations"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"users.deactivate","description":"Deactivate a SCIM user by setting active=false.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"SCIM user resource id."}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"groups.list","description":"List or filter SCIM groups.","parameters":{"type":"object","properties":{"filter":{"type":"string"},"startIndex":{"type":"integer","minimum":1},"count":{"type":"integer","minimum":1,"maximum":1000},"attributes":{"type":"string"},"excludedAttributes":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.get","description":"Read one SCIM group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"SCIM group resource id."}},"required":["groupId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.create","description":"Create a SCIM group from a complete provider-compatible resource.","parameters":{"type":"object","properties":{"group":{"type":"object"}},"required":["group"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"groups.update","description":"Apply SCIM PatchOp operations to a group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"SCIM group resource id."},"operations":{"type":"array","items":{"type":"object"}}},"required":["groupId","operations"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"groups.users.add","description":"Add a user reference to a SCIM group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"SCIM group resource id."},"userId":{"type":"string","description":"SCIM user resource id."}},"required":["groupId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"groups.users.remove","description":"Remove a user reference from a SCIM group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"SCIM group resource id."},"userId":{"type":"string","description":"SCIM user resource id."}},"required":["groupId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true}]},{"kind":"scrapegraphai","displayName":"ScrapeGraphAI","description":"AI-powered web scraping and content extraction.","auth":{"kind":"api-key","hint":"ScrapeGraphAI API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"scraper.smart","description":"Intelligently scrape a website using AI to extract the data you need.","parameters":{"type":"object","properties":{"website_url":{"type":"string","description":"The URL of the website to scrape."},"user_prompt":{"type":"string","description":"Natural language description of what to extract."},"output_schema":{"type":"object","description":"Optional schema to structure the output."}},"required":["website_url","user_prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scraper.local","description":"Scrape content using local processing without external API calls.","parameters":{"type":"object","properties":{"website_html":{"type":"string","description":"The HTML content to process (max 2MB)."},"user_prompt":{"type":"string","description":"Natural language description of what to extract."},"output_schema":{"type":"object","description":"Optional schema to structure the output."}},"required":["website_html","user_prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"markdown.convert","description":"Convert a webpage to Markdown format.","parameters":{"type":"object","properties":{"website_url":{"type":"string","description":"The URL of the website to convert to Markdown."}},"required":["website_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"scrapeless","displayName":"Scrapeless","description":"Scrapeless is an all-in-one and highly scalable web scraping toolkit for enterprises and developers.","auth":{"kind":"api-key","hint":"Scrapeless API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"search.google","description":"Execute a Google search query with advanced parameters.","parameters":{"type":"object","properties":{"q":{"type":"string","description":"Search query (supports inurl:, site:, intitle:, as_dt, as_eq)"},"hl":{"type":"string","description":"Language code for search results (optional)"},"gl":{"type":"string","description":"Country code for search results (optional)"},"limit":{"type":"integer","description":"Maximum number of results (optional)"}},"required":["q"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scrape.universal","description":"Perform universal scraping on any website with optional JavaScript rendering.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"The URL to scrape"},"jsRender":{"type":"boolean","description":"Enable JavaScript rendering (optional)"},"headless":{"type":"boolean","description":"Use headless mode (optional)"},"jsInstructions":{"type":"object","description":"JavaScript execution instructions (optional)"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"crawl.website","description":"Crawl a website and extract data from multiple subpages.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"The URL to crawl"},"limit":{"type":"integer","description":"Maximum number of subpages to crawl"},"block":{"type":"object","description":"Block rules for crawling (optional)"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"trends.google","description":"Fetch Google Trends data for specified time period and regions.","parameters":{"type":"object","properties":{"q":{"type":"string","description":"Trends search query"},"date":{"type":"string","description":"Date range for trends"},"dataType":{"type":"string","description":"Type of trends data (e.g., searches, news, images)"},"tz":{"type":"string","description":"Time zone offset (optional)"},"country":{"type":"string","description":"Country code (optional)"}},"required":["q","date","dataType"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"seamless-ai","displayName":"Seamless.ai","description":"Search and enrich B2B contact and company data, including verified emails, phone numbers, and job-change signals, for go-to-market prospecting.","auth":{"kind":"api-key","hint":"API key from Settings -> API Key (Create New Connection). Sent as the Token header."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.search","description":"Search for contacts by company, location, department, job title, seniority, and technologies. Returns search result ids used for research/enrichment.","parameters":{"type":"object","properties":{"jobTitle":{"type":"array","items":{"type":"string"}},"seniority":{"type":"array","items":{"type":"string"}},"companyDomain":{"type":"array","items":{"type":"string"}},"industry":{"type":"array","items":{"type":"string"}},"limit":{"type":"integer"},"nextToken":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.search","description":"Search for companies by name, domain, location, industry, size, revenue, and technologies. Returns search result ids used for research/enrichment.","parameters":{"type":"object","properties":{"companyName":{"type":"array","items":{"type":"string"}},"companyDomain":{"type":"array","items":{"type":"string"}},"industry":{"type":"array","items":{"type":"string"}},"companySize":{"type":"array","items":{"type":"string"}},"technologies":{"type":"array","items":{"type":"string"}},"limit":{"type":"integer"},"nextToken":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.research","description":"Research (enrich) contacts asynchronously by searchResultIds from a contact search, or by explicit contact identifiers, to reveal full profile, email, and phone.","parameters":{"type":"object","properties":{"searchResultIds":{"type":"array","items":{"type":"string"}},"contacts":{"type":"array","items":{"type":"object"}},"isJobChange":{"type":"boolean"},"skipDeduplicationCheck":{"type":"boolean"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"companies.research","description":"Research (enrich) companies asynchronously by searchResultIds from a company search, or by direct company identifiers.","parameters":{"type":"object","properties":{"searchResultIds":{"type":"array","items":{"type":"string"}},"companies":{"type":"array","items":{"type":"object"}},"skipDeduplicationCheck":{"type":"boolean"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"contacts.research.poll","description":"Poll for the results of a previously submitted contact research (enrichment) request by request id.","parameters":{"type":"object","properties":{"requestIds":{"type":"array","items":{"type":"string"}}},"required":["requestIds"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"seek-table","displayName":"SeekTable","description":"Generate and automate reports from SeekTable.","auth":{"kind":"api-key","hint":"SeekTable API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"csv.upload","description":"Upload a CSV file to SeekTable.","parameters":{"type":"object","properties":{"fileName":{"type":"string"},"fileContent":{"type":"string"},"format":{"type":"string"}},"required":["fileName","fileContent"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"report.share.email","description":"Share a SeekTable report via email.","parameters":{"type":"object","properties":{"reportId":{"type":"string"},"to":{"type":"string"},"subject":{"type":"string"},"message":{"type":"string"},"includeReportHtml":{"type":"boolean"},"attachExport":{"type":"string"},"reportParameters":{"type":"object"}},"required":["reportId","to","subject"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"segment","displayName":"Segment","description":"Manage Segment workspace sources, destinations, tracking plans, and audiences via the Public API (Bearer).","auth":{"kind":"api-key","hint":"Segment Public API personal access token (app.segment.com → Settings → Workspace Settings → Access Management → Tokens)."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"sources.search","description":"List the sources configured in the workspace.","parameters":{"type":"object","properties":{"pagination":{"type":"object","description":"Pagination cursor returned by the previous response.","properties":{"count":{"type":"integer","minimum":1,"maximum":200},"cursor":{"type":"string"}}}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sources.get","description":"Read a single source by id.","parameters":{"type":"object","properties":{"sourceId":{"type":"string"}},"required":["sourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sources.create","description":"Create a new source in the workspace.","parameters":{"type":"object","properties":{"slug":{"type":"string","description":"URL-safe slug used in tracking calls."},"name":{"type":"string"},"enabled":{"type":"boolean"},"metadataId":{"type":"string","description":"Source-type metadata id (e.g. catalog item for \"javascript\", \"python\", \"http-api\")."},"settings":{"type":"object","description":"Source-type-specific settings."}},"required":["slug","metadataId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sources.update","description":"Update an existing source (name, enabled state, settings).","parameters":{"type":"object","properties":{"sourceId":{"type":"string"},"name":{"type":"string"},"enabled":{"type":"boolean"},"settings":{"type":"object"}},"required":["sourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sources.delete","description":"Delete a source from the workspace.","parameters":{"type":"object","properties":{"sourceId":{"type":"string"}},"required":["sourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"destinations.search","description":"List destinations configured across the workspace.","parameters":{"type":"object","properties":{"pagination":{"type":"object","properties":{"count":{"type":"integer","minimum":1,"maximum":200},"cursor":{"type":"string"}}}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"destinations.get","description":"Read a single destination by id.","parameters":{"type":"object","properties":{"destinationId":{"type":"string"}},"required":["destinationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"destinations.create","description":"Create a new destination tied to a source.","parameters":{"type":"object","properties":{"sourceId":{"type":"string"},"metadataId":{"type":"string","description":"Destination-type metadata id from the catalog."},"enabled":{"type":"boolean"},"name":{"type":"string"},"settings":{"type":"object","description":"Destination-type-specific settings (API keys, mappings, etc.)."}},"required":["sourceId","metadataId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"destinations.update","description":"Update an existing destination configuration.","parameters":{"type":"object","properties":{"destinationId":{"type":"string"},"enabled":{"type":"boolean"},"name":{"type":"string"},"settings":{"type":"object"}},"required":["destinationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"destinations.delete","description":"Remove a destination from the workspace.","parameters":{"type":"object","properties":{"destinationId":{"type":"string"}},"required":["destinationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tracking-plans.search","description":"List tracking plans defined in the workspace.","parameters":{"type":"object","properties":{"pagination":{"type":"object","properties":{"count":{"type":"integer","minimum":1,"maximum":200},"cursor":{"type":"string"}}}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tracking-plans.get","description":"Read a single tracking plan by id, including its event rules.","parameters":{"type":"object","properties":{"trackingPlanId":{"type":"string"}},"required":["trackingPlanId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tracking-plans.create","description":"Create a new tracking plan.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["LIVE","TEMPLATE"],"description":"LIVE plans are enforced; TEMPLATE plans are reusable shells."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tracking-plans.update","description":"Update the metadata of an existing tracking plan.","parameters":{"type":"object","properties":{"trackingPlanId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}},"required":["trackingPlanId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tracking-plans.delete","description":"Delete a tracking plan.","parameters":{"type":"object","properties":{"trackingPlanId":{"type":"string"}},"required":["trackingPlanId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"audiences.search","description":"List Engage / Personas audiences within a Unify space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string","description":"Unify (Personas) space id."},"pagination":{"type":"object","properties":{"count":{"type":"integer","minimum":1,"maximum":200},"cursor":{"type":"string"}}}},"required":["spaceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"audiences.get","description":"Read a single audience definition within a Unify space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"audienceId":{"type":"string"}},"required":["spaceId","audienceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"audiences.create","description":"Create a new audience inside a Unify space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"definition":{"type":"object","description":"Audience query expressed in Segment FQL (Filter Query Language).","properties":{"query":{"type":"string"},"type":{"type":"string","enum":["USERS","ACCOUNTS"]}},"required":["query","type"]}},"required":["spaceId","name","definition"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"audiences.update","description":"Update an existing audience definition or metadata within a Unify space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"audienceId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"definition":{"type":"object","description":"Updated audience query expressed in Segment FQL.","properties":{"query":{"type":"string"},"type":{"type":"string","enum":["USERS","ACCOUNTS"]}}}},"required":["spaceId","audienceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"audiences.delete","description":"Delete an audience from a Unify space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"audienceId":{"type":"string"}},"required":["spaceId","audienceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tracking-plans.connect","description":"Connect (attach) a tracking plan to a source so the plan is enforced for that source.","parameters":{"type":"object","properties":{"trackingPlanId":{"type":"string"},"sourceId":{"type":"string"}},"required":["trackingPlanId","sourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"warehouses.create","description":"Create a destination warehouse (e.g. Snowflake, BigQuery, Redshift) wired to the workspace.","parameters":{"type":"object","properties":{"metadataId":{"type":"string","description":"Warehouse-type metadata id from the catalog."},"name":{"type":"string"},"enabled":{"type":"boolean"},"settings":{"type":"object","description":"Warehouse-specific connection settings (credentials, region, schema)."}},"required":["metadataId","settings"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"semrush","displayName":"Semrush","description":"Competitive SEO market intelligence: backlink profile (overview, links, referring domains/IPs, anchors, pages, authority-score trend) and keyword metrics via the Semrush v4 REST API.","auth":{"kind":"api-key","hint":"Semrush API key from Subscription info → API units. Sent as the `Authorization: Apikey <key>` header."},"category":"market-intelligence","defaultConsistencyModel":"cache","capabilities":[{"name":"backlinks.overview","description":"Aggregated backlink metrics for a target: total backlinks, referring domains, authority score, follow/nofollow split, referring IPs.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Target host, subdomain, folder, or page, e.g. semrush.com."},"scope":{"type":"string","description":"Which part of the URL to analyze: ROOT_DOMAIN | SUBDOMAIN | SUBFOLDER | PAGE."},"fields":{"type":"string","description":"Comma-separated subset of response fields (all by default)."}},"required":["url","scope"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"backlinks.summary","description":"Monthly historical trend of authority score, backlinks count, and referring domains. date_from/date_to are YYYY-MM.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Target host/subdomain/folder/page."},"scope":{"type":"string","description":"ROOT_DOMAIN | SUBDOMAIN | SUBFOLDER | PAGE."},"date_from":{"type":"string","description":"Start month, YYYY-MM."},"date_to":{"type":"string","description":"End month, YYYY-MM."},"fields":{"type":"string"},"limit":{"type":"integer"}},"required":["url","scope"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"backlinks.links","description":"Paginated list of individual backlinks: anchor text, source/target URLs, domain & page authority, follow/nofollow, first/last seen.","parameters":{"type":"object","properties":{"url":{"type":"string"},"scope":{"type":"string","description":"ROOT_DOMAIN | SUBDOMAIN | SUBFOLDER | PAGE."},"fields":{"type":"string"},"order_by":{"type":"string","description":"Field to sort by."},"direction":{"type":"string","description":"ASC | DESC."},"limit":{"type":"integer"},"offset":{"type":"integer"},"filter":{"type":"string","description":"Field-operator-value filter expression, e.g. is_follow=1."}},"required":["url","scope"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"backlinks.ref_domains","description":"Referring domains with per-domain backlink counts, domain authority score, country, IP, and follow/new/lost status.","parameters":{"type":"object","properties":{"url":{"type":"string"},"scope":{"type":"string","description":"ROOT_DOMAIN | SUBDOMAIN | SUBFOLDER | PAGE."},"fields":{"type":"string"},"order_by":{"type":"string"},"direction":{"type":"string"},"limit":{"type":"integer"},"offset":{"type":"integer"},"filter":{"type":"string"}},"required":["url","scope"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"backlinks.ref_ips","description":"Referring IP addresses with backlink count, referring-domain count, and country.","parameters":{"type":"object","properties":{"url":{"type":"string"},"scope":{"type":"string","description":"ROOT_DOMAIN | SUBDOMAIN | SUBFOLDER | PAGE."},"fields":{"type":"string"},"order_by":{"type":"string"},"direction":{"type":"string"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["url","scope"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"backlinks.anchors","description":"Backlink anchor texts with per-anchor backlink count, referring domains, and domain/page authority scores.","parameters":{"type":"object","properties":{"url":{"type":"string"},"scope":{"type":"string","description":"ROOT_DOMAIN | SUBDOMAIN | SUBFOLDER | PAGE."},"fields":{"type":"string"},"order_by":{"type":"string"},"direction":{"type":"string"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["url","scope"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"backlinks.pages","description":"Pages on the target domain that receive backlinks, with per-page backlink and referring-domain counts.","parameters":{"type":"object","properties":{"url":{"type":"string"},"scope":{"type":"string","description":"ROOT_DOMAIN | SUBDOMAIN | SUBFOLDER | PAGE."},"fields":{"type":"string"},"order_by":{"type":"string"},"direction":{"type":"string"},"limit":{"type":"integer"},"offset":{"type":"integer"},"filter":{"type":"string"}},"required":["url","scope"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"backlinks.score_profile","description":"Authority Score distribution of a target’s backlink profile — the breakdown of backlink quality scores.","parameters":{"type":"object","properties":{"url":{"type":"string"},"scope":{"type":"string","description":"ROOT_DOMAIN | SUBDOMAIN | SUBFOLDER | PAGE."},"fields":{"type":"string"}},"required":["url","scope"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"backlinks.comparison","description":"Compare the backlink profiles of up to 10 targets side by side. `urls` is comma-separated; scope here supports ROOT_DOMAIN | SUBDOMAIN | PAGE only (no SUBFOLDER).","parameters":{"type":"object","properties":{"urls":{"type":"string","description":"Comma-separated list of up to 10 target URLs."},"scope":{"type":"string","description":"ROOT_DOMAIN | SUBDOMAIN | PAGE."},"fields":{"type":"string"}},"required":["urls","scope"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"keyword.metrics","description":"Keyword metrics for a single keyword (Semrush v4 keyword surface): search volume, CPC, keyword difficulty, competition, trend, SERP features, and search intent.","parameters":{"type":"object","properties":{"keyword":{"type":"string","description":"The keyword phrase to look up."},"country":{"type":"string","description":"Database/country code, e.g. us, uk, de."},"month":{"type":"string","description":"Optional month for the metric snapshot, YYYY-MM."}},"required":["keyword","country"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"sendgrid","displayName":"SendGrid","description":"Send transactional email and manage marketing contacts/lists through the SendGrid v3 API.","auth":{"kind":"api-key","hint":"SendGrid API key with at least Mail Send + Marketing scopes (Settings → API Keys)."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"mail.send","description":"Send a transactional email via /v3/mail/send.","parameters":{"type":"object","properties":{"personalizations":{"type":"array","items":{"type":"object","properties":{"to":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"}},"required":["email"]}},"cc":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"}},"required":["email"]}},"bcc":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"}},"required":["email"]}},"subject":{"type":"string"},"dynamic_template_data":{"type":"object"}},"required":["to"]}},"from":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"}},"required":["email"]},"reply_to":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"}},"required":["email"]},"subject":{"type":"string"},"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"template_id":{"type":"string"},"categories":{"type":"array","items":{"type":"string"}},"send_at":{"type":"integer"}},"required":["personalizations","from"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.search","description":"Search marketing contacts using SGQL.","parameters":{"type":"object","properties":{"query":{"type":"string"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.get","description":"Read a single marketing contact by ID.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.upsert","description":"Add or update marketing contacts (upsert by email).","parameters":{"type":"object","properties":{"list_ids":{"type":"array","items":{"type":"string"}},"contacts":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"custom_fields":{"type":"object"}},"required":["email"]}}},"required":["contacts"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.search","description":"List marketing lists.","parameters":{"type":"object","properties":{"page_size":{"type":"integer","minimum":1,"maximum":1000},"page_token":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.create","description":"Create a marketing list.","parameters":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.delete","description":"Delete one or more marketing contacts by ID.","parameters":{"type":"object","properties":{"ids":{"type":"string","description":"Comma-separated list of contact IDs to delete."},"delete_all_contacts":{"type":"string","description":"Set to \"true\" to delete every contact on the account."}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.delete","description":"Delete a marketing list. Optionally delete the contacts on it.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"delete_contacts":{"type":"boolean"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.addContacts","description":"Add contacts to a marketing list by upserting them with the given list_ids.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"contacts":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"custom_fields":{"type":"object"}},"required":["email"]}}},"required":["listId","contacts"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.removeContacts","description":"Remove contacts from a marketing list (does not delete the contacts).","parameters":{"type":"object","properties":{"listId":{"type":"string"},"contact_ids":{"type":"string","description":"Comma-separated list of contact IDs to remove from the list."}},"required":["listId","contact_ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"suppressions.create","description":"Add one or more email addresses to a suppression group.","parameters":{"type":"object","properties":{"groupId":{"type":"string"},"recipient_emails":{"type":"array","items":{"type":"string"}}},"required":["groupId","recipient_emails"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"sendinblue","displayName":"Sendinblue","description":"Create or update contacts in Sendinblue with attributes, list assignments, and blacklist management.","auth":{"kind":"api-key","hint":"Sendinblue API key (from Account → SMTP & API → API keys)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.createOrUpdate","description":"Create a new contact or update an existing contact.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the contact. Required for creating or updating a contact."},"extId":{"type":"string","description":"External ID to associate with the contact."},"attributes":{"type":"object","description":"Contact attributes as key-value pairs (e.g., firstName, lastName, phone, custom fields)."},"emailBlacklisted":{"type":"boolean","description":"Set to true to blacklist the contact for email communications."},"smsBlacklisted":{"type":"boolean","description":"Set to true to blacklist the contact for SMS communications."},"listIds":{"type":"array","items":{"type":"integer"},"description":"Array of list IDs to add the contact to."},"smtpBlacklistSender":{"type":"array","items":{"type":"string"},"description":"Array of sender email addresses to blacklist for SMTP (transactional email)."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.get","description":"Get a single contact by email address.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the contact to retrieve."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.delete","description":"Delete a contact by email address.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the contact to delete."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.get","description":"Get all lists in the Sendinblue account.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Number of lists to retrieve."},"offset":{"type":"integer","description":"Offset for pagination."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.create","description":"Create a new contact list.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Name of the list to create."},"folderId":{"type":"integer","description":"ID of the parent folder to place the list under."}},"required":["name","folderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.delete","description":"Delete a contact list by ID.","parameters":{"type":"object","properties":{"listId":{"type":"integer","description":"ID of the list to delete."}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.addContacts","description":"Add existing contacts (by email) to a list.","parameters":{"type":"object","properties":{"listId":{"type":"integer"},"emails":{"type":"array","items":{"type":"string"},"description":"Email addresses of contacts to add."}},"required":["listId","emails"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.send","description":"Trigger sending of an email campaign immediately.","parameters":{"type":"object","properties":{"campaignId":{"type":"integer","description":"ID of the campaign to send."}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactional.send","description":"Send a transactional email via the SMTP API.","parameters":{"type":"object","properties":{"sender":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"}},"required":["email"]},"to":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"}},"required":["email"]}},"subject":{"type":"string"},"htmlContent":{"type":"string"},"textContent":{"type":"string"},"templateId":{"type":"integer"},"params":{"type":"object"},"replyTo":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"}}},"cc":{"type":"array"},"bcc":{"type":"array"},"attachment":{"type":"array"},"headers":{"type":"object"},"tags":{"type":"array","items":{"type":"string"}}},"required":["sender","to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"sendpulse","displayName":"SendPulse","description":"Manage SendPulse subscribers, contacts, and subscriber variables through the REST API.","auth":{"kind":"oauth2","authorizationUrl":"https://login.sendpulse.com/oauth/authorize","tokenUrl":"https://api.sendpulse.com/oauth/access_token","scopes":[],"clientIdEnv":"SENDPULSE_CLIENT_ID","clientSecretEnv":"SENDPULSE_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"subscriber.add","description":"Add a new subscriber to an addressbook.","parameters":{"type":"object","properties":{"addressbookId":{"type":"string"},"email":{"type":"string"},"variables":{"type":"object"},"tags":{"type":"array","items":{"type":"string"}}},"required":["addressbookId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriber.update","description":"Update an existing subscriber in an addressbook.","parameters":{"type":"object","properties":{"addressbookId":{"type":"string"},"email":{"type":"string"},"variables":{"type":"object"},"tags":{"type":"array","items":{"type":"string"}}},"required":["addressbookId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"subscriber.delete","description":"Delete a contact from an addressbook permanently.","parameters":{"type":"object","properties":{"addressbookId":{"type":"string"},"email":{"type":"string"}},"required":["addressbookId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"subscriber.unsubscribe","description":"Unsubscribe one or more email addresses from an addressbook.","parameters":{"type":"object","properties":{"addressbookId":{"type":"string"},"emails":{"type":"array","items":{"type":"string"},"maxItems":100}},"required":["addressbookId","emails"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"subscriber.variable.update","description":"Update a variable for a specific subscriber.","parameters":{"type":"object","properties":{"addressbookId":{"type":"string"},"email":{"type":"string"},"variableName":{"type":"string"},"variableValue":{"type":"string"}},"required":["addressbookId","email","variableName","variableValue"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"addressbooks.list","description":"List all addressbooks on the account.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriber.get","description":"Retrieve a single subscriber from an addressbook by email.","parameters":{"type":"object","properties":{"addressbookId":{"type":"string"},"email":{"type":"string"}},"required":["addressbookId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"addressbooks.create","description":"Create a new addressbook (contact list).","parameters":{"type":"object","properties":{"bookName":{"type":"string","description":"Display name for the new addressbook."}},"required":["bookName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"addressbooks.delete","description":"Delete an addressbook by ID.","parameters":{"type":"object","properties":{"addressbookId":{"type":"string","description":"ID of the addressbook to delete."}},"required":["addressbookId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.create","description":"Create a new email campaign (sent immediately or scheduled via send_date).","parameters":{"type":"object","properties":{"sender_name":{"type":"string"},"sender_email":{"type":"string"},"subject":{"type":"string"},"body":{"type":"string","description":"Base64-encoded HTML body of the campaign."},"list_id":{"type":"string","description":"ID of the addressbook to send to."},"name":{"type":"string"},"template_id":{"type":"string"},"type":{"type":"string","description":"Optional campaign type (e.g., \"regular\")."},"send_date":{"type":"string","description":"Optional scheduled send date in YYYY-MM-DD HH:mm:ss format."},"attachments":{"type":"object"}},"required":["sender_name","sender_email","subject","body","list_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.cancel","description":"Cancel a scheduled campaign before it is sent.","parameters":{"type":"object","properties":{"campaignId":{"type":"string","description":"ID of the scheduled campaign to cancel."}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"senja","displayName":"Senja","description":"Manage testimonials, list and retrieve testimonial data from Senja.","auth":{"kind":"api-key","hint":"Senja REST API key from Automate > REST API."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"testimonials.list","description":"List testimonials with optional filtering and pagination.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of testimonials to return (1–1000)."},"page":{"type":"integer","description":"Page number for pagination. Start at 1."},"sort":{"type":"string","description":"Field used to sort the results."},"order":{"type":"string","description":"Sort direction (asc or desc)."},"lang":{"type":"string","description":"Filter by language using an ISO 639 code."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"testimonials.get","description":"Get a specific testimonial by ID.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"The unique ID of the testimonial."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"testimonials.create","description":"Create a new testimonial.","parameters":{"type":"object","properties":{"type":{"type":"string","description":"Testimonial type (text, video, etc)."},"customer_name":{"type":"string","description":"Full name of the person giving the testimonial."},"title":{"type":"string","description":"A short headline for the testimonial."},"text":{"type":"string","description":"The body of the testimonial."},"rating":{"type":"integer","description":"Star rating from 1 to 5."},"approved":{"type":"boolean","description":"Mark as approved immediately."},"date":{"type":"string","description":"Date the testimonial was given."},"url":{"type":"string","description":"Link to the original testimonial."},"video_url":{"type":"string","description":"URL of the video testimonial."},"customer_email":{"type":"string","description":"Email address of the customer."},"customer_company":{"type":"string","description":"Company or organisation the customer belongs to."},"customer_tagline":{"type":"string","description":"Short role or tagline for the customer."},"customer_username":{"type":"string","description":"Social media handle or username."},"customer_url":{"type":"string","description":"Link to the customer profile."},"customer_avatar":{"type":"string","description":"Direct URL to the customer avatar."},"customer_company_logo":{"type":"string","description":"Direct URL to the company logo."},"integration":{"type":"string","description":"The platform where the testimonial originally came from."},"tags":{"type":"object","description":"Tags to attach to this testimonial."},"thumbnail_url":{"type":"string","description":"URL of the thumbnail image."},"form_id":{"type":"string","description":"ID of the Senja form to associate with."}},"required":["type","customer_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"testimonials.update","description":"Edit fields on an existing testimonial. Only provided fields are updated.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"The unique ID of the testimonial to update."},"title":{"type":"string","description":"A short headline for the testimonial."},"text":{"type":"string","description":"The body of the testimonial."},"rating":{"type":"integer","description":"Star rating from 1 to 5."},"approved":{"type":"boolean","description":"Mark as approved."},"customer_name":{"type":"string","description":"Full name of the person giving the testimonial."},"customer_email":{"type":"string","description":"Email address of the customer."},"customer_company":{"type":"string","description":"Company or organisation the customer belongs to."},"customer_tagline":{"type":"string","description":"Short role or tagline for the customer."},"customer_url":{"type":"string","description":"Link to the customer profile."},"customer_avatar":{"type":"string","description":"Direct URL to the customer avatar."},"customer_company_logo":{"type":"string","description":"Direct URL to the company logo."},"tags":{"type":"object","description":"Tags to attach to this testimonial."},"url":{"type":"string","description":"Link to the original testimonial."},"video_url":{"type":"string","description":"URL of the video testimonial."},"thumbnail_url":{"type":"string","description":"URL of the thumbnail image."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"testimonials.delete","description":"Delete a testimonial by ID.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"The unique ID of the testimonial to delete."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.create","description":"Create a tag that can be used to organize testimonials.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Name of the tag."},"color":{"type":"string","description":"Optional color for the tag (hex or named)."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.list","description":"List testimonial collections (widgets) on the workspace.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of collections to return."},"page":{"type":"integer","description":"Page number for pagination. Start at 1."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"sentry","displayName":"Sentry","description":"Triage Sentry issues, inspect events, list projects, and cut releases against a connected Sentry organization.","auth":{"kind":"oauth2","authorizationUrl":"https://sentry.io/oauth/authorize/","tokenUrl":"https://sentry.io/oauth/token/","scopes":["org:read","project:read","project:write","project:releases","team:read","event:read","event:write","event:admin","member:read"],"clientIdEnv":"SENTRY_OAUTH_CLIENT_ID","clientSecretEnv":"SENTRY_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"organizations.list","description":"List Sentry organizations the authenticated identity belongs to.","parameters":{"type":"object","properties":{"cursor":{"type":"string","description":"Pagination cursor returned by a prior call."}}},"requiredScopes":["org:read"],"class":"read"},{"name":"projects.list","description":"List projects inside a Sentry organization.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string","description":"Organization slug, e.g. \"acme\"."},"cursor":{"type":"string"}},"required":["organizationSlug"]},"requiredScopes":["project:read"],"class":"read"},{"name":"projects.get","description":"Read a single project by organization slug and project slug.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"projectSlug":{"type":"string"}},"required":["organizationSlug","projectSlug"]},"requiredScopes":["project:read"],"class":"read"},{"name":"teams.list","description":"List teams inside a Sentry organization.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"cursor":{"type":"string"}},"required":["organizationSlug"]},"requiredScopes":["team:read"],"class":"read"},{"name":"issues.search","description":"Run an organization-wide issue search. Use Sentry search syntax in `query`, e.g. `is:unresolved level:error project:web`.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"query":{"type":"string","description":"Sentry search query string (https://docs.sentry.io/concepts/search/)."},"statsPeriod":{"type":"string","description":"Relative time window, e.g. \"24h\", \"14d\", \"90d\". Mutually exclusive with start/end."},"start":{"type":"string","description":"ISO-8601 start of an absolute window."},"end":{"type":"string","description":"ISO-8601 end of an absolute window."},"environment":{"type":"string"},"project":{"type":"string","description":"Project id; pass multiple as a comma-separated list."},"sort":{"type":"string","enum":["date","new","priority","freq","user"]},"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"}},"required":["organizationSlug"]},"requiredScopes":["event:read"],"class":"read"},{"name":"issues.get","description":"Read a single Sentry issue by numeric issue id.","parameters":{"type":"object","properties":{"issueId":{"type":"string","description":"Numeric issue id (group id), e.g. \"1234567890\"."}},"required":["issueId"]},"requiredScopes":["event:read"],"class":"read"},{"name":"issues.update","description":"Mutate triage state on a Sentry issue: resolve / unresolve / ignore / assign / star / mark seen.","parameters":{"type":"object","properties":{"issueId":{"type":"string"},"fields":{"type":"object","description":"Issue update payload. Supports `status` (\"resolved\" | \"resolvedInNextRelease\" | \"unresolved\" | \"ignored\"), `statusDetails`, `assignedTo` (username, team:slug, or null), `hasSeen`, `isBookmarked`, `isSubscribed`, `isPublic`.","properties":{"status":{"type":"string","enum":["resolved","resolvedInNextRelease","unresolved","ignored"]},"statusDetails":{"type":"object"},"assignedTo":{"type":["string","null"]},"hasSeen":{"type":"boolean"},"isBookmarked":{"type":"boolean"},"isSubscribed":{"type":"boolean"},"isPublic":{"type":"boolean"}}}},"required":["issueId","fields"]},"requiredScopes":["event:write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"issues.delete","description":"Permanently delete a Sentry issue (group). Use with caution.","parameters":{"type":"object","properties":{"issueId":{"type":"string"}},"required":["issueId"]},"requiredScopes":["event:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.events.list","description":"List recent events attached to a Sentry issue (group).","parameters":{"type":"object","properties":{"issueId":{"type":"string"},"environment":{"type":"string"},"cursor":{"type":"string"}},"required":["issueId"]},"requiredScopes":["event:read"],"class":"read"},{"name":"issues.events.latest","description":"Return the latest event for a Sentry issue (group), including stack trace and tags.","parameters":{"type":"object","properties":{"issueId":{"type":"string"}},"required":["issueId"]},"requiredScopes":["event:read"],"class":"read"},{"name":"issues.comments.list","description":"List comments (notes) on a Sentry issue.","parameters":{"type":"object","properties":{"issueId":{"type":"string"},"cursor":{"type":"string"}},"required":["issueId"]},"requiredScopes":["event:read"],"class":"read"},{"name":"issues.comments.create","description":"Post a note (comment) on a Sentry issue.","parameters":{"type":"object","properties":{"issueId":{"type":"string"},"text":{"type":"string","description":"Markdown body of the note."},"mentions":{"type":"array","description":"Optional list of @-mentions: usernames or team:slug entries.","items":{"type":"string"}}},"required":["issueId","text"]},"requiredScopes":["event:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.get","description":"Read a single event by project and event id, including full stack trace, tags, and context.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"projectSlug":{"type":"string"},"eventId":{"type":"string","description":"32-char Sentry event id (hex)."}},"required":["organizationSlug","projectSlug","eventId"]},"requiredScopes":["event:read"],"class":"read"},{"name":"releases.list","description":"List releases for a Sentry organization.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"query":{"type":"string","description":"Filter by release version substring."},"project":{"type":"string","description":"Project id; comma-separated to scope to specific projects."},"cursor":{"type":"string"}},"required":["organizationSlug"]},"requiredScopes":["project:releases"],"class":"read"},{"name":"releases.get","description":"Read a single release by version.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"version":{"type":"string"}},"required":["organizationSlug","version"]},"requiredScopes":["project:releases"],"class":"read"},{"name":"releases.create","description":"Create a Sentry release. `projects` is required and lists project slugs the release applies to; `refs` and `commits` are optional commit-tracking inputs.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"fields":{"type":"object","properties":{"version":{"type":"string"},"projects":{"type":"array","items":{"type":"string"}},"ref":{"type":"string"},"url":{"type":"string"},"dateReleased":{"type":"string","description":"ISO-8601 timestamp."},"refs":{"type":"array","items":{"type":"object","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"previousCommit":{"type":"string"}},"required":["repository","commit"]}},"commits":{"type":"array","items":{"type":"object"}}},"required":["version","projects"]}},"required":["organizationSlug","fields"]},"requiredScopes":["project:releases"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"releases.update","description":"Update fields on a Sentry release (e.g. dateReleased, ref, url).","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"version":{"type":"string"},"fields":{"type":"object","properties":{"ref":{"type":"string"},"url":{"type":"string"},"dateReleased":{"type":"string"},"commits":{"type":"array","items":{"type":"object"}},"refs":{"type":"array","items":{"type":"object"}}}}},"required":["organizationSlug","version","fields"]},"requiredScopes":["project:releases"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"releases.delete","description":"Delete a Sentry release. Fails if the release still has associated events.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"version":{"type":"string"}},"required":["organizationSlug","version"]},"requiredScopes":["project:releases"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.resolve","description":"Resolve a Sentry issue. For conditional resolution (\"inNextRelease\", \"inRelease\", \"inCommit\"), use `issues.update` and pass `statusDetails` explicitly.","parameters":{"type":"object","properties":{"issueId":{"type":"string"}},"required":["issueId"]},"requiredScopes":["event:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.ignore","description":"Ignore a Sentry issue. For duration- or count-based ignore (`ignoreDuration`, `ignoreCount`, `ignoreUserCount`, `ignoreWindow`, `ignoreUserWindow`), use `issues.update` with `statusDetails` instead.","parameters":{"type":"object","properties":{"issueId":{"type":"string"}},"required":["issueId"]},"requiredScopes":["event:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.assign","description":"Assign a Sentry issue to a user or team. `assignedTo` accepts a username for users or `team:<slug>` for teams. To unassign, call `issues.update` with `assignedTo: null`.","parameters":{"type":"object","properties":{"issueId":{"type":"string"},"assignedTo":{"type":"string","description":"Username or \"team:<slug>\". Use issues.update to unassign."}},"required":["issueId","assignedTo"]},"requiredScopes":["event:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"alerts.list","description":"List alert rules (issue alerts) configured on a Sentry project.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"projectSlug":{"type":"string"},"cursor":{"type":"string"}},"required":["organizationSlug","projectSlug"]},"requiredScopes":["project:read"],"class":"read"},{"name":"alerts.create","description":"Create a new issue alert rule on a Sentry project. `fields` must include `name`, `conditions`, `actions`, `actionMatch`, and `frequency` per the Sentry alert rule schema.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"projectSlug":{"type":"string"},"fields":{"type":"object","properties":{"name":{"type":"string"},"conditions":{"type":"array","items":{"type":"object"}},"filters":{"type":"array","items":{"type":"object"}},"actions":{"type":"array","items":{"type":"object"}},"actionMatch":{"type":"string","enum":["all","any","none"]},"filterMatch":{"type":"string","enum":["all","any","none"]},"frequency":{"type":"integer","description":"Cooldown in minutes between alert firings."},"environment":{"type":"string"},"owner":{"type":"string","description":"Owner actor id, e.g. \"user:<id>\" or \"team:<id>\"."}},"required":["name","conditions","actions","actionMatch","frequency"]}},"required":["organizationSlug","projectSlug","fields"]},"requiredScopes":["project:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"releases.deploys.create","description":"Record a deploy of a Sentry release into an environment.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"version":{"type":"string"},"fields":{"type":"object","properties":{"environment":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"dateStarted":{"type":"string"},"dateFinished":{"type":"string"},"projects":{"type":"array","items":{"type":"string"}}},"required":["environment"]}},"required":["organizationSlug","version","fields"]},"requiredScopes":["project:releases"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"serper","displayName":"Serper","description":"Run fast Google searches (web, news, images, places, and scholar) and get structured SERP results as JSON.","auth":{"kind":"api-key","hint":"API key from your serper.dev dashboard. Sent in the X-API-KEY request header."},"category":"market-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"search.web","description":"Run a Google web search and return organic results, knowledge graph, answer box, and related searches.","parameters":{"type":"object","properties":{"q":{"type":"string","description":"The search query."},"gl":{"type":"string","description":"Two-letter country code for geo-targeting, e.g. us."},"hl":{"type":"string","description":"Two-letter language code, e.g. en."},"num":{"type":"integer","description":"Number of results to return."},"page":{"type":"integer","description":"Results page number."}},"required":["q"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.news","description":"Run a Google News search and return structured news results.","parameters":{"type":"object","properties":{"q":{"type":"string","description":"The news search query."},"gl":{"type":"string","description":"Two-letter country code."},"hl":{"type":"string","description":"Two-letter language code."}},"required":["q"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.places","description":"Run a Google Maps/Places search and return structured place results.","parameters":{"type":"object","properties":{"q":{"type":"string","description":"The places search query."},"gl":{"type":"string","description":"Two-letter country code."}},"required":["q"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.scholar","description":"Run a Google Scholar search and return structured academic results.","parameters":{"type":"object","properties":{"q":{"type":"string","description":"The scholar search query."}},"required":["q"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.images","description":"Run a Google Images search and return structured image results.","parameters":{"type":"object","properties":{"q":{"type":"string","description":"The image search query."},"gl":{"type":"string","description":"Two-letter country code."}},"required":["q"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"serpstat","displayName":"Serpstat","description":"Search keyword analysis and SEO research with Serpstat API.","auth":{"kind":"api-key","hint":"Serpstat API key."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"keywords.get","description":"Get keyword research data and analytics.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query to find keywords for"},"se":{"type":"string","description":"Search engine (g_us, g_au, g_uk, g_de, etc.)"},"minusKeywords":{"type":"object","description":"Keywords to exclude from results"},"withIntents":{"type":"boolean","description":"Include keyword intent data"},"sortField":{"type":"string","description":"Field to sort results by"},"sortOrder":{"type":"string","enum":["asc","desc"],"description":"Sort direction"},"size":{"type":"integer","description":"Number of results (max 100)"},"page":{"type":"integer","description":"Page number for pagination"},"filters":{"type":"object","description":"Additional filters"}},"required":["query","se"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"keywords.suggestions","description":"Get keyword suggestions for a search term.","parameters":{"type":"object","properties":{"keyword":{"type":"string","description":"The keyword to get suggestions for"},"se":{"type":"string","description":"Search engine (g_us, g_au, g_uk, etc.)"},"sortField":{"type":"string","description":"Field to sort suggestions by"},"sortOrder":{"type":"string","enum":["asc","desc"],"description":"Sort direction"},"size":{"type":"integer","description":"Number of results"},"page":{"type":"integer","description":"Page number for pagination"}},"required":["keyword","se"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"service-now","displayName":"ServiceNow","description":"Create, update, and query records in ServiceNow. Manage incidents, changes, service requests, and attachments.","auth":{"kind":"api-key","hint":"ServiceNow instance URL, username, and password."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.create","description":"Create a new record in a ServiceNow table.","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Table name (e.g., incident, change_request)"},"fields":{"type":"object","description":"Field names and values for the new record"}},"required":["table","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.get","description":"Retrieve a single record from a ServiceNow table by sys_id.","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Table name"},"sysSysId":{"type":"string","description":"Record sys_id"}},"required":["table","sysSysId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.update","description":"Update a record in a ServiceNow table.","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Table name"},"sysSysId":{"type":"string","description":"Record sys_id"},"fields":{"type":"object","description":"Fields to update"}},"required":["table","sysSysId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"records.find","description":"Find records matching a query in a ServiceNow table.","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Table name"},"query":{"type":"string","description":"Encoded query (e.g., active=true^state=1)"},"limit":{"type":"integer","description":"Maximum records to return"}},"required":["table"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.delete","description":"Delete a record from a ServiceNow table.","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Table name"},"sysSysId":{"type":"string","description":"Record sys_id"}},"required":["table","sysSysId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"records.count","description":"Count records matching a query in a ServiceNow table.","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Table name"},"query":{"type":"string","description":"Encoded query to filter records"}},"required":["table"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"attachments.add","description":"Attach a file to a ServiceNow record.","parameters":{"type":"object","properties":{"recordSysSysId":{"type":"string","description":"Record sys_id to attach to"},"fileName":{"type":"string","description":"Name for the attachment"},"fileBase64":{"type":"string","description":"Base64 encoded file content"}},"required":["recordSysSysId","fileName","fileBase64"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"attachments.find","description":"Find attachments for a ServiceNow record.","parameters":{"type":"object","properties":{"recordSysSysId":{"type":"string","description":"Record sys_id"},"limit":{"type":"integer","description":"Maximum attachments to return"}},"required":["recordSysSysId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"attachments.delete","description":"Delete an attachment from ServiceNow.","parameters":{"type":"object","properties":{"attachmentSysSysId":{"type":"string","description":"Attachment sys_id"}},"required":["attachmentSysSysId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"comments.add","description":"Add a comment to a ServiceNow record.","parameters":{"type":"object","properties":{"recordSysSysId":{"type":"string","description":"Record sys_id"},"comment":{"type":"string","description":"Comment text"},"commentType":{"type":"string","description":"Type: general or worknote"}},"required":["recordSysSysId","comment"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"incidents.resolve","description":"Resolve or close a ServiceNow incident.","parameters":{"type":"object","properties":{"incidentSysSysId":{"type":"string","description":"Incident sys_id"},"resolution":{"type":"string","description":"resolved or closed"},"closeCode":{"type":"string","description":"Close code"},"closeNotes":{"type":"string","description":"Resolution notes"}},"required":["incidentSysSysId","closeCode","closeNotes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"incidents.close","description":"Close (not just resolve) a ServiceNow incident. Sets incident_state to Closed (7) with the supplied close code and notes.","parameters":{"type":"object","properties":{"incidentSysSysId":{"type":"string","description":"Incident sys_id"},"closeCode":{"type":"string","description":"Close code (e.g. \"Solved (Permanently)\")."},"closeNotes":{"type":"string","description":"Closure notes / root cause summary."}},"required":["incidentSysSysId","closeCode","closeNotes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"incidents.assign","description":"Assign a ServiceNow incident to a user and/or assignment group. Pass `assignedTo` (user sys_id) and/or `assignmentGroup` (group sys_id); at least one is required at runtime.","parameters":{"type":"object","properties":{"incidentSysSysId":{"type":"string","description":"Incident sys_id"},"assignedTo":{"type":"string","description":"User sys_id to assign the incident to."},"assignmentGroup":{"type":"string","description":"Assignment group sys_id."}},"required":["incidentSysSysId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"changes.create","description":"Create a change request (change_request table) in ServiceNow.","parameters":{"type":"object","properties":{"fields":{"type":"object","description":"Change request fields. Common values: `short_description`, `description`, `type` (\"standard\"|\"normal\"|\"emergency\"), `risk`, `impact`, `priority`, `assignment_group`."}},"required":["fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.create","description":"Create a task record on a ServiceNow task table. Pass `table` to target a concrete task subtype (e.g. `sc_task`, `incident_task`, `change_task`, or the base `task` table).","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Task table name (e.g. `sc_task`, `incident_task`, `change_task`, `task`)."},"fields":{"type":"object","description":"Task fields. Common values: `short_description`, `description`, `assigned_to`, `assignment_group`, `parent`."}},"required":["table","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"sftp","displayName":"SFTP","description":"List, inspect, download, upload, move, and delete files over host-key-verified SFTP.","auth":{"kind":"api-key","hint":"JSON with host, username, SHA-256 hostFingerprint, and password or privateKey; optional port, passphrase, and rootPath."},"defaultConsistencyModel":"advisory","category":"storage","rateLimit":{"requests":120,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"sftp.list","class":"read","description":"List a directory within the connection root.","parameters":{"type":"object","properties":{"path":{"type":"string","default":"/"},"limit":{"type":"integer","minimum":1,"maximum":1000,"default":1000}},"additionalProperties":false}},{"name":"sftp.stat","class":"read","description":"Read file or directory metadata within the connection root.","parameters":{"type":"object","properties":{"path":{"type":"string","minLength":1}},"required":["path"],"additionalProperties":false}},{"name":"sftp.download","class":"read","description":"Download a file no larger than 10485760 bytes as base64.","parameters":{"type":"object","properties":{"path":{"type":"string","minLength":1}},"required":["path"],"additionalProperties":false}},{"name":"sftp.upload","class":"mutation","description":"Upload a base64 file no larger than 10485760 bytes within the connection root.","parameters":{"type":"object","properties":{"path":{"type":"string","minLength":1},"fileBase64":{"type":"string"},"overwrite":{"type":"boolean","default":false}},"required":["path","fileBase64"],"additionalProperties":false},"cas":"none","externalEffect":true},{"name":"sftp.mkdir","class":"mutation","description":"Create a directory within the connection root.","parameters":{"type":"object","properties":{"path":{"type":"string","minLength":1},"recursive":{"type":"boolean","default":true}},"required":["path"],"additionalProperties":false},"cas":"none","externalEffect":true},{"name":"sftp.rename","class":"mutation","description":"Move or rename a file without overwriting the destination.","parameters":{"type":"object","properties":{"sourcePath":{"type":"string","minLength":1},"destinationPath":{"type":"string","minLength":1}},"required":["sourcePath","destinationPath"],"additionalProperties":false},"cas":"none","externalEffect":true},{"name":"sftp.delete","class":"mutation","description":"Delete a file within the connection root. Repeated deletion is safe.","parameters":{"type":"object","properties":{"path":{"type":"string","minLength":1}},"required":["path"],"additionalProperties":false},"cas":"none","externalEffect":true}]},{"kind":"sharepoint","displayName":"SharePoint","description":"Let your agent discover SharePoint sites, list/search their document libraries, read small file contents, upload files, and create folders. Etag-CAS available on every DriveItem for follow-up patch/delete flows.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["https://graph.microsoft.com/Sites.ReadWrite.All","https://graph.microsoft.com/Files.ReadWrite.All","offline_access"],"clientIdEnv":"MS_OAUTH_CLIENT_ID","clientSecretEnv":"MS_OAUTH_CLIENT_SECRET"},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"search_sites","class":"read","description":"Search SharePoint sites visible to the connected user. Returns id, name, and webUrl per match.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Free-text query (site title / description)."},"top":{"type":"integer","minimum":1,"maximum":50,"default":20}},"required":["query"]}},{"name":"list_drive_items","class":"read","description":"List children of a SharePoint site's default document library, optionally scoped to a subfolder by itemId.","parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id (composite \"host,site-id,web-id\")."},"folderId":{"type":"string","description":"Optional DriveItem id of a folder; omit to list the root."},"top":{"type":"integer","minimum":1,"maximum":200,"default":50}},"required":["siteId"]}},{"name":"search_drive","class":"read","description":"Server-side content + filename search across a site's default document library.","parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"query":{"type":"string","description":"Search string passed to Graph search(q)."},"top":{"type":"integer","minimum":1,"maximum":50,"default":20}},"required":["siteId","query"]}},{"name":"get_item_content","class":"read","description":"Download a small text file from a SharePoint drive (cap 4 MiB). Returns decoded UTF-8 content, or { binary: true, downloadUrl } for binary / oversize files.","parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"itemId":{"type":"string","description":"DriveItem id of the file."}},"required":["siteId","itemId"]}},{"name":"upload_file","class":"mutation","description":"Upload a small file (<= 4 MiB) into a SharePoint document library. Returns the new DriveItem id + etag for downstream CAS.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"parentFolderId":{"type":"string","description":"Parent folder DriveItem id (use 'root' for the drive root)."},"filename":{"type":"string","description":"Target filename, e.g. report.csv."},"content":{"type":"string","description":"UTF-8 file body."},"contentType":{"type":"string","description":"MIME type, defaults to 'text/plain'."}},"required":["siteId","parentFolderId","filename","content"]}},{"name":"create_folder","class":"mutation","description":"Create a folder under a parent DriveItem. Fails (conflict) if a folder of the same name already exists — Graph enforces sibling-name uniqueness server-side, which gives us idempotent retries by (parentFolderId, name).","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"parentFolderId":{"type":"string","description":"Parent folder DriveItem id (use 'root' for the drive root)."},"name":{"type":"string","description":"New folder name."}},"required":["siteId","parentFolderId","name"]}},{"name":"files.delete","class":"mutation","description":"Delete a file or folder DriveItem. Graph returns 204 on success. (siteId, itemId) is the natural idempotency tuple — a re-delete of a missing item surfaces as 404 mapped to a tombstone result.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"itemId":{"type":"string","description":"DriveItem id of the file or folder to delete."}},"required":["siteId","itemId"]}},{"name":"files.move","class":"mutation","description":"Move a file or folder DriveItem to a new parent (and optionally rename it). PATCH on the DriveItem with parentReference + optional name.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"itemId":{"type":"string","description":"DriveItem id of the file or folder to move."},"newParentFolderId":{"type":"string","description":"Destination parent folder DriveItem id (use 'root' for the drive root)."},"newName":{"type":"string","description":"Optional new filename for the moved item."}},"required":["siteId","itemId","newParentFolderId"]}},{"name":"permissions.grant","class":"mutation","description":"Grant a user (by email) access to a DriveItem at the requested role ('read' or 'write'). Uses the Graph invite action so the grant is created or upserted by recipient.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"itemId":{"type":"string","description":"DriveItem id being shared."},"email":{"type":"string","description":"Recipient email address."},"role":{"type":"string","description":"Permission role ('read' or 'write'). Defaults to 'read'."},"sendInvitation":{"type":"boolean","description":"Whether Graph should email the invite. Defaults to false."},"message":{"type":"string","description":"Optional invitation message body."}},"required":["siteId","itemId","email"]}},{"name":"permissions.revoke","class":"mutation","description":"Revoke a specific permission on a DriveItem. Graph returns 204 on success. (siteId, itemId, permissionId) is the natural idempotency tuple.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"itemId":{"type":"string","description":"DriveItem id whose permission is being revoked."},"permissionId":{"type":"string","description":"Permission id from list_permissions / grant response."}},"required":["siteId","itemId","permissionId"]}},{"name":"lists.items.create","class":"mutation","description":"Create a list item in a SharePoint list. Caller provides the field bag (column key → value). Graph rejects duplicates by list-defined unique columns server-side; MutationGuard handles dedup-on-retry by key.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"listId":{"type":"string","description":"SharePoint list id (or list display name resolved by the caller)."},"fields":{"type":"object","description":"Map of column internal-name → value. Must include all required columns the list defines.","additionalProperties":true}},"required":["siteId","listId","fields"]}},{"name":"get_site_info","class":"read","description":"Read the metadata for a SharePoint site by site id (id, name, displayName, webUrl, description).","parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id (composite \"host,site-id,web-id\")."}},"required":["siteId"]}},{"name":"lists.items.find","class":"read","description":"List items in a SharePoint list, optionally filtered with $filter and shaped with $expand (e.g. fields($select=...)).","parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"listId":{"type":"string","description":"SharePoint list id (or list display name resolved by the caller)."},"filter":{"type":"string","description":"Optional OData $filter expression."},"expand":{"type":"string","description":"Optional OData $expand, e.g. fields($select=Title,Status)."},"top":{"type":"integer","minimum":1,"maximum":200,"default":50}},"required":["siteId","listId"]}},{"name":"copy_item","class":"mutation","description":"Copy a file or folder DriveItem. Graph copy is asynchronous — it returns 202 Accepted with a Location monitor URL rather than the new DriveItem. Supply either a cross-drive parentReference (driveId + id) or a same-site target parent id via targetParentId; optionally rename via name.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"itemId":{"type":"string","description":"DriveItem id of the file or folder to copy."},"parentReference":{"type":"object","description":"Cross-drive destination reference (driveId + id). Provide this OR targetParentId.","additionalProperties":true},"targetParentId":{"type":"string","description":"Same-site destination parent folder DriveItem id. Provide this OR parentReference."},"name":{"type":"string","description":"Optional new name for the copied item."}},"required":["siteId","itemId"]}},{"name":"lists.create","class":"mutation","description":"Create a SharePoint list on the site. displayName is required; columns and list (e.g. { template }) are optional.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"displayName":{"type":"string","description":"Display name of the new list."},"columns":{"type":"array","description":"Optional column definitions for the list.","items":{"type":"object","additionalProperties":true}},"list":{"type":"object","description":"Optional list facet, e.g. { template: \"genericList\" }.","additionalProperties":true}},"required":["siteId","displayName"]}},{"name":"lists.items.update","class":"mutation","description":"Patch the fields on an existing list item. Supports etag-CAS via If-Match — pass the item's etag to guard against concurrent writes; a mismatch surfaces as ResourceContention.","cas":"etag-if-match","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"listId":{"type":"string","description":"SharePoint list id."},"itemId":{"type":"string","description":"List item id to update."},"fields":{"type":"object","description":"Map of column internal-name → new value.","additionalProperties":true}},"required":["siteId","listId","itemId","fields"]}},{"name":"lists.items.delete","class":"mutation","description":"Delete a list item by id. Graph returns 204 on success. (siteId, listId, itemId) is the natural idempotency tuple — a re-delete of a missing item surfaces as 404 mapped to a tombstone result.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"listId":{"type":"string","description":"SharePoint list id."},"itemId":{"type":"string","description":"List item id to delete."}},"required":["siteId","listId","itemId"]}},{"name":"pages.publish","class":"mutation","description":"Publish a SharePoint site page by page id.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"pageId":{"type":"string","description":"Site page id to publish."}},"required":["siteId","pageId"]}}]},{"kind":"shippo","displayName":"Shippo","description":"Multi-carrier shipping platform for real-time rates, labels, and tracking.","auth":{"kind":"api-key","hint":"Shippo API key."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"orders.create","description":"Create a new order in Shippo.","parameters":{"type":"object","properties":{"orderId":{"type":"string","description":"Custom order number"},"orderStatus":{"type":"string","description":"Order status (e.g., awaiting_shipment, shipped, cancelled)"},"placedAt":{"type":"string","description":"ISO 8601 timestamp when order was placed"},"totalPrice":{"type":"string","description":"Total price including shipping and tax"},"subtotalPrice":{"type":"string","description":"Price before shipping and tax"},"totalTax":{"type":"string","description":"Total tax amount"},"currency":{"type":"string","description":"Currency code (USD, EUR, etc.)"},"fromName":{"type":"string","description":"Sender name"},"fromCompany":{"type":"string","description":"Sender company"},"fromStreet1":{"type":"string","description":"Sender street address line 1"},"fromCity":{"type":"string","description":"Sender city"},"fromState":{"type":"string","description":"Sender state/province"},"fromZip":{"type":"string","description":"Sender postal code"},"fromCountry":{"type":"string","description":"Sender country code"},"toName":{"type":"string","description":"Recipient name"},"toCompany":{"type":"string","description":"Recipient company"},"toStreet1":{"type":"string","description":"Recipient street address line 1"},"toCity":{"type":"string","description":"Recipient city"},"toState":{"type":"string","description":"Recipient state/province"},"toZip":{"type":"string","description":"Recipient postal code"},"toCountry":{"type":"string","description":"Recipient country code"}},"required":["orderId","orderStatus","placedAt","totalPrice","currency","toName","toCountry"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.find","description":"Find an order by order number or ID.","parameters":{"type":"object","properties":{"orderIdOrNumber":{"type":"string","description":"Order ID or order number"}},"required":["orderIdOrNumber"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"shippinglabels.find","description":"Find a shipping label by transaction ID.","parameters":{"type":"object","properties":{"transactionId":{"type":"string","description":"Transaction ID of the shipping label"}},"required":["transactionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transactions.create","description":"Purchase a shipping label by transacting against a previously quoted rate. Returns transaction object_id, status, tracking_number, tracking_url_provider, and label_url.","parameters":{"type":"object","properties":{"rate":{"type":"string","description":"Rate object_id returned from a previous shipment quote."},"label_file_type":{"type":"string","description":"Output format for the label file (PDF, PNG, PNG_2.3x7.5, ZPLII, etc.). Optional; defaults to the account-level setting."},"async":{"type":"boolean","description":"When true the carrier purchase is queued and the transaction polls to SUCCESS asynchronously. Defaults to false (synchronous).","default":false}},"required":["rate"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tracks.get","description":"Get current tracking status and history for a tracking number on a specific carrier. Returns tracking_status, tracking_history, and eta.","parameters":{"type":"object","properties":{"carrier":{"type":"string","description":"Carrier token (e.g. usps, ups, fedex, dhl_express)."},"tracking_number":{"type":"string","description":"Carrier-issued tracking number."}},"required":["carrier","tracking_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"shopify","displayName":"Shopify","description":"Manage Shopify Admin resources — products, orders, customers, and inventory levels — for a connected store.","auth":{"kind":"oauth2","authorizationUrl":"https://{shop}.myshopify.com/admin/oauth/authorize","tokenUrl":"https://{shop}.myshopify.com/admin/oauth/access_token","scopes":["read_products","write_products","read_orders","write_orders","read_customers","write_customers","read_inventory","write_inventory"],"clientIdEnv":"SHOPIFY_OAUTH_CLIENT_ID","clientSecretEnv":"SHOPIFY_OAUTH_CLIENT_SECRET"},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"products.search","description":"List catalog products with optional title/vendor/status filters and cursor pagination.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"Exact product title match."},"vendor":{"type":"string"},"product_type":{"type":"string"},"status":{"type":"string","enum":["active","archived","draft"]},"collection_id":{"type":"integer"},"ids":{"type":"string","description":"Comma-separated product ids."},"limit":{"type":"integer","minimum":1,"maximum":250},"page_info":{"type":"string","description":"Cursor returned by the previous page Link header."},"fields":{"type":"string","description":"Comma-separated field projection, e.g. id,title,handle."}}},"requiredScopes":["read_products"],"class":"read"},{"name":"products.get","description":"Read a single catalog product by id.","parameters":{"type":"object","properties":{"productId":{"type":"integer"},"fields":{"type":"string","description":"Comma-separated field projection."}},"required":["productId"]},"requiredScopes":["read_products"],"class":"read"},{"name":"products.create","description":"Create a catalog product. Shopify wraps the payload in a top-level \"product\" key.","parameters":{"type":"object","properties":{"product":{"type":"object","description":"Shopify product payload (title, body_html, vendor, product_type, tags, status, variants, images)."}},"required":["product"]},"requiredScopes":["write_products"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.update","description":"Update a catalog product. Only the supplied fields under \"product\" are modified.","parameters":{"type":"object","properties":{"productId":{"type":"integer"},"product":{"type":"object","description":"Partial product payload to merge."}},"required":["productId","product"]},"requiredScopes":["write_products"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"products.delete","description":"Delete a catalog product.","parameters":{"type":"object","properties":{"productId":{"type":"integer"}},"required":["productId"]},"requiredScopes":["write_products"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"orders.search","description":"List orders with optional status / financial_status / fulfillment_status / date filters.","parameters":{"type":"object","properties":{"status":{"type":"string","enum":["open","closed","cancelled","any"]},"financial_status":{"type":"string","enum":["authorized","pending","paid","partially_paid","refunded","voided","partially_refunded","any","unpaid"]},"fulfillment_status":{"type":"string","enum":["shipped","partial","unshipped","any","unfulfilled"]},"created_at_min":{"type":"string","description":"ISO 8601 timestamp."},"created_at_max":{"type":"string","description":"ISO 8601 timestamp."},"updated_at_min":{"type":"string","description":"ISO 8601 timestamp."},"ids":{"type":"string","description":"Comma-separated order ids."},"limit":{"type":"integer","minimum":1,"maximum":250},"page_info":{"type":"string","description":"Cursor returned by the previous page Link header."},"fields":{"type":"string","description":"Comma-separated field projection."}}},"requiredScopes":["read_orders"],"class":"read"},{"name":"orders.get","description":"Read a single order by id.","parameters":{"type":"object","properties":{"orderId":{"type":"integer"},"fields":{"type":"string","description":"Comma-separated field projection."}},"required":["orderId"]},"requiredScopes":["read_orders"],"class":"read"},{"name":"orders.update","description":"Update an existing order (note, tags, email, metafields, etc.).","parameters":{"type":"object","properties":{"orderId":{"type":"integer"},"order":{"type":"object","description":"Partial order payload, e.g. { note: \"...\", tags: \"vip,priority\" }."}},"required":["orderId","order"]},"requiredScopes":["write_orders"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"orders.cancel","description":"Cancel an open order. Optionally restock and refund.","parameters":{"type":"object","properties":{"orderId":{"type":"integer"},"reason":{"type":"string","enum":["customer","fraud","inventory","declined","other"]},"email":{"type":"boolean","description":"Send a cancellation email to the customer."},"refund":{"type":"boolean","description":"Issue a refund for the captured amount."},"restock":{"type":"boolean","description":"Restock the cancelled items."}},"required":["orderId"]},"requiredScopes":["write_orders"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"customers.search","description":"Search customers by query string (Shopify query syntax: email:..., tag:..., last_name:...).","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Shopify customer search query, e.g. \"email:jane@example.com\"."},"limit":{"type":"integer","minimum":1,"maximum":250},"page_info":{"type":"string"},"fields":{"type":"string"}},"required":["query"]},"requiredScopes":["read_customers"],"class":"read"},{"name":"customers.get","description":"Read a single customer by id.","parameters":{"type":"object","properties":{"customerId":{"type":"integer"},"fields":{"type":"string"}},"required":["customerId"]},"requiredScopes":["read_customers"],"class":"read"},{"name":"customers.create","description":"Create a customer. Required: first_name or last_name or email or phone.","parameters":{"type":"object","properties":{"customer":{"type":"object","description":"Shopify customer payload (first_name, last_name, email, phone, tags, addresses, accepts_marketing)."}},"required":["customer"]},"requiredScopes":["write_customers"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.update","description":"Update a customer. Only the supplied fields under \"customer\" are modified.","parameters":{"type":"object","properties":{"customerId":{"type":"integer"},"customer":{"type":"object","description":"Partial customer payload to merge."}},"required":["customerId","customer"]},"requiredScopes":["write_customers"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"inventory_levels.list","description":"List inventory levels for given inventory_item_ids or location_ids.","parameters":{"type":"object","properties":{"inventory_item_ids":{"type":"string","description":"Comma-separated inventory_item ids."},"location_ids":{"type":"string","description":"Comma-separated location ids."},"limit":{"type":"integer","minimum":1,"maximum":250}}},"requiredScopes":["read_inventory"],"class":"read"},{"name":"inventory_levels.set","description":"Set the available quantity at a location to an absolute value.","parameters":{"type":"object","properties":{"location_id":{"type":"integer"},"inventory_item_id":{"type":"integer"},"available":{"type":"integer"},"disconnect_if_necessary":{"type":"boolean","description":"Allow disconnecting other fulfillment services that block the update."}},"required":["location_id","inventory_item_id","available"]},"requiredScopes":["write_inventory"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"inventory_levels.adjust","description":"Adjust the available quantity at a location by a relative delta.","parameters":{"type":"object","properties":{"location_id":{"type":"integer"},"inventory_item_id":{"type":"integer"},"available_adjustment":{"type":"integer","description":"Positive or negative delta applied to current available."}},"required":["location_id","inventory_item_id","available_adjustment"]},"requiredScopes":["write_inventory"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"refunds.create","description":"Issue a refund against an existing order. `refund_line_items` controls which line items are refunded and whether stock is returned; `transactions` issues the gateway refund(s).","parameters":{"type":"object","properties":{"order_id":{"type":"integer","description":"Order to refund."},"refund_line_items":{"type":"array","description":"Line items to refund. Omit to refund only via `transactions`.","items":{"type":"object","properties":{"line_item_id":{"type":"integer"},"quantity":{"type":"integer"},"restock_type":{"type":"string","enum":["no_restock","cancel","return","legacy_restock"]}},"required":["line_item_id","quantity"]}},"transactions":{"type":"array","description":"Refund transactions. `parent_id` is the captured transaction being refunded.","items":{"type":"object","properties":{"parent_id":{"type":"integer"},"amount":{"type":"string","description":"Decimal amount as a string, e.g. \"12.34\"."},"kind":{"type":"string","enum":["refund"],"default":"refund"},"gateway":{"type":"string"}},"required":["parent_id","amount","kind"]}},"notify":{"type":"boolean","description":"Send the customer the refund-notification email."}},"required":["order_id"]},"requiredScopes":["write_orders"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"fulfillments.create","description":"Create a fulfillment that ships one or more fulfillment orders. `line_items_by_fulfillment_order` selects which fulfillment orders (and optionally which line items within them) are shipped; `tracking_info` attaches a carrier tracking record.","parameters":{"type":"object","properties":{"line_items_by_fulfillment_order":{"type":"array","description":"Fulfillment orders to ship. At minimum each entry needs `fulfillment_order_id`; omit `fulfillment_order_line_items` to ship the entire fulfillment order.","items":{"type":"object","properties":{"fulfillment_order_id":{"type":"integer"}},"required":["fulfillment_order_id"]}},"tracking_info":{"type":"object","description":"Carrier tracking record applied to the fulfillment.","properties":{"number":{"type":"string"},"url":{"type":"string"},"company":{"type":"string"}}},"notify_customer":{"type":"boolean","description":"Send the customer the shipping-confirmation email."}},"required":["line_items_by_fulfillment_order"]},"requiredScopes":["write_orders"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"draft_orders.create","description":"Create a draft order. Useful for agent-driven quoting, custom invoices, and assisted-sale flows where the order is staged before the customer commits.","parameters":{"type":"object","properties":{"line_items":{"type":"array","description":"Draft-order line items. `variant_id` identifies the product variant; `quantity` is the number of units.","items":{"type":"object","properties":{"variant_id":{"type":"integer"},"quantity":{"type":"integer"}},"required":["variant_id","quantity"]}},"customer":{"type":"object","description":"Existing customer to attach by id.","properties":{"id":{"type":"integer"}}}},"required":["line_items"]},"requiredScopes":["write_orders"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"short-io","displayName":"Short.io","description":"Create, update, and manage short links with analytics and country-based targeting.","auth":{"kind":"api-key","hint":"Short.io API key."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"links.create","description":"Create a short link.","parameters":{"type":"object","properties":{"originalURL":{"type":"string","description":"The destination URL."},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code."},"title":{"type":"string","description":"Link title."},"cloaking":{"type":"boolean","description":"Enable cloaking."},"password":{"type":"string","description":"Password protection."},"redirectType":{"type":"string","description":"HTTP redirect status code."},"path":{"type":"string","description":"Custom short path."}},"required":["originalURL"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"links.update","description":"Update a short link.","parameters":{"type":"object","properties":{"linkId":{"type":"string","description":"The ID of the short link."},"originalURL":{"type":"string","description":"The destination URL."},"title":{"type":"string","description":"Link title."},"archived":{"type":"boolean","description":"Archive the link."}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"links.delete","description":"Delete a short link.","parameters":{"type":"object","properties":{"linkId":{"type":"string","description":"The ID of the short link."}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"links.get","description":"Get a short link by path.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name."},"path":{"type":"string","description":"Short link path."}},"required":["domain","path"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"links.list","description":"List short links.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Max results (1-150, default 50)."},"pageToken":{"type":"string","description":"Pagination token."},"beforeDate":{"type":"string","description":"Filter by creation date (before)."},"afterDate":{"type":"string","description":"Filter by creation date (after)."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"links.clicks","description":"Get click statistics for a link.","parameters":{"type":"object","properties":{"linkId":{"type":"string","description":"The ID of the short link."},"period":{"type":"string","description":"Time period (e.g., today, last7days, last30days)."},"tz":{"type":"string","description":"Timezone for statistics."}},"required":["linkId","period"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"targeting.create","description":"Create a country targeting rule.","parameters":{"type":"object","properties":{"linkId":{"type":"string","description":"The ID of the short link."},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code."},"originalURL":{"type":"string","description":"Country-specific redirect URL."}},"required":["linkId","country","originalURL"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"domains.list","description":"List custom domains on the Short.io account.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"domains.create","description":"Create a custom domain on the Short.io account.","parameters":{"type":"object","properties":{"hostname":{"type":"string","description":"Domain hostname (e.g., short.example.com)."},"hideReferer":{"type":"boolean","description":"Hide the referer header on redirect."},"httpsLinks":{"type":"boolean","description":"Enforce HTTPS-only redirects."}},"required":["hostname"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"links.import","description":"Bulk-import short links. `links` is an array of {originalURL, …} entries.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Target Short.io domain hostname."},"links":{"type":"array","description":"Array of link objects to import (each requires originalURL).","items":{"type":"object"}}},"required":["domain","links"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"targeting.delete","description":"Delete a country targeting rule by rule id.","parameters":{"type":"object","properties":{"linkId":{"type":"string","description":"The ID of the short link."},"ruleId":{"type":"string","description":"The ID of the country-targeting rule."}},"required":["linkId","ruleId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"sign-now","displayName":"SignNow","description":"Upload documents, send invites for signing, and track document status.","auth":{"kind":"api-key","hint":"SignNow OAuth2 access token."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"documents.upload","description":"Upload a document to SignNow.","parameters":{"type":"object","properties":{"filename":{"type":"string"},"filePath":{"type":"string"}},"required":["filename","filePath"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.get","description":"Retrieve document details and status.","parameters":{"type":"object","properties":{"documentId":{"type":"string"}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"invites.send","description":"Send a signing invite to a recipient for a document.","parameters":{"type":"object","properties":{"documentId":{"type":"string"},"to":{"type":"string"},"signingOrder":{"type":"integer"}},"required":["documentId","to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invites.cancel","description":"Cancel a signing invite.","parameters":{"type":"object","properties":{"documentId":{"type":"string"},"inviteId":{"type":"string"}},"required":["documentId","inviteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"templates.get","description":"List or retrieve document templates.","parameters":{"type":"object","properties":{"templateId":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"templates.createDocumentFromTemplate","description":"Create a document from a template.","parameters":{"type":"object","properties":{"templateId":{"type":"string"},"documentName":{"type":"string"}},"required":["templateId","documentName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.delete","description":"Delete a document by id.","parameters":{"type":"object","properties":{"documentId":{"type":"string"}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invites.resend","description":"Resend a pending signing invite to the recipient.","parameters":{"type":"object","properties":{"documentId":{"type":"string"},"inviteId":{"type":"string"}},"required":["documentId","inviteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.download","description":"Download the (signed) document file. Returns the SignNow file response payload (signed PDF metadata + url).","parameters":{"type":"object","properties":{"documentId":{"type":"string"},"type":{"type":"string","description":"Download variant ('collapsed' for the signed PDF, 'zip' for the package)."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"templates.create","description":"Create a reusable template from an existing document. Returns the new template id.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"Source document id to clone into a template."},"templateName":{"type":"string","description":"Display name for the new template."}},"required":["documentId","templateName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"signrequest","displayName":"Signrequest","description":"Send signature requests and manage signature workflows.","auth":{"kind":"api-key","hint":"Signrequest API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"requests.send","description":"Send a signature request.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"Title of the signature request"},"subject":{"type":"string","description":"Email subject line"},"message":{"type":"string","description":"Email message body"},"signers":{"type":"object","description":"Array of signer objects with email and name"},"files":{"type":"object","description":"Array of file objects to sign"}},"required":["title","signers","files"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"requests.list","description":"List signature requests.","parameters":{"type":"object","properties":{"status":{"type":"string","description":"Filter by status (draft, sent, viewed, signed, cancelled, completed)"},"limit":{"type":"integer","description":"Maximum number of results"},"offset":{"type":"integer","description":"Pagination offset"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"requests.get","description":"Get a signature request by ID.","parameters":{"type":"object","properties":{"requestId":{"type":"string","description":"The signature request ID"}},"required":["requestId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"requests.cancel","description":"Cancel a signature request.","parameters":{"type":"object","properties":{"requestId":{"type":"string","description":"The signature request ID"}},"required":["requestId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"teams.get","description":"Get current team information.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"requests.remind","description":"Send a reminder email to pending signers on a signature request.","parameters":{"type":"object","properties":{"requestId":{"type":"string","description":"The signature request ID"}},"required":["requestId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"requests.delete","description":"Delete a signature request.","parameters":{"type":"object","properties":{"requestId":{"type":"string","description":"The signature request ID"}},"required":["requestId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.upload","description":"Upload a new document to sign. Provide either file_from_url or file_from_content.","parameters":{"type":"object","properties":{"file_from_url":{"type":"string","description":"Public URL to fetch the document from."},"file_from_content":{"type":"string","description":"Base64-encoded document content."},"file_from_content_name":{"type":"string","description":"Filename for base64-uploaded content."},"name":{"type":"string","description":"Display name of the document."},"external_id":{"type":"string","description":"External identifier for the document."},"template":{"type":"string","description":"Template URL to clone from."},"auto_delete_days":{"type":"integer","description":"Delete the document after N days."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"templates.list","description":"List available document templates.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of results"},"offset":{"type":"integer","description":"Pagination offset"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"signwell","displayName":"SignWell","description":"Create and send documents for electronic signature, and list or retrieve documents.","auth":{"kind":"api-key","hint":"API key from Settings -> API (Create API Key). Sent in the X-Api-Key header."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"documents.list","description":"List documents in the account.","parameters":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.get","description":"Retrieve a single document by its id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"account.get","description":"Retrieve the account information associated with the API key.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.create","description":"Create and optionally send a new document for signing. Set draft to true to create without sending.","parameters":{"type":"object","properties":{"files":{"type":"array","items":{"type":"object"}},"recipients":{"type":"array","items":{"type":"object"}},"name":{"type":"string"},"subject":{"type":"string"},"message":{"type":"string"},"draft":{"type":"boolean"},"test_mode":{"type":"boolean"},"embedded_signing":{"type":"boolean"}},"required":["files","recipients"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"similarweb","displayName":"Similarweb","description":"Market intelligence on any website: estimated traffic and engagement, global/country/category rank, traffic sources, geography, similar sites, audience interests, and search keywords via the Similarweb Digital Marketing Intelligence API.","auth":{"kind":"api-key","hint":"Similarweb API key from Account → API Management. Sent as the `api_key` query parameter on every request."},"category":"market-intelligence","defaultConsistencyModel":"cache","capabilities":[{"name":"rank.global","description":"Similarweb Global Rank for a domain (estimated monthly unique visitors and pageviews, desktop + mobile). Lower is more popular.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"start_date":{"type":"string","description":"Inclusive start month, YYYY-MM."},"end_date":{"type":"string","description":"Inclusive end month, YYYY-MM."},"main_domain_only":{"type":"boolean","description":"Exclude subdomains (default false)."}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rank.country","description":"Monthly rank of a domain within a single country.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"country":{"type":"string","description":"Lowercase ISO 3166-1 alpha-2 code, e.g. us."},"start_date":{"type":"string","description":"Inclusive start month, YYYY-MM."},"end_date":{"type":"string","description":"Inclusive end month, YYYY-MM."},"main_domain_only":{"type":"boolean"}},"required":["domain","country"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rank.category","description":"Industry/category rank for a domain relative to its category globally (latest value; no date range).","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"total-traffic.visits","description":"Estimated total visits (desktop + mobile combined) for a domain over a date range.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"country":{"type":"string","description":"Lowercase ISO alpha-2 code or \"world\"."},"granularity":{"type":"string","description":"daily | weekly | monthly."},"start_date":{"type":"string","description":"Inclusive start month, YYYY-MM."},"end_date":{"type":"string","description":"Inclusive end month, YYYY-MM."},"main_domain_only":{"type":"boolean"},"show_verified":{"type":"boolean","description":"Surface shared Google Analytics data when available."}},"required":["domain","country","granularity"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"total-traffic.pages-per-visit","description":"Average pages per visit (desktop + mobile combined).","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"country":{"type":"string","description":"Lowercase ISO alpha-2 code or \"world\"."},"granularity":{"type":"string","description":"daily | weekly | monthly."},"start_date":{"type":"string","description":"YYYY-MM."},"end_date":{"type":"string","description":"YYYY-MM."},"main_domain_only":{"type":"boolean"}},"required":["domain","country","granularity"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"total-traffic.average-visit-duration","description":"Average visit duration in seconds (desktop + mobile combined).","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"country":{"type":"string","description":"Lowercase ISO alpha-2 code or \"world\"."},"granularity":{"type":"string","description":"daily | weekly | monthly."},"start_date":{"type":"string","description":"YYYY-MM."},"end_date":{"type":"string","description":"YYYY-MM."},"main_domain_only":{"type":"boolean"}},"required":["domain","country","granularity"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"total-traffic.bounce-rate","description":"Bounce rate (desktop + mobile combined) over a date range.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"country":{"type":"string","description":"Lowercase ISO alpha-2 code or \"world\"."},"granularity":{"type":"string","description":"daily | weekly | monthly."},"start_date":{"type":"string","description":"YYYY-MM."},"end_date":{"type":"string","description":"YYYY-MM."},"main_domain_only":{"type":"boolean"}},"required":["domain","country","granularity"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"desktop-traffic.visits","description":"Estimated desktop-only visits for a domain. Supports a US state filter when country=us.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"country":{"type":"string","description":"Lowercase ISO alpha-2 code or \"world\"."},"granularity":{"type":"string","description":"daily | weekly | monthly."},"start_date":{"type":"string","description":"YYYY-MM."},"end_date":{"type":"string","description":"YYYY-MM."},"state":{"type":"string","description":"US state filter, valid only when country=us."},"main_domain_only":{"type":"boolean"}},"required":["domain","country","granularity"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"traffic-sources.overview-share","description":"Share of visits by marketing channel (direct, search, social, referrals, mail, display, paid) over time.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"country":{"type":"string","description":"Lowercase ISO alpha-2 code or \"world\"."},"granularity":{"type":"string","description":"daily | weekly | monthly."},"start_date":{"type":"string","description":"YYYY-MM."},"end_date":{"type":"string","description":"YYYY-MM."},"main_domain_only":{"type":"boolean"}},"required":["domain","country","granularity"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"traffic-sources.referrals","description":"Top referring websites sending traffic to a domain: traffic share per referrer and total referral visits.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"country":{"type":"string","description":"Lowercase ISO alpha-2 code or \"world\"."},"start_date":{"type":"string","description":"YYYY-MM."},"end_date":{"type":"string","description":"YYYY-MM."},"main_domain_only":{"type":"boolean"},"limit":{"type":"integer","description":"Max rows (default 100)."},"offset":{"type":"integer"}},"required":["domain","country"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"traffic-sources.social","description":"Leading social networks sending traffic to a domain: traffic share per network and social visits.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"country":{"type":"string","description":"Lowercase ISO alpha-2 code or \"world\"."},"start_date":{"type":"string","description":"YYYY-MM."},"end_date":{"type":"string","description":"YYYY-MM."},"main_domain_only":{"type":"boolean"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["domain","country"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"geo.traffic-by-country","description":"Distribution of a domain’s traffic across countries: per-country traffic share, visits, pages/visit, average duration, bounce rate, and rank.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"start_date":{"type":"string","description":"YYYY-MM."},"end_date":{"type":"string","description":"YYYY-MM."},"main_domain_only":{"type":"boolean"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"audience.similar-sites","description":"Up to 40 websites most similar to a domain, with a similarity score per site. No date or country params.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"limit":{"type":"integer","description":"Max similar sites (max 40)."}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"audience.also-visited","description":"Other websites visited by the same audience (desktop + mobile): affinity score and audience overlap. Useful for competitive/adjacency analysis.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"country":{"type":"string","description":"Lowercase ISO alpha-2 code or \"world\"."},"start_date":{"type":"string","description":"YYYY-MM."},"end_date":{"type":"string","description":"YYYY-MM."},"main_domain_only":{"type":"boolean"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["domain","country","start_date","end_date"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"keywords.website-keywords","description":"Search keywords driving clicks to a domain (Similarweb Search 3.0). Filter by traffic_source (Organic/Paid/All) and web_source (Desktop/MobileWeb/Total). The domain is passed as the `URL` query parameter.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com (sent as the URL query param)."},"country":{"type":"string","description":"Lowercase ISO alpha-2 code or \"world\"."},"start_date":{"type":"string","description":"YYYY-MM (defaults to ~last 28 days if omitted)."},"end_date":{"type":"string","description":"YYYY-MM."},"traffic_source":{"type":"string","description":"Organic | Paid | All."},"web_source":{"type":"string","description":"Desktop | MobileWeb | Total."},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["domain","country"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lead-enrichment","description":"Firmographics plus website traffic and engagement for a domain in one call (Similarweb Lead Enrichment). Up to 12 months of history; set show_verified to surface shared Google Analytics data.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"country":{"type":"string","description":"Lowercase ISO alpha-2 code or \"world\"."},"start_date":{"type":"string","description":"YYYY-MM."},"end_date":{"type":"string","description":"YYYY-MM."},"main_domain_only":{"type":"boolean"},"show_verified":{"type":"boolean"}},"required":["domain","country","start_date","end_date"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"simpliroute","displayName":"SimpliRoute","description":"Manage delivery operations: clients, vehicles, visits, routes, and optimization planning.","auth":{"kind":"api-key","hint":"SimpliRoute API key."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.getMe","description":"Get current account information.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"clients.list","description":"List all clients.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"clients.create","description":"Create one or more clients.","parameters":{"type":"object","properties":{"clients":{"type":"array","items":{"type":"object"}}},"required":["clients"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"clients.bulkDelete","description":"Bulk delete multiple clients.","parameters":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"integer"}}},"required":["ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"clientProperties.create","description":"Create a custom client property.","parameters":{"type":"object","properties":{"label":{"type":"string"},"type":{"type":"string","enum":["str","int","float","bool"]}},"required":["label","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"vehicles.list","description":"List all vehicles.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"vehicles.get","description":"Get a vehicle by ID.","parameters":{"type":"object","properties":{"vehicleId":{"type":"integer"}},"required":["vehicleId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"vehicles.create","description":"Create a vehicle.","parameters":{"type":"object","properties":{"capacity":{"type":"number"},"defaultDriver":{"type":["string","null"]},"skills":{"type":["array","null"],"items":{"type":"integer"}}},"required":["capacity"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"vehicles.delete","description":"Delete a vehicle.","parameters":{"type":"object","properties":{"vehicleId":{"type":"integer"}},"required":["vehicleId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"visits.list","description":"List all visits.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"visits.get","description":"Get a visit by ID.","parameters":{"type":"object","properties":{"visitId":{"type":"integer"}},"required":["visitId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"visits.getDetail","description":"Get detailed visit information.","parameters":{"type":"object","properties":{"visitId":{"type":"integer"}},"required":["visitId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"visits.create","description":"Create one or more visits.","parameters":{"type":"object","properties":{"visits":{"type":"array","items":{"type":"object"}}},"required":["visits"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"visits.update","description":"Update a visit.","parameters":{"type":"object","properties":{"visitId":{"type":"integer"},"fields":{"type":"object"}},"required":["visitId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"visits.updatePartial","description":"Partially update a visit.","parameters":{"type":"object","properties":{"visitId":{"type":"integer"},"fields":{"type":"object"}},"required":["visitId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"visits.delete","description":"Delete a visit.","parameters":{"type":"object","properties":{"visitId":{"type":"integer"}},"required":["visitId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"visits.addItems","description":"Add items to a visit.","parameters":{"type":"object","properties":{"visitId":{"type":"integer"},"items":{"type":"array","items":{"type":"object"}}},"required":["visitId","items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"routes.list","description":"List all routes.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"routes.get","description":"Get a route by ID.","parameters":{"type":"object","properties":{"routeId":{"type":"string"}},"required":["routeId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"routes.create","description":"Create a delivery route.","parameters":{"type":"object","properties":{"name":{"type":"string"},"plannedDate":{"type":"string"},"vehicle":{"type":"integer"},"driver":{"type":"integer"},"plan":{"type":"string"}},"required":["name","plannedDate","vehicle","driver","plan"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"routes.delete","description":"Delete a route.","parameters":{"type":"object","properties":{"routeId":{"type":"string"}},"required":["routeId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"plans.list","description":"List all delivery plans.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"plans.create","description":"Create a delivery plan.","parameters":{"type":"object","properties":{"name":{"type":"string"},"startDate":{"type":"string"},"endDate":{"type":"string"}},"required":["name","startDate","endDate"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"plans.getVehicles","description":"Get vehicles assigned to a plan.","parameters":{"type":"object","properties":{"planId":{"type":"string"}},"required":["planId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.list","description":"List all users.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.get","description":"Get a user by ID.","parameters":{"type":"object","properties":{"userId":{"type":"integer"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.create","description":"Create one or more users.","parameters":{"type":"object","properties":{"users":{"type":"array","items":{"type":"object"}}},"required":["users"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.update","description":"Update a user.","parameters":{"type":"object","properties":{"userId":{"type":"integer"},"fields":{"type":"object"}},"required":["userId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"drivers.list","description":"List all drivers.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"fleets.list","description":"List all fleets.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"skills.list","description":"List all available skills.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tags.list","description":"List all available tags.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"zones.list","description":"List all zones.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"observations.list","description":"List observations.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sellers.list","description":"List all sellers.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"simplybookme","displayName":"SimplyBook.me","description":"Manage bookings, clients, and services in SimplyBook.me.","auth":{"kind":"api-key","hint":"SimplyBook.me company login, user login, and password"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"bookings.create","description":"Create a new booking.","parameters":{"type":"object","properties":{"clientName":{"type":"string"},"startDate":{"type":"string"},"startTime":{"type":"string"},"endDate":{"type":"string"},"endTime":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"comment":{"type":"string"}},"required":["clientName","startDate","startTime","endDate","endTime"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bookings.find","description":"Find bookings by criteria.","parameters":{"type":"object","properties":{"dateFrom":{"type":"string"},"dateTo":{"type":"string"},"code":{"type":"string"},"clientId":{"type":"integer"},"serviceId":{"type":"integer"},"providerId":{"type":"integer"},"status":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bookings.cancel","description":"Cancel an existing booking.","parameters":{"type":"object","properties":{"bookingId":{"type":"integer"}},"required":["bookingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"bookings.addComment","description":"Add a comment to a booking.","parameters":{"type":"object","properties":{"bookingId":{"type":"integer"},"comment":{"type":"string"}},"required":["bookingId","comment"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"clients.create","description":"Create a new client.","parameters":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"zip":{"type":"string"},"countryId":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"clients.find","description":"Find clients by search criteria.","parameters":{"type":"object","properties":{"search":{"type":"string"},"limit":{"type":"integer"},"page":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"clients.delete","description":"Delete a client.","parameters":{"type":"object","properties":{"clientId":{"type":"integer"}},"required":["clientId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"clients.update","description":"Update a client record.","parameters":{"type":"object","properties":{"clientId":{"type":"integer"},"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"zip":{"type":"string"},"countryId":{"type":"string"}},"required":["clientId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"services.list","description":"List bookable services.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"page":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"providers.list","description":"List service providers.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"page":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bookings.confirm","description":"Confirm a tentative booking.","parameters":{"type":"object","properties":{"bookingId":{"type":"integer"}},"required":["bookingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.find","description":"Find invoices by criteria.","parameters":{"type":"object","properties":{"datetimeFrom":{"type":"string"},"datetimeTo":{"type":"string"},"status":{"type":"string"},"limit":{"type":"integer"},"page":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"notes.create","description":"Create a note or block time.","parameters":{"type":"object","properties":{"startDateTime":{"type":"string"},"endDateTime":{"type":"string"},"note":{"type":"string"},"mode":{"type":"string"},"timeBlocked":{"type":"boolean"}},"required":["startDateTime","endDateTime","note"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"skyprep","displayName":"SkyPrep","description":"SkyPrep is a powerful Learning Management System (LMS) designed to help businesses and organizations deliver effective training and educational content to their employees and users.","auth":{"kind":"api-key","hint":"SkyPrep API key from your account settings."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.enroll.into.course","description":"Enroll a user into a course.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"The ID of the user to enroll"},"courseId":{"type":"string","description":"The ID of the course to enroll into"},"expirationDate":{"type":"string","description":"Optional enrollment expiration date"}},"required":["userId","courseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.enroll.into.group","description":"Enroll a user into a user group.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"The ID of the user to enroll"},"groupId":{"type":"string","description":"The ID of the user group to enroll into"},"expirationDate":{"type":"string","description":"Optional enrollment expiration date"}},"required":["userId","groupId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.update","description":"Update user profile information.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"The ID of the user to update"},"firstName":{"type":"string","description":"The first name of the user"},"lastName":{"type":"string","description":"The last name of the user"},"email":{"type":"string","description":"The email address of the user"},"role":{"type":"string","description":"The role of the user"},"title":{"type":"string","description":"The title/position of the user"},"cellPhone":{"type":"string","description":"The cell phone number of the user"},"workPhone":{"type":"string","description":"The work phone number of the user"},"address":{"type":"string","description":"The address of the user"},"cardNo":{"type":"string","description":"The unique user identifier (student #, badge #)"},"emailNotifications":{"type":"boolean","description":"Whether the user receives email notifications"},"smsNotifications":{"type":"boolean","description":"Whether the user receives SMS notifications"},"accessStartDate":{"type":"string","description":"The date when the user can start accessing content"},"accessEndDate":{"type":"string","description":"The date when the user can no longer access content"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"users.unenroll","description":"Unenroll a user from a course.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"The ID of the user to unenroll"},"courseId":{"type":"string","description":"The ID of the course to unenroll from"}},"required":["userId","courseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.create","description":"Create a user.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"The email address of the new user"},"firstName":{"type":"string","description":"The first name of the new user"},"lastName":{"type":"string","description":"The last name of the new user"},"role":{"type":"string","description":"The role of the new user"},"password":{"type":"string","description":"Optional initial password for the user"},"title":{"type":"string","description":"The title/position of the user"},"cellPhone":{"type":"string","description":"The cell phone number of the user"},"workPhone":{"type":"string","description":"The work phone number of the user"},"address":{"type":"string","description":"The address of the user"},"cardNo":{"type":"string","description":"The unique user identifier (student #, badge #)"}},"required":["email","firstName","lastName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.delete","description":"Delete a user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"The ID of the user to delete"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"groups.list","description":"List groups.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of groups to return"},"page":{"type":"integer","description":"Page number for paginated results"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"slack","displayName":"Slack","description":"Post messages from the agent into Slack, look up users by email, and list channels. Advisory surface — Slack posts are informational, not transactional.","auth":{"kind":"oauth2","authorizationUrl":"https://slack.com/oauth/v2/authorize","tokenUrl":"https://slack.com/api/oauth.v2.access","scopes":["chat:write","app_mentions:read","users:read","users:read.email","channels:read","reactions:write","files:read","files:write"],"clientIdEnv":"SLACK_OAUTH_CLIENT_ID","clientSecretEnv":"SLACK_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"advisory","capabilities":[{"name":"post_message","class":"mutation","description":"Post a message from the bot to a channel or user DM. Append-only — no CAS.","cas":"none","externalEffect":true,"requiredScopes":["chat:write"],"parameters":{"type":"object","properties":{"channel":{"type":"string","description":"Channel id (C…) or user id (U…) for DM."},"text":{"type":"string"},"blocks":{"type":"array","description":"Optional Slack Block Kit blocks."}},"required":["channel"]}},{"name":"post_in_thread","class":"mutation","description":"Post a message into an existing thread. Same as post_message but `thread_ts` is required so the message is threaded under the parent message rather than posted top-level.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["chat:write"],"parameters":{"type":"object","properties":{"channel":{"type":"string","description":"Channel id where the parent message lives."},"thread_ts":{"type":"string","description":"Parent message ts (e.g. \"1700000000.000200\")."},"text":{"type":"string"},"blocks":{"type":"array","description":"Optional Slack Block Kit blocks."}},"required":["channel","thread_ts"]}},{"name":"update_message","class":"mutation","description":"Edit a previously-posted message identified by (channel, ts). Provide `text` or `blocks`.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["chat:write"],"parameters":{"type":"object","properties":{"channel":{"type":"string"},"ts":{"type":"string","description":"ts of the message to update."},"text":{"type":"string"},"blocks":{"type":"array","description":"Optional Slack Block Kit blocks."}},"required":["channel","ts"]}},{"name":"delete_message","class":"mutation","description":"Delete a message identified by (channel, ts).","cas":"native-idempotency","externalEffect":true,"requiredScopes":["chat:write"],"parameters":{"type":"object","properties":{"channel":{"type":"string"},"ts":{"type":"string","description":"ts of the message to delete."}},"required":["channel","ts"]}},{"name":"add_reaction","class":"mutation","description":"Add an emoji reaction to a message. `name` is the emoji name without colons (e.g. \"thumbsup\").","cas":"native-idempotency","externalEffect":true,"requiredScopes":["reactions:write"],"parameters":{"type":"object","properties":{"channel":{"type":"string"},"timestamp":{"type":"string","description":"ts of the target message."},"name":{"type":"string","description":"Emoji name without surrounding colons."}},"required":["channel","timestamp","name"]}},{"name":"upload_file","class":"mutation","description":"Upload a file to one or more channels via Slack's v2 two-step external-upload flow (files.getUploadURLExternal → PUT to returned URL → files.completeUploadExternal). `content` is base64-encoded bytes.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["files:write"],"parameters":{"type":"object","properties":{"channels":{"type":"array","items":{"type":"string"},"description":"Channel ids to share the uploaded file into."},"filename":{"type":"string"},"content":{"type":"string","description":"Base64-encoded file bytes."},"title":{"type":"string"},"initial_comment":{"type":"string","description":"Optional message posted alongside the file."}},"required":["channels","filename","content"]}},{"name":"lookup_user","class":"read","description":"Look up a Slack workspace user by email.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]}},{"name":"list_channels","class":"read","description":"List channels visible to the bot. `types` defaults to public_channel,private_channel.","parameters":{"type":"object","properties":{"types":{"type":"string","description":"Comma-separated channel types."},"limit":{"type":"integer","minimum":1,"maximum":1000,"default":200}}}},{"name":"download_file","class":"read","description":"Download a Slack file by id. Returns up to 4 MiB of bytes as base64 so callers never have to handle Slack private URLs or bot tokens.","requiredScopes":["files:read"],"parameters":{"type":"object","properties":{"file_id":{"type":"string","description":"Slack file id (F…).","maxLength":300}},"required":["file_id"]}}]},{"kind":"smartlead","displayName":"SmartLead","description":"Manage cold email campaigns with multi-account rotation, email warmup, and advanced analytics.","auth":{"kind":"api-key","hint":"SmartLead API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"campaigns.create","description":"Create a new cold email campaign.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Campaign name"},"campaign_id":{"type":"number","description":"Campaign ID"},"client_id":{"type":"number","description":"Client ID for agency accounts (optional)"},"track_open":{"type":"boolean","description":"Enable email open tracking"},"track_click":{"type":"boolean","description":"Enable link click tracking"},"send_as_plain_text":{"type":"boolean","description":"Send as plain text for better deliverability"},"enable_ai_esp_matching":{"type":"boolean","description":"Use AI to match leads with email accounts"},"follow_up_percentage":{"type":"number","description":"Percentage of leads to follow up (0-100)"},"unsubscribe_text":{"type":"string","description":"Custom unsubscribe text"}},"required":["name","campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.add","description":"Add leads to a campaign.","parameters":{"type":"object","properties":{"campaign_id":{"type":"number","description":"Campaign ID to add leads to"},"lead_list":{"type":"array","description":"Array of lead objects with email and other fields"},"ignore_global_block_list":{"type":"boolean","description":"Skip global block list validation"},"ignore_unsubscribe_list":{"type":"boolean","description":"Include previously unsubscribed leads"},"ignore_duplicate_leads_in_other_campaign":{"type":"boolean","description":"Allow same lead in multiple campaigns"},"ignore_community_bounce_list":{"type":"boolean","description":"Skip community bounce list check"}},"required":["campaign_id","lead_list"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"campaigns.statistics","description":"Get campaign statistics and performance metrics.","parameters":{"type":"object","properties":{"campaign_id":{"type":"number","description":"Campaign ID"}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.update","description":"Update campaign settings.","parameters":{"type":"object","properties":{"campaign_id":{"type":"number","description":"Campaign ID"},"track_open":{"type":"boolean","description":"Enable email open tracking"},"track_click":{"type":"boolean","description":"Enable link click tracking"},"stop_lead_settings":{"type":"string","description":"When to stop emailing a lead"},"unsubscribe_text":{"type":"string","description":"Custom unsubscribe text"},"enable_ai_esp_matching":{"type":"boolean","description":"Use AI to match leads with email accounts"},"send_as_plain_text":{"type":"boolean","description":"Send as plain text"},"follow_up_percentage":{"type":"number","description":"Follow up percentage (0-100)"}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"campaigns.start","description":"Start (or resume) a campaign.","parameters":{"type":"object","properties":{"campaign_id":{"type":"number","description":"Campaign ID"}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.pause","description":"Pause a campaign.","parameters":{"type":"object","properties":{"campaign_id":{"type":"number","description":"Campaign ID"}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.delete","description":"Delete a campaign.","parameters":{"type":"object","properties":{"campaign_id":{"type":"number","description":"Campaign ID"}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update","description":"Update fields on a lead.","parameters":{"type":"object","properties":{"lead_id":{"type":"number","description":"Lead ID"},"first_name":{"type":"string","description":"Lead first name"},"last_name":{"type":"string","description":"Lead last name"},"email":{"type":"string","description":"Lead email address"},"phone_number":{"type":"string","description":"Lead phone number"},"company_name":{"type":"string","description":"Lead company name"},"website":{"type":"string","description":"Lead website"},"location":{"type":"string","description":"Lead location"},"custom_fields":{"type":"object","description":"Custom field key/value pairs"}},"required":["lead_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.remove","description":"Remove a lead from a campaign.","parameters":{"type":"object","properties":{"campaign_id":{"type":"number","description":"Campaign ID"},"lead_id":{"type":"number","description":"Lead ID"}},"required":["campaign_id","lead_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"smartsheet","displayName":"Smartsheet","description":"Manage Smartsheet sheets and rows: find sheets/rows, add/update rows, attach files.","auth":{"kind":"api-key","hint":"Smartsheet API token."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"sheets.search","description":"Find a sheet by name.","parameters":{"type":"object","properties":{"sheetName":{"type":"string"}},"required":["sheetName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rows.search","description":"Find rows by query in a sheet.","parameters":{"type":"object","properties":{"sheetId":{"type":"string"},"query":{"type":"string"}},"required":["sheetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rows.create","description":"Add a row to a sheet.","parameters":{"type":"object","properties":{"sheetId":{"type":"string"},"cells":{"type":"array"},"position":{"type":"string"}},"required":["sheetId","cells"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rows.update","description":"Update a row in a sheet.","parameters":{"type":"object","properties":{"sheetId":{"type":"string"},"rowId":{"type":"string"},"cells":{"type":"array"}},"required":["sheetId","rowId","cells"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"attachments.create","description":"Attach a file to a row.","parameters":{"type":"object","properties":{"sheetId":{"type":"string"},"rowId":{"type":"string"},"fileUrl":{"type":"string"},"fileName":{"type":"string"}},"required":["sheetId","rowId","fileUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"attachments.search","description":"Find attachments on a row.","parameters":{"type":"object","properties":{"sheetId":{"type":"string"},"rowId":{"type":"string"}},"required":["sheetId","rowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sheets.create","description":"Create a new sheet.","parameters":{"type":"object","properties":{"name":{"type":"string"},"columns":{"type":"array"}},"required":["name","columns"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rows.delete","description":"Delete rows by ID.","parameters":{"type":"object","properties":{"sheetId":{"type":"string"},"ids":{"type":"string","description":"Comma-separated row IDs"}},"required":["sheetId","ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"attachments.delete","description":"Delete an attachment.","parameters":{"type":"object","properties":{"sheetId":{"type":"string"},"attachmentId":{"type":"string"}},"required":["sheetId","attachmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"shares.create","description":"Share a sheet with a user or group.","parameters":{"type":"object","properties":{"sheetId":{"type":"string"},"email":{"type":"string"},"accessLevel":{"type":"string","description":"VIEWER, EDITOR, EDITOR_SHARE, ADMIN, OWNER"}},"required":["sheetId","email","accessLevel"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Add a comment to a row or sheet (via a discussion).","parameters":{"type":"object","properties":{"sheetId":{"type":"string"},"rowId":{"type":"string"},"text":{"type":"string"}},"required":["sheetId","rowId","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"smartsuite","displayName":"SmartSuite","description":"Collaborative work management platform combining databases with spreadsheets.","auth":{"kind":"api-key","hint":"SmartSuite API key and Account ID."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.find","description":"Find records matching search criteria.","parameters":{"type":"object","properties":{"table":{"type":"string"},"searchField":{"type":"string"},"searchValue":{"type":"string"},"limit":{"type":"integer"}},"required":["table","searchField","searchValue"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.get","description":"Get a specific record by ID.","parameters":{"type":"object","properties":{"table":{"type":"string"},"recordId":{"type":"string"}},"required":["table","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.create","description":"Create a new record.","parameters":{"type":"object","properties":{"table":{"type":"string"},"data":{"type":"object"}},"required":["table","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Update an existing record.","parameters":{"type":"object","properties":{"table":{"type":"string"},"recordId":{"type":"string"},"data":{"type":"object"}},"required":["table","recordId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.delete","description":"Delete a record.","parameters":{"type":"object","properties":{"table":{"type":"string"},"recordId":{"type":"string"}},"required":["table","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.upload","description":"Upload a file.","parameters":{"type":"object","properties":{"table":{"type":"string"},"recordId":{"type":"string"},"field":{"type":"string"},"file":{"type":"string"}},"required":["table","recordId","field","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tables.list","description":"List tables in the workspace/solution.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"fields.list","description":"List fields on a table.","parameters":{"type":"object","properties":{"table":{"type":"string"}},"required":["table"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.bulk-create","description":"Bulk-create multiple records in a table.","parameters":{"type":"object","properties":{"table":{"type":"string"},"items":{"type":"array","description":"Array of record objects to create"}},"required":["table","items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Add a comment to a record.","parameters":{"type":"object","properties":{"table":{"type":"string"},"recordId":{"type":"string"},"message":{"type":"string"}},"required":["table","recordId","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"smoove","displayName":"Smoove","description":"Manage email lists and subscribers in Smoove.","auth":{"kind":"api-key","hint":"Smoove API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"lists.get","description":"Retrieve all email lists.","parameters":{"type":"object","properties":{"skip":{"type":"integer","description":"Number of records to skip"},"take":{"type":"integer","description":"Maximum number of records to return"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.add","description":"Add or update a subscriber in a list.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the subscriber"},"firstName":{"type":"string","description":"First name of the subscriber"},"lastName":{"type":"string","description":"Last name of the subscriber"},"phone":{"type":"string","description":"Phone number of the subscriber"},"company":{"type":"string","description":"Company name"},"customFields":{"type":"object","description":"Custom fields data"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.find","description":"Search for a subscriber by email or ID.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address to search"},"id":{"type":"string","description":"Contact ID to search"},"skip":{"type":"integer","description":"Number of records to skip"},"take":{"type":"integer","description":"Maximum number of records to return"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.unsubscribe","description":"Unsubscribe a contact from a list.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Contact ID to unsubscribe"},"reason":{"type":"string","description":"Reason for unsubscribing"}},"required":["id","reason"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.create","description":"Create a new email list.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Name of the list"},"publicName":{"type":"string","description":"Public-facing name of the list"},"publicDescription":{"type":"string","description":"Public description of the list"},"isPublic":{"type":"boolean","description":"Make this list publicly visible"},"allowsUsersToSubscribe":{"type":"boolean","description":"Allow users to subscribe themselves"},"allowsUsersToUnsubscribe":{"type":"boolean","description":"Allow users to unsubscribe themselves"}},"required":["name","isPublic","allowsUsersToSubscribe","allowsUsersToUnsubscribe"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.update","description":"Update subscriber fields.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Contact ID"},"data":{"type":"object","description":"Subscriber fields to update"}},"required":["id","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.delete","description":"Delete a subscriber.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Contact ID to delete"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.delete","description":"Delete a list.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"List ID to delete"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.send","description":"Send or trigger a campaign.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Campaign ID to send"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"smsmode","displayName":"SMS Mode","description":"Send and manage SMS messages through the SMS Mode messaging platform.","auth":{"kind":"api-key","hint":"SMS Mode API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"messages.send","description":"Send an SMS message to a recipient.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Recipient phone number"},"text":{"type":"string","description":"Message content"}},"required":["to","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"snov-io","displayName":"Snov.io","description":"Find and verify B2B email addresses by domain or by name, and enrich profiles from an email address.","auth":{"kind":"api-key","hint":"Exchange your API User ID and Secret (account Settings -> API) for an access token via POST /v1/oauth/access_token, then paste the access token here. Sent as the Authorization: Bearer header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"domain_search.start","description":"Start an asynchronous search for email addresses belonging to a company domain. Returns a task to poll for results.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Company domain to search."}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"email_finder.start","description":"Start finding email addresses for one or more people by first name, last name, and company domain. Returns a task to poll; consumes credits when emails are found.","parameters":{"type":"object","properties":{"rows":{"type":"array","description":"Array of objects each with first_name, last_name, and domain.","items":{"type":"object"}}},"required":["rows"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"email_verification.start","description":"Start verification of up to 10 email addresses. Returns a task to poll for deliverability results. Consumes credits.","parameters":{"type":"object","properties":{"emails":{"type":"array","description":"Array of email addresses to verify (max 10).","items":{"type":"string"}}},"required":["emails"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"profile.get_by_email","description":"Enrich a social/professional profile from an email address. Consumes a credit.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"domain_emails_count.get","description":"Get the count of email addresses available for a domain (free, does not consume credits).","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"snowflake","displayName":"Snowflake","description":"Execute and monitor SQL statements through a connected Snowflake account SQL API.","auth":{"kind":"oauth2","authorizationUrl":"{accountUrl}/oauth/authorize","tokenUrl":"{accountUrl}/oauth/token-request","scopes":["refresh_token"],"clientIdEnv":"SNOWFLAKE_OAUTH_CLIENT_ID","clientSecretEnv":"SNOWFLAKE_OAUTH_CLIENT_SECRET","tokenClientAuthMethod":"client_secret_post","pkce":"supported","urlTemplateMetadata":{"accountUrl":{"kind":"base-url","allowedBaseUrlSuffixes":[".snowflakecomputing.com"]}}},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"queries.run","description":"Execute one SQL statement. Every statement requires approval because Snowflake SQL can mutate account data and configuration.","parameters":{"type":"object","properties":{"statement":{"type":"string","description":"One Snowflake SQL statement."},"timeout":{"type":"integer","minimum":1,"description":"Maximum execution time in seconds."},"database":{"type":"string"},"schema":{"type":"string"},"warehouse":{"type":"string"},"role":{"type":"string"},"bindings":{"type":"object","description":"Snowflake SQL API bind variables keyed by one-based position."},"async":{"type":"boolean","description":"Return a statement handle without waiting for completion."}},"required":["statement"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"queries.runMultiple","description":"Execute a semicolon-delimited SQL string as multiple statements. Snowflake does not support bind variables for this operation.","parameters":{"type":"object","properties":{"statement":{"type":"string","description":"Semicolon-delimited Snowflake SQL statements."},"multiStatementCount":{"type":"string","pattern":"^[1-9][0-9]*$","description":"Number of statements in the SQL string."},"timeout":{"type":"integer","minimum":1},"database":{"type":"string"},"schema":{"type":"string"},"warehouse":{"type":"string"},"role":{"type":"string"},"async":{"type":"boolean"}},"required":["statement","multiStatementCount"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"statements.get","description":"Check a statement and retrieve one result partition.","parameters":{"type":"object","properties":{"statementHandle":{"type":"string"},"partition":{"type":"integer","minimum":0}},"required":["statementHandle"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"statements.cancel","description":"Cancel a running SQL statement by its Snowflake handle.","parameters":{"type":"object","properties":{"statementHandle":{"type":"string"}},"required":["statementHandle"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"socialkit","displayName":"Socialkit","description":"Fetch YouTube video details, transcripts, summaries, and comments.","auth":{"kind":"api-key","hint":"Socialkit API key."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"youtube.details","description":"Get YouTube video details including title, description, duration, and metadata.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"YouTube video URL"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"youtube.transcript","description":"Get the transcript of a YouTube video.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"YouTube video URL"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"youtube.summary","description":"Get an AI-generated summary of a YouTube video.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"YouTube video URL"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"youtube.comments","description":"Fetch comments from a YouTube video with optional filtering and sorting.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"YouTube video URL"},"limit":{"type":"integer","description":"Number of comments to retrieve (max 100, default 10)"},"sortBy":{"type":"string","description":"Sort order: relevance or time"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"square","displayName":"Square","description":"Query customers, payments, and invoices. Create or update Square objects.","auth":{"kind":"oauth2","authorizationUrl":"https://connect.squareup.com/oauth2/authorize","tokenUrl":"https://connect.squareup.com/oauth2/token","scopes":["CUSTOMERS_READ","CUSTOMERS_WRITE","PAYMENTS_READ","PAYMENTS_WRITE","INVOICES_READ","INVOICES_WRITE","ITEMS_WRITE"],"clientIdEnv":"SQUARE_OAUTH_CLIENT_ID","clientSecretEnv":"SQUARE_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"customers.list","description":"List customers.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"cursor":{"type":"string"}},"required":[]},"requiredScopes":["CUSTOMERS_READ"],"class":"read"},{"name":"customers.get","description":"Retrieve a customer by ID.","parameters":{"type":"object","properties":{"customerId":{"type":"string"}},"required":["customerId"]},"requiredScopes":["CUSTOMERS_READ"],"class":"read"},{"name":"customers.create","description":"Create a new customer.","parameters":{"type":"object","properties":{"givenName":{"type":"string"},"familyName":{"type":"string"},"emailAddress":{"type":"string"},"phoneNumber":{"type":"string"}},"required":["givenName"]},"requiredScopes":["CUSTOMERS_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.update","description":"Update a customer.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"givenName":{"type":"string"},"familyName":{"type":"string"},"emailAddress":{"type":"string"}},"required":["customerId"]},"requiredScopes":["CUSTOMERS_WRITE"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"payments.list","description":"List payments.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"cursor":{"type":"string"},"beginTime":{"type":"string"},"endTime":{"type":"string"}},"required":[]},"requiredScopes":["PAYMENTS_READ"],"class":"read"},{"name":"payments.get","description":"Retrieve a payment by ID.","parameters":{"type":"object","properties":{"paymentId":{"type":"string"}},"required":["paymentId"]},"requiredScopes":["PAYMENTS_READ"],"class":"read"},{"name":"invoices.list","description":"List invoices.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"cursor":{"type":"string"}},"required":[]},"requiredScopes":["INVOICES_READ"],"class":"read"},{"name":"invoices.get","description":"Retrieve an invoice by ID.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"}},"required":["invoiceId"]},"requiredScopes":["INVOICES_READ"],"class":"read"},{"name":"invoices.create","description":"Create an invoice.","parameters":{"type":"object","properties":{"invoice":{"type":"object"}},"required":["invoice"]},"requiredScopes":["INVOICES_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.update","description":"Update an invoice.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"},"invoice":{"type":"object"}},"required":["invoiceId","invoice"]},"requiredScopes":["INVOICES_WRITE"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"customers.delete","description":"Delete a customer.","parameters":{"type":"object","properties":{"customerId":{"type":"string"}},"required":["customerId"]},"requiredScopes":["CUSTOMERS_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.delete","description":"Delete or cancel an invoice. Square requires the current invoice version to delete drafts.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"},"version":{"type":"integer"}},"required":["invoiceId"]},"requiredScopes":["INVOICES_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.publish","description":"Publish (send) an invoice.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"},"version":{"type":"integer","description":"Current invoice version (required by Square)."},"idempotency_key":{"type":"string"}},"required":["invoiceId","version"]},"requiredScopes":["INVOICES_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payments.refund","description":"Refund a payment.","parameters":{"type":"object","properties":{"idempotency_key":{"type":"string"},"payment_id":{"type":"string"},"amount_money":{"type":"object","description":"Square money object: { amount: number, currency: string }."},"reason":{"type":"string"}},"required":["idempotency_key","payment_id","amount_money"]},"requiredScopes":["PAYMENTS_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"catalog.upsertItem","description":"Upsert a catalog item or product.","parameters":{"type":"object","properties":{"idempotency_key":{"type":"string"},"object":{"type":"object","description":"Square CatalogObject envelope. Use a negative id (e.g. \"#item\") to create."}},"required":["idempotency_key","object"]},"requiredScopes":["ITEMS_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"stripe","displayName":"Stripe","description":"Manage Stripe customers, invoices, subscriptions, and payments.","auth":{"kind":"api-key","hint":"Stripe Secret API Key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"customers.create","description":"Create a new Stripe customer.","parameters":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"phone":{"type":"string"},"metadata":{"type":"object"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.retrieve","description":"Retrieve a Stripe customer by ID.","parameters":{"type":"object","properties":{"customerId":{"type":"string"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.search","description":"Search Stripe customers.","parameters":{"type":"object","properties":{"query":{"type":"string"},"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.update","description":"Update a Stripe customer.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"phone":{"type":"string"},"metadata":{"type":"object"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"invoices.create","description":"Create a Stripe invoice.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"description":{"type":"string"},"currency":{"type":"string"},"metadata":{"type":"object"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.retrieve","description":"Retrieve a Stripe invoice by ID.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"invoices.find","description":"Find Stripe invoices.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.create","description":"Create a Stripe subscription.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"items":{"type":"object"},"trialPeriodDays":{"type":"integer"},"defaultPaymentMethod":{"type":"string"},"metadata":{"type":"object"}},"required":["customerId","items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.retrieve","description":"Retrieve a Stripe subscription by ID.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.search","description":"Search Stripe subscriptions.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"status":{"type":"string"},"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.cancel","description":"Cancel a Stripe subscription.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string"},"cancelAtPeriodEnd":{"type":"boolean"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"payment-intents.create","description":"Create a Stripe payment intent.","parameters":{"type":"object","properties":{"amount":{"type":"integer"},"currency":{"type":"string"},"customerId":{"type":"string"},"paymentMethod":{"type":"string"},"confirm":{"type":"boolean"},"returnUrl":{"type":"string"},"metadata":{"type":"object"}},"required":["amount","currency"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payment-intents.retrieve","description":"Retrieve a Stripe payment intent by ID.","parameters":{"type":"object","properties":{"paymentIntentId":{"type":"string"}},"required":["paymentIntentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.create","description":"Create a Stripe product.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"active":{"type":"boolean"},"metadata":{"type":"object"},"url":{"type":"string"},"images":{"type":"array"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"prices.create","description":"Create a Stripe price.","parameters":{"type":"object","properties":{"productId":{"type":"string"},"unitAmount":{"type":"integer"},"currency":{"type":"string"},"recurring":{"type":"object"},"metadata":{"type":"object"}},"required":["productId","currency"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"refunds.create","description":"Create a Stripe refund.","parameters":{"type":"object","properties":{"chargeId":{"type":"string"},"amount":{"type":"integer"},"reason":{"type":"string"},"metadata":{"type":"object"}},"required":["chargeId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payment-links.create","description":"Create a Stripe payment link.","parameters":{"type":"object","properties":{"lineItems":{"type":"array"},"afterCompletionType":{"type":"string"},"afterCompletionRedirectUrl":{"type":"string"},"allowPromotionCodes":{"type":"boolean"},"billingAddressCollection":{"type":"string"},"metadata":{"type":"object"}},"required":["lineItems"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payment-links.deactivate","description":"Deactivate a Stripe payment link.","parameters":{"type":"object","properties":{"paymentLinkId":{"type":"string"}},"required":["paymentLinkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"customers.delete","description":"Delete a Stripe customer.","parameters":{"type":"object","properties":{"customerId":{"type":"string"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.send","description":"Finalize and send a Stripe invoice to the customer.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.void","description":"Void a finalized Stripe invoice.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.update","description":"Update a Stripe product.","parameters":{"type":"object","properties":{"productId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"active":{"type":"boolean"},"metadata":{"type":"object"},"url":{"type":"string"},"images":{"type":"array"}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"charges.capture","description":"Capture a previously-authorized Stripe charge.","parameters":{"type":"object","properties":{"chargeId":{"type":"string"},"amount":{"type":"integer"},"receiptEmail":{"type":"string"},"statementDescriptor":{"type":"string"}},"required":["chargeId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.subscribe","description":"Create a Stripe webhook endpoint subscribed to one or more event types. Stripe pushes signed events at the supplied url; the returned secret is what the receiver verifies signatures against.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Destination URL Stripe should POST events to."},"enabled_events":{"type":"array","items":{"type":"string"},"description":"List of Stripe event types (or [\"*\"]) to subscribe to."},"description":{"type":"string"},"api_version":{"type":"string"},"connect":{"type":"boolean"},"metadata":{"type":"object"}},"required":["url","enabled_events"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.list","description":"List recently delivered Stripe events. Supports filtering by event type, created timestamp range, and cursor pagination via starting_after / ending_before.","parameters":{"type":"object","properties":{"type":{"type":"string","description":"Stripe event type to filter by (e.g. \"invoice.payment_failed\")."},"deliverySuccess":{"type":"boolean"},"createdGte":{"type":"integer","description":"Unix timestamp lower bound (inclusive)."},"createdLte":{"type":"integer","description":"Unix timestamp upper bound (inclusive)."},"startingAfter":{"type":"string"},"endingBefore":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"stripe-pack","displayName":"Stripe (customers, invoices, checkout, subscriptions)","description":"Look up Stripe customers, draft invoices, spin up hosted Checkout sessions, manage subscriptions, and hand off to the customer billing portal — all from one Stripe restricted key. Idempotency-Key forwarded on every mutation.","auth":{"kind":"api-key","hint":"Paste a Stripe restricted key (rk_live_…) with read on customers + subscriptions and write on invoices + checkout + subscriptions + billing portal."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"find_customer","class":"read","description":"Search Stripe customers by email. Returns the first match or {found:false}.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]}},{"name":"list_subscriptions","class":"read","description":"List a customer's subscriptions. Optionally filter by status ('active', 'past_due', 'canceled', 'all').","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"status":{"type":"string","enum":["active","past_due","unpaid","canceled","incomplete","trialing","all"],"default":"all"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["customerId"]}},{"name":"create_invoice","class":"mutation","description":"Draft + finalize a Stripe invoice for a customer with line items. Idempotency-Key guarantees at-most-once.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"customerId":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string"},"amount":{"type":"integer","description":"Amount in the smallest currency unit (cents)."},"currency":{"type":"string","description":"3-letter ISO currency code, lowercase."},"quantity":{"type":"integer","minimum":1,"default":1}},"required":["amount","currency"]}},"autoFinalize":{"type":"boolean","default":true}},"required":["customerId","items"]}},{"name":"create_checkout_session","class":"mutation","description":"Create a Stripe Checkout session and return its hosted URL. Idempotency-Key guarantees at-most-once.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"customerId":{"type":"string"},"mode":{"type":"string","enum":["payment","subscription"],"default":"payment"},"successUrl":{"type":"string"},"cancelUrl":{"type":"string"},"lineItems":{"type":"array","items":{"type":"object","properties":{"price":{"type":"string","description":"Stripe price id (price_...)"},"quantity":{"type":"integer","minimum":1,"default":1}},"required":["price"]}}},"required":["successUrl","cancelUrl","lineItems"]}},{"name":"cancel_subscription","class":"mutation","description":"Cancel a subscription. Default cancels immediately; pass atPeriodEnd=true to schedule cancellation for the end of the current billing period.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"subscriptionId":{"type":"string"},"atPeriodEnd":{"type":"boolean","default":false}},"required":["subscriptionId"]}},{"name":"create_billing_portal_session","class":"mutation","description":"Create a Stripe billing portal session and return its URL. Hand-off for the customer to self-serve cancel/upgrade/update-card.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"customerId":{"type":"string"},"returnUrl":{"type":"string"}},"required":["customerId","returnUrl"]}},{"name":"create_payment_intent","class":"mutation","description":"Create a Stripe PaymentIntent to collect a one-off payment. `amount` is in the smallest currency unit (cents). Returns the client_secret for confirmation on the frontend. Idempotency-Key guarantees at-most-once.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"amount":{"type":"integer","description":"Amount in the smallest currency unit (cents)."},"currency":{"type":"string","description":"3-letter ISO currency code, lowercase."},"customer":{"type":"string","description":"Optional Stripe customer id (cus_...)."},"automatic_payment_methods":{"type":"object","description":"When { enabled: true }, Stripe automatically derives eligible payment methods from the connected account's dashboard config.","properties":{"enabled":{"type":"boolean"}}},"description":{"type":"string"},"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Arbitrary string key/value pairs attached to the PaymentIntent."}},"required":["amount","currency"]}},{"name":"create_refund","class":"mutation","description":"Refund a Stripe charge or PaymentIntent. Provide either `payment_intent` OR `charge` (Stripe rejects both). `amount` is optional — when omitted Stripe refunds the full remaining amount. Idempotency-Key guarantees at-most-once.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"payment_intent":{"type":"string","description":"PaymentIntent id (pi_...) to refund."},"charge":{"type":"string","description":"Charge id (ch_...) to refund."},"amount":{"type":"integer","description":"Optional partial refund amount in the smallest currency unit (cents). Omit for full refund."},"reason":{"type":"string","enum":["duplicate","fraudulent","requested_by_customer"],"description":"Stripe-canonical refund reason."}}}},{"name":"create_customer","class":"mutation","description":"Create a Stripe customer record. All fields are optional, but at least one of email / name is recommended for human-readable dashboards. Idempotency-Key guarantees at-most-once.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"},"phone":{"type":"string"},"description":{"type":"string"},"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Arbitrary string key/value pairs attached to the customer."}}}}]},{"kind":"supabase","displayName":"Supabase","description":"Inspect Supabase projects, run SQL against the Postgres database, and manage secrets via the Management API.","auth":{"kind":"api-key","hint":"Supabase Management API personal access token (Dashboard > Account > Access Tokens). Sent as an Authorization: Bearer token."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"organizations.list","description":"List Supabase organizations available to the personal access token.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.list","description":"List Supabase projects available to the personal access token.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.get","description":"Read a Supabase project by its reference id.","parameters":{"type":"object","properties":{"ref":{"type":"string","description":"Project ref (e.g. abcdefghijklmnop)."}},"required":["ref"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"database.query","description":"Run SQL against the project Postgres database. This requires normal write approval because a Management API personal access token does not distinguish read-only SQL from writes.","parameters":{"type":"object","properties":{"ref":{"type":"string"},"query":{"type":"string","description":"SQL statement."}},"required":["ref","query"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"database.execute","description":"Execute a mutating SQL statement (INSERT/UPDATE/DELETE/DDL) against the project Postgres database.","parameters":{"type":"object","properties":{"ref":{"type":"string"},"query":{"type":"string"}},"required":["ref","query"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.create","description":"Provision a new Supabase project under an organization.","parameters":{"type":"object","properties":{"organization_id":{"type":"string"},"name":{"type":"string"},"region":{"type":"string","description":"AWS region slug, e.g. us-east-1."},"db_pass":{"type":"string","description":"Initial Postgres superuser password."},"plan":{"type":"string","enum":["free","pro"]}},"required":["organization_id","name","region","db_pass"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"secrets.list","description":"List project edge-function secrets (names only; values are write-only).","parameters":{"type":"object","properties":{"ref":{"type":"string"}},"required":["ref"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"secrets.upsert","description":"Create or update project edge-function secrets in bulk.","parameters":{"type":"object","properties":{"ref":{"type":"string"},"secrets":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}},"required":["name","value"]}}},"required":["ref","secrets"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.delete","description":"Delete a Supabase project. Permanently removes the project and all data.","parameters":{"type":"object","properties":{"ref":{"type":"string"}},"required":["ref"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"branches.create","description":"Create a preview branch on a Supabase project. Pass git_branch and region as optional fields when needed.","parameters":{"type":"object","properties":{"ref":{"type":"string"},"branch_name":{"type":"string"},"git_branch":{"type":"string","description":"Optional git branch to link."},"region":{"type":"string"}},"required":["ref","branch_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"branches.delete","description":"Delete a preview branch.","parameters":{"type":"object","properties":{"branch_id":{"type":"string"}},"required":["branch_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"secrets.delete","description":"Delete a project edge-function secret by name. Note: the Supabase Management API also accepts a JSON-array body for bulk deletes; this capability deletes a single named secret per call via query parameter.","parameters":{"type":"object","properties":{"ref":{"type":"string"},"name":{"type":"string","description":"Secret name to delete."}},"required":["ref","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"storage.upload","description":"Upload an object to a Supabase storage bucket. The body is the object payload; storage uses a separate hostname per project so callers must override metadata.baseUrl for storage calls.","parameters":{"type":"object","properties":{"ref":{"type":"string"},"bucket":{"type":"string"},"path":{"type":"string","description":"Object path inside the bucket."},"content":{"type":"string","description":"Object content (raw or base64)."}},"required":["ref","bucket","path","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"supadata","displayName":"Supadata","description":"Extract transcripts from YouTube videos.","auth":{"kind":"api-key","hint":"Supadata API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"transcript.get","description":"Get transcript from a YouTube video.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"YouTube video URL"},"lang":{"type":"string","description":"Preferred language of the transcript"},"text":{"type":"boolean","description":"Merge transcript into a single text instead of timestamped chunks"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"swarmnode","displayName":"SwarmNode","description":"Execute agents and retrieve execution results from SwarmNode distributed agent infrastructure.","auth":{"kind":"api-key","hint":"SwarmNode API key for agent execution."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"execution.get","description":"Get the execution status and results of an agent job.","parameters":{"type":"object","properties":{"jobId":{"type":"string","description":"Agent Executor Job ID"}},"required":["jobId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"agent.execute","description":"Execute an agent with the provided input payload.","parameters":{"type":"object","properties":{"payload":{"type":"object","description":"Agent Input Payload"}},"required":["payload"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"systeme-io","displayName":"Systeme.io","description":"Create and manage contacts, tags, and sales in Systeme.io CRM platform.","auth":{"kind":"api-key","hint":"Systeme.io API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.create","description":"Create a new contact in Systeme.io.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Contact email address"},"name":{"type":"string","description":"Contact name"},"locale":{"type":"string","description":"Contact preferred language"},"fields":{"type":"object","description":"Custom contact fields"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update an existing contact in Systeme.io.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact ID"},"email":{"type":"string","description":"Contact email address"},"name":{"type":"string","description":"Contact name"},"fields":{"type":"object","description":"Custom contact fields"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.findByEmail","description":"Find a contact by email address.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Contact email to search"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tags.addToContact","description":"Add a tag to a contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact ID"},"tagId":{"type":"string","description":"Tag ID"}},"required":["contactId","tagId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.removeFromContact","description":"Remove a tag from a contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact ID"},"tagId":{"type":"string","description":"Tag ID"}},"required":["contactId","tagId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.delete","description":"Delete a contact from Systeme.io.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact ID"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.create","description":"Create a new tag in Systeme.io.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Tag name"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.delete","description":"Delete a tag from Systeme.io.","parameters":{"type":"object","properties":{"tagId":{"type":"string","description":"Tag ID"}},"required":["tagId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.list","description":"List automation campaigns.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Page size"},"startingAfter":{"type":"string","description":"Pagination cursor"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.subscribe","description":"Subscribe a contact to an automation campaign.","parameters":{"type":"object","properties":{"campaignId":{"type":"string","description":"Campaign ID"},"contactId":{"type":"string","description":"Contact ID"}},"required":["campaignId","contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"tableau","displayName":"Tableau","description":"Business intelligence and analytics platform for data visualization.","auth":{"kind":"api-key","hint":"Tableau Server or Cloud API credentials (personal access token or username/password)."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"views.download","description":"Download a Tableau view in the specified format (image or PDF).","parameters":{"type":"object","properties":{"viewId":{"type":"string","description":"The ID of the view to download"},"format":{"type":"string","enum":["png","pdf","jpg"],"description":"Download format"},"maxAge":{"type":"number","description":"Maximum age of cached data in minutes"},"vizWidth":{"type":"number","description":"Width of the visualization in pixels"},"vizHeight":{"type":"number","description":"Height of the visualization in pixels"}},"required":["viewId","format"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"views.find","description":"Find a Tableau view by name within a workbook.","parameters":{"type":"object","properties":{"viewName":{"type":"string","description":"The URL name of the view"},"workbookId":{"type":"string","description":"The ID of the workbook"}},"required":["viewName","workbookId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workbooks.find","description":"Find a Tableau workbook by content URL or ID.","parameters":{"type":"object","properties":{"searchType":{"type":"string","enum":["workbookId","contentUrl"],"description":"Search by workbook ID or content URL"},"workbookId":{"type":"string","description":"The ID of the workbook"},"contentUrl":{"type":"string","description":"The content URL of the workbook"}},"required":["searchType"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workbooks.refresh","description":"Refresh all extracts in a workbook.","parameters":{"type":"object","properties":{"workbookId":{"type":"string","description":"The ID of the workbook to refresh"}},"required":["workbookId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"extracts.refresh","description":"Run an extract refresh task.","parameters":{"type":"object","properties":{"taskId":{"type":"string","description":"The ID of the extract refresh task"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"datasources.query","description":"List datasources in a site.","parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"The site ID (optional, uses default if not provided)"},"limit":{"type":"number","description":"Maximum number of results"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workbooks.delete","description":"Delete a workbook by ID.","parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"The site ID"},"workbookId":{"type":"string","description":"The ID of the workbook to delete"}},"required":["siteId","workbookId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.create","description":"Create a subscription to a view or workbook.","parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"The site ID"},"subscription":{"type":"object","description":"Tableau subscription envelope, e.g. { subscription: { subject, contentId, userId, scheduleId, ... } }"}},"required":["siteId","subscription"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"datasources.delete","description":"Delete a datasource by ID.","parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"The site ID"},"datasourceId":{"type":"string","description":"The ID of the datasource to delete"}},"required":["siteId","datasourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"talkable","displayName":"Talkable","description":"Manage referral marketing campaigns, advocate referrals, and track referral rewards.","auth":{"kind":"api-key","hint":"Talkable API key with site ID."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"advocates.list","description":"List advocates (people who are referring others).","parameters":{"type":"object","properties":{"site":{"type":"string"},"limit":{"type":"integer"}},"required":["site"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"advocates.get","description":"Get a specific advocate by email.","parameters":{"type":"object","properties":{"site":{"type":"string"},"email":{"type":"string"}},"required":["site","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"referrals.list","description":"List referrals for a site.","parameters":{"type":"object","properties":{"site":{"type":"string"},"status":{"type":"string"},"limit":{"type":"integer"}},"required":["site"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"referrals.create","description":"Create a referral (track a new referral event).","parameters":{"type":"object","properties":{"site":{"type":"string"},"advocateEmail":{"type":"string"},"friendEmail":{"type":"string"},"campaignTag":{"type":"string"}},"required":["site","advocateEmail","friendEmail","campaignTag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rewards.list","description":"List rewards for a site.","parameters":{"type":"object","properties":{"site":{"type":"string"},"limit":{"type":"integer"}},"required":["site"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.list","description":"List campaigns for a site.","parameters":{"type":"object","properties":{"site":{"type":"string"},"limit":{"type":"integer"}},"required":["site"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"events.track","description":"Track a purchase or custom event for referral attribution.","parameters":{"type":"object","properties":{"site":{"type":"string"},"email":{"type":"string"},"eventCategory":{"type":"string"},"eventNumber":{"type":"string"},"subtotal":{"type":"number"}},"required":["site","email","eventCategory","eventNumber","subtotal"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"offers.list","description":"List offers (rewards) for a campaign.","parameters":{"type":"object","properties":{"site":{"type":"string"},"campaignTag":{"type":"string"}},"required":["site","campaignTag"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"advocates.update","description":"Update an advocate profile (e.g. name, custom properties).","parameters":{"type":"object","properties":{"site":{"type":"string"},"email":{"type":"string"},"advocate":{"type":"object","description":"Partial advocate fields to update."}},"required":["site","email","advocate"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"advocates.delete","description":"Delete an advocate by email.","parameters":{"type":"object","properties":{"site":{"type":"string"},"email":{"type":"string"}},"required":["site","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"referrals.update","description":"Update the state of a referral (approve, reject, etc.).","parameters":{"type":"object","properties":{"site":{"type":"string"},"referralId":{"type":"string"},"state":{"type":"string","description":"New state (e.g. approved, rejected, completed)."}},"required":["site","referralId","state"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rewards.issue","description":"Issue a reward to an advocate.","parameters":{"type":"object","properties":{"site":{"type":"string"},"email":{"type":"string","description":"Advocate email to issue the reward to."},"offerId":{"type":"string","description":"Reward offer / campaign offer id."}},"required":["site","email","offerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"tally","displayName":"Tally","description":"Create and manage Tally forms, read submissions, and manage signed form-response webhooks.","auth":{"kind":"api-key","hint":"Tally API key from Account Settings > API keys. Sent as a Bearer token."},"category":"webhook","defaultConsistencyModel":"authoritative","capabilities":[{"name":"user.get","description":"Read the authenticated Tally user.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.list","description":"List accessible forms with pagination.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1,"maximum":500}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.get","description":"Read a form with its blocks and settings.","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.questions.list","description":"List the questions defined by a form.","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"submissions.list","description":"List completed or partial form submissions incrementally.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1,"maximum":500},"filter":{"type":"string","enum":["all","completed","partial"]},"startDate":{"type":"string"},"endDate":{"type":"string"},"afterId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"submissions.get","description":"Read one submission and the form questions needed to interpret it.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"submissionId":{"type":"string"}},"required":["formId","submissionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"webhooks.list","description":"List webhook subscriptions across accessible forms.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.create","description":"Create a form from blocks or a template.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"templateId":{"type":"string"},"folderId":{"type":"string"},"status":{"type":"string","enum":["DRAFT","PUBLISHED"]},"blocks":{"type":"array","items":{"type":"object"}},"settings":{"type":"object"}},"required":["status","blocks"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.update","description":"Replace selected form settings or its complete blocks array.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["DRAFT","PUBLISHED","CLOSED"]},"blocks":{"type":"array","items":{"type":"object"}},"settings":{"type":"object"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"forms.delete","description":"Move a form to Tally trash.","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"submissions.delete","description":"Permanently delete one form submission.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"submissionId":{"type":"string"}},"required":["formId","submissionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"webhooks.create","description":"Create a signed form-response webhook subscription.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"url":{"type":"string"},"eventTypes":{"type":"array","items":{"type":"string","enum":["FORM_RESPONSE"]}},"signingSecret":{"type":"string"},"httpHeaders":{"type":"array","items":{"type":"object"}},"externalSubscriber":{"type":"string"}},"required":["formId","url","eventTypes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Delete a webhook subscription.","parameters":{"type":"object","properties":{"webhookId":{"type":"string"}},"required":["webhookId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"taxjar","displayName":"TaxJar","description":"Calculate sales tax and synchronize order/refund transactions with TaxJar for reporting and filing.","auth":{"kind":"api-key","hint":"TaxJar SmartCalcs API token from Account → TaxJar API."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"taxes.calculate","description":"Calculate sales tax for a cart or order without creating a TaxJar transaction.","parameters":{"type":"object","properties":{"from_country":{"type":"string"},"from_zip":{"type":"string"},"from_state":{"type":"string"},"from_city":{"type":"string"},"from_street":{"type":"string"},"to_country":{"type":"string"},"to_zip":{"type":"string"},"to_state":{"type":"string"},"to_city":{"type":"string"},"to_street":{"type":"string"},"amount":{"type":"number"},"shipping":{"type":"number"},"customer_id":{"type":"string"},"exemption_type":{"type":"string"},"nexus_addresses":{"type":"array","items":{"type":"object"}},"line_items":{"type":"array","items":{"type":"object"}}},"required":["from_country","from_zip","to_country","to_zip","amount","shipping"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rates.get","description":"Read the combined sales-tax rate for a US or Canadian postal code.","parameters":{"type":"object","properties":{"zip":{"type":"string"},"country":{"type":"string"},"state":{"type":"string"},"city":{"type":"string"},"street":{"type":"string"}},"required":["zip"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"categories.list","description":"List TaxJar product tax categories and their tax codes.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"nexus-regions.list","description":"List nexus regions configured for the TaxJar account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.get","description":"Read a synced order transaction.","parameters":{"type":"object","properties":{"transactionId":{"type":"string","description":"Merchant transaction id."},"provider":{"type":"string","enum":["api","stripe","square"],"description":"Transaction source. Defaults to api."}},"required":["transactionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.create","description":"Create an order transaction for reporting and filing.","parameters":{"type":"object","properties":{"transactionId":{"type":"string","description":"Merchant transaction id."},"data":{"type":"object","description":"Provider-native TaxJar order/refund payload, including transaction_id and transaction_date."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.update","description":"Update an order transaction.","parameters":{"type":"object","properties":{"transactionId":{"type":"string","description":"Merchant transaction id."},"data":{"type":"object","description":"Provider-native TaxJar order/refund payload, including transaction_id and transaction_date."}},"required":["transactionId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.delete","description":"Delete an order transaction.","parameters":{"type":"object","properties":{"transactionId":{"type":"string","description":"Merchant transaction id."},"provider":{"type":"string","enum":["api","stripe","square"],"description":"Transaction source. Defaults to api."}},"required":["transactionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"refunds.get","description":"Read a synced refund transaction.","parameters":{"type":"object","properties":{"transactionId":{"type":"string","description":"Merchant transaction id."},"provider":{"type":"string","enum":["api","stripe","square"],"description":"Transaction source. Defaults to api."}},"required":["transactionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"refunds.create","description":"Create a refund transaction for reporting and filing.","parameters":{"type":"object","properties":{"transactionId":{"type":"string","description":"Merchant transaction id."},"data":{"type":"object","description":"Provider-native TaxJar order/refund payload, including transaction_id and transaction_date."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"refunds.update","description":"Update a refund transaction.","parameters":{"type":"object","properties":{"transactionId":{"type":"string","description":"Merchant transaction id."},"data":{"type":"object","description":"Provider-native TaxJar order/refund payload, including transaction_id and transaction_date."}},"required":["transactionId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"refunds.delete","description":"Delete a refund transaction.","parameters":{"type":"object","properties":{"transactionId":{"type":"string","description":"Merchant transaction id."},"provider":{"type":"string","enum":["api","stripe","square"],"description":"Transaction source. Defaults to api."}},"required":["transactionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"teable","displayName":"Teable","description":"Read and write records, tables, fields, and views in Teable databases.","auth":{"kind":"oauth2","authorizationUrl":"https://app.teable.ai/api/oauth/authorize","tokenUrl":"https://app.teable.ai/api/oauth/access_token","scopes":["base|read","table|read","table|create","field|create","view|create","record|read","record|create","record|update"],"clientIdEnv":"TEABLE_OAUTH_CLIENT_ID","clientSecretEnv":"TEABLE_OAUTH_CLIENT_SECRET","pkce":"supported"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.create","description":"Create a new record in a Teable table.","parameters":{"type":"object","properties":{"tableId":{"type":"string"},"fields":{"type":"object"},"fieldKeyType":{"type":"string","enum":["name","id","dbFieldName"]},"typecast":{"type":"boolean"}},"required":["tableId","fields"]},"requiredScopes":["record|create"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.find","description":"Find records in a Teable table.","parameters":{"type":"object","properties":{"tableId":{"type":"string"},"filter":{"type":"string"},"take":{"type":"integer","minimum":1,"maximum":1000},"skip":{"type":"integer","minimum":0},"viewId":{"type":"string"},"fieldKeyType":{"type":"string","enum":["name","id","dbFieldName"]},"cellFormat":{"type":"string","enum":["json","text"]}},"required":["tableId"]},"requiredScopes":["record|read"],"class":"read"},{"name":"records.get","description":"Get a single record by ID from a Teable table.","parameters":{"type":"object","properties":{"tableId":{"type":"string"},"recordId":{"type":"string"},"fieldKeyType":{"type":"string","enum":["name","id","dbFieldName"]},"cellFormat":{"type":"string","enum":["json","text"]}},"required":["tableId","recordId"]},"requiredScopes":["record|read"],"class":"read"},{"name":"records.update","description":"Update an existing record in a Teable table.","parameters":{"type":"object","properties":{"tableId":{"type":"string"},"recordId":{"type":"string"},"fields":{"type":"object"},"fieldKeyType":{"type":"string","enum":["name","id","dbFieldName"]},"typecast":{"type":"boolean"}},"required":["tableId","recordId","fields"]},"requiredScopes":["record|update"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tables.list","description":"List all tables in a Teable base.","parameters":{"type":"object","properties":{"baseId":{"type":"string","description":"The ID of the base."}},"required":["baseId"]},"requiredScopes":["table|read"],"class":"read"},{"name":"tables.create","description":"Create a new table in a Teable base.","parameters":{"type":"object","properties":{"baseId":{"type":"string"},"name":{"type":"string","description":"Table name."}},"required":["baseId","name"]},"requiredScopes":["table|create"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"fields.create","description":"Add a field (column) to a Teable table.","parameters":{"type":"object","properties":{"tableId":{"type":"string"},"name":{"type":"string","description":"Field name."},"type":{"type":"string","description":"Field type (e.g. singleLineText, number, checkbox)."}},"required":["tableId","name","type"]},"requiredScopes":["field|create"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"views.create","description":"Create a new view on a Teable table.","parameters":{"type":"object","properties":{"tableId":{"type":"string"},"name":{"type":"string","description":"View name."},"type":{"type":"string","description":"View type (e.g. grid, kanban, gallery, form)."}},"required":["tableId","name","type"]},"requiredScopes":["view|create"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"telegram","displayName":"Telegram","description":"Send messages, photos, and documents via a Telegram bot; read chat metadata and members; poll updates or register a webhook.","auth":{"kind":"api-key","hint":"Paste the bot token issued by @BotFather (format: \"123456789:AAExxxxx...\"). The token IS the credential — Telegram has no OAuth grant."},"category":"comms","defaultConsistencyModel":"advisory","rateLimit":{"requests":25,"windowMs":1000,"scope":"oauth-client"},"capabilities":[{"name":"getMe","class":"read","description":"Return the bot identity (id, username, is_bot, name, supports_inline_queries).","parameters":{"type":"object","properties":{}}},{"name":"getChat","class":"read","description":"Read a chat (group, supergroup, channel, or private) by id or @username.","parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"],"description":"Numeric chat id or @channel_username."}},"required":["chat_id"]}},{"name":"getChatAdministrators","class":"read","description":"List administrators of a chat (excludes regular members).","parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]}},"required":["chat_id"]}},{"name":"getChatMember","class":"read","description":"Read a single chat member (status, permissions, role).","parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]},"user_id":{"type":"integer"}},"required":["chat_id","user_id"]}},{"name":"getChatMemberCount","class":"read","description":"Return the total number of members in a chat.","parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]}},"required":["chat_id"]}},{"name":"getUpdates","class":"read","description":"Long-poll for incoming updates. Mutually exclusive with setWebhook — calling getUpdates while a webhook is set returns 409.","parameters":{"type":"object","properties":{"offset":{"type":"integer","description":"Update id to acknowledge; returns updates > offset."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":100},"timeout":{"type":"integer","minimum":0,"maximum":50,"description":"Long-poll seconds (0 = short poll)."},"allowed_updates":{"type":"array","items":{"type":"string"},"description":"Filter (e.g. [\"message\", \"callback_query\"]); empty = all except chat_member."}}}},{"name":"getFile","class":"read","description":"Resolve a file_id to a downloadable path. The response includes `file_path`; download URL is `https://api.telegram.org/file/bot<token>/<file_path>`.","parameters":{"type":"object","properties":{"file_id":{"type":"string"}},"required":["file_id"]}},{"name":"getWebhookInfo","class":"read","description":"Inspect the currently registered webhook (url, pending_update_count, last_error_message).","parameters":{"type":"object","properties":{}}},{"name":"sendMessage","class":"mutation","description":"Send a text message to a chat. Append-only — no upstream dedup — the caller owns idempotency via the SDK idempotencyKey.","cas":"none","externalEffect":true,"parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]},"text":{"type":"string","description":"Message body (≤4096 chars)."},"parse_mode":{"type":"string","enum":["MarkdownV2","HTML","Markdown"]},"entities":{"type":"array","items":{"type":"object"}},"link_preview_options":{"type":"object"},"disable_notification":{"type":"boolean"},"protect_content":{"type":"boolean"},"reply_parameters":{"type":"object","description":"Reply target spec."},"reply_markup":{"type":"object","description":"Inline keyboard / reply keyboard markup."},"message_thread_id":{"type":"integer","description":"Forum topic / thread id."}},"required":["chat_id","text"]}},{"name":"sendPhoto","class":"mutation","description":"Send a photo to a chat by URL or pre-uploaded file_id. Append-only — no upstream dedup.","cas":"none","externalEffect":true,"parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]},"photo":{"type":"string","description":"HTTPS URL or Telegram file_id."},"caption":{"type":"string"},"parse_mode":{"type":"string","enum":["MarkdownV2","HTML","Markdown"]},"has_spoiler":{"type":"boolean"},"disable_notification":{"type":"boolean"},"reply_parameters":{"type":"object"},"reply_markup":{"type":"object"},"message_thread_id":{"type":"integer"}},"required":["chat_id","photo"]}},{"name":"sendDocument","class":"mutation","description":"Send a document (file) to a chat by URL or pre-uploaded file_id. Append-only.","cas":"none","externalEffect":true,"parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]},"document":{"type":"string","description":"HTTPS URL or Telegram file_id."},"caption":{"type":"string"},"parse_mode":{"type":"string","enum":["MarkdownV2","HTML","Markdown"]},"disable_notification":{"type":"boolean"},"reply_parameters":{"type":"object"},"reply_markup":{"type":"object"},"message_thread_id":{"type":"integer"}},"required":["chat_id","document"]}},{"name":"forwardMessage","class":"mutation","description":"Forward a message between chats. Append-only — replays create new forwards.","cas":"none","externalEffect":true,"parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"],"description":"Destination chat."},"from_chat_id":{"type":["string","integer"],"description":"Origin chat of the source message."},"message_id":{"type":"integer"},"disable_notification":{"type":"boolean"},"protect_content":{"type":"boolean"},"message_thread_id":{"type":"integer"}},"required":["chat_id","from_chat_id","message_id"]}},{"name":"editMessageText","class":"mutation","description":"Edit an existing bot-authored message. Idempotent on (chat_id, message_id) but the caller should read-verify before retrying lossy edits.","cas":"optimistic-read-verify","externalEffect":true,"parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]},"message_id":{"type":"integer"},"inline_message_id":{"type":"string","description":"Use instead of (chat_id, message_id) for inline-mode messages."},"text":{"type":"string"},"parse_mode":{"type":"string","enum":["MarkdownV2","HTML","Markdown"]},"entities":{"type":"array","items":{"type":"object"}},"link_preview_options":{"type":"object"},"reply_markup":{"type":"object"}},"required":["text"]}},{"name":"deleteMessage","class":"mutation","description":"Delete a message. Idempotent on (chat_id, message_id) — re-deleting returns ok:true semantics.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]},"message_id":{"type":"integer"}},"required":["chat_id","message_id"]}},{"name":"answerCallbackQuery","class":"mutation","description":"Acknowledge an inline-keyboard callback. Idempotent on callback_query_id — Telegram only accepts the first answer.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"callback_query_id":{"type":"string"},"text":{"type":"string","description":"≤200 char notification body shown to the user."},"show_alert":{"type":"boolean"},"url":{"type":"string"},"cache_time":{"type":"integer"}},"required":["callback_query_id"]}},{"name":"setWebhook","class":"mutation","description":"Register an HTTPS webhook for incoming updates. Idempotent on the (url, secret_token) tuple — re-setting the same URL is a no-op.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"url":{"type":"string","description":"HTTPS endpoint (no self-signed certs unless certificate is provided)."},"secret_token":{"type":"string","description":"1-256 char shared secret echoed in `X-Telegram-Bot-Api-Secret-Token` header for verification."},"max_connections":{"type":"integer","minimum":1,"maximum":100,"default":40},"allowed_updates":{"type":"array","items":{"type":"string"}},"drop_pending_updates":{"type":"boolean"},"ip_address":{"type":"string"}},"required":["url"]}},{"name":"deleteWebhook","class":"mutation","description":"Remove the registered webhook so getUpdates becomes usable again. Idempotent.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"drop_pending_updates":{"type":"boolean"}}}},{"name":"editMessageMedia","class":"mutation","description":"Replace media (photo / video / animation / audio / document) on a previously-sent message. Idempotent on (chat_id, message_id) — re-sending the same media is a no-op upstream.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]},"message_id":{"type":"integer"},"inline_message_id":{"type":"string","description":"Use instead of (chat_id, message_id) for inline-mode messages."},"media":{"type":"object","description":"InputMedia object — { type: photo|video|animation|audio|document, media: <url|file_id>, caption?, parse_mode?, ... }."},"reply_markup":{"type":"object"}},"required":["media"]}},{"name":"pinChatMessage","class":"mutation","description":"Pin a message in a chat. Idempotent on (chat_id, message_id) — pinning an already-pinned message is a no-op upstream.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]},"message_id":{"type":"integer"},"disable_notification":{"type":"boolean"},"business_connection_id":{"type":"string"}},"required":["chat_id","message_id"]}},{"name":"unpinChatMessage","class":"mutation","description":"Unpin a message in a chat. Omit message_id to unpin the most-recently-pinned. Idempotent — unpinning an already-unpinned message is a no-op.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]},"message_id":{"type":"integer","description":"Optional — when omitted, unpins the most-recently-pinned."},"business_connection_id":{"type":"string"}},"required":["chat_id"]}},{"name":"banChatMember","class":"mutation","description":"Ban a user from a group / supergroup / channel. Idempotent on (chat_id, user_id) — re-banning an already-banned user is a no-op.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]},"user_id":{"type":"integer"},"until_date":{"type":"integer","description":"Unix time when the ban lifts; 0 or omitted = permanent."},"revoke_messages":{"type":"boolean","description":"Delete all messages from the user."}},"required":["chat_id","user_id"]}},{"name":"restrictChatMember","class":"mutation","description":"Restrict a user's permissions in a supergroup. Body carries the full ChatPermissions object — every setting must be present, omitted booleans are treated as false. Idempotent on (chat_id, user_id, permissions).","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]},"user_id":{"type":"integer"},"permissions":{"type":"object","description":"ChatPermissions object — { can_send_messages, can_send_audios, can_send_documents, ... }."},"use_independent_chat_permissions":{"type":"boolean"},"until_date":{"type":"integer","description":"Unix time when restrictions lift; 0 or omitted = permanent."}},"required":["chat_id","user_id","permissions"]}}]},{"kind":"telnyx","displayName":"Telnyx","description":"Send SMS messages and make voice calls via the Telnyx telecom API platform.","auth":{"kind":"api-key","hint":"Telnyx API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"messages.send","description":"Send an SMS message.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Destination phone number or list of numbers."},"from":{"type":"string","description":"Sender phone number in E.164 format."},"text":{"type":"string","description":"Message body."},"messaging_profile_id":{"type":"string","description":"Optional Telnyx messaging profile ID."},"webhook_url":{"type":"string","description":"Optional webhook URL for delivery status."}},"required":["to","from","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.create","description":"Initiate a voice call.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Destination number or SIP URI."},"from":{"type":"string","description":"Caller ID number in E.164 format."},"connection_id":{"type":"string","description":"Telnyx Call Control Application ID."},"audio_url":{"type":"string","description":"Optional WAV or MP3 URL to play when call is answered."},"webhook_url":{"type":"string","description":"Optional webhook URL for call events."},"timeout_secs":{"type":"integer","description":"Ring timeout in seconds."}},"required":["to","from","connection_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.list","description":"List recent calls.","parameters":{"type":"object","properties":{"filter":{"type":"string","description":"Optional filter criteria."},"page_size":{"type":"integer","description":"Number of results per page (default 20)."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.get","description":"Retrieve call details by ID.","parameters":{"type":"object","properties":{"call_id":{"type":"string","description":"Unique call control ID."}},"required":["call_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.list","description":"List sent or received messages.","parameters":{"type":"object","properties":{"filter":{"type":"string","description":"Optional filter criteria."},"page_size":{"type":"integer","description":"Number of results per page."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.hangup","description":"Hang up an active call.","parameters":{"type":"object","properties":{"call_control_id":{"type":"string","description":"Telnyx Call Control ID for the active call."}},"required":["call_control_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.transfer","description":"Transfer an active call to a new destination.","parameters":{"type":"object","properties":{"call_control_id":{"type":"string","description":"Telnyx Call Control ID for the active call."},"to":{"type":"string","description":"Destination number or SIP URI to transfer the call to."},"from":{"type":"string","description":"Caller ID number to present on the transferred leg (optional)."}},"required":["call_control_id","to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"numbers.list","description":"List phone numbers on the account.","parameters":{"type":"object","properties":{"filter":{"type":"string","description":"Optional filter criteria."},"page_size":{"type":"integer","description":"Number of results per page."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"numbers.update","description":"Update phone number configuration (tags, connection, customer reference).","parameters":{"type":"object","properties":{"phone_number_id":{"type":"string","description":"Telnyx phone number ID."},"tags":{"type":"array","items":{"type":"string"},"description":"Tags to set on the number (optional)."},"customer_reference":{"type":"string","description":"Customer reference string (optional)."},"connection_id":{"type":"string","description":"Telnyx Call Control Application or Connection ID (optional)."}},"required":["phone_number_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"tenzo","displayName":"Tenzo","description":"Extract data and insights from the Tenzo platform for sales, forecasting, and analytics.","auth":{"kind":"oauth2","authorizationUrl":"https://api.tenzo.com/oauth/authorize","tokenUrl":"https://api.tenzo.com/oauth/token","scopes":["data:read"],"clientIdEnv":"TENZO_OAUTH_CLIENT_ID","clientSecretEnv":"TENZO_OAUTH_CLIENT_SECRET"},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"forecasts.list","description":"Retrieve daily forecasts from Tenzo.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Number of forecasts to retrieve"},"offset":{"type":"integer","description":"Pagination offset"}},"required":[]},"requiredScopes":["data:read"],"class":"read"},{"name":"sales.summary","description":"Get sales summary data from Tenzo.","parameters":{"type":"object","properties":{"startDate":{"type":"string","description":"Start date (YYYY-MM-DD)"},"endDate":{"type":"string","description":"End date (YYYY-MM-DD)"},"limit":{"type":"integer","description":"Maximum records to return"}},"required":[]},"requiredScopes":["data:read"],"class":"read"},{"name":"payments.summary","description":"Retrieve payment summary data from Tenzo.","parameters":{"type":"object","properties":{"startDate":{"type":"string","description":"Start date (YYYY-MM-DD)"},"endDate":{"type":"string","description":"End date (YYYY-MM-DD)"},"limit":{"type":"integer","description":"Maximum records to return"}},"required":[]},"requiredScopes":["data:read"],"class":"read"},{"name":"insights.list","description":"Fetch analytics and insights from Tenzo.","parameters":{"type":"object","properties":{"category":{"type":"string","description":"Insight category (sales, revenue, forecast, etc.)"},"limit":{"type":"integer","description":"Number of insights to retrieve"}},"required":[]},"requiredScopes":["data:read"],"class":"read"}]},{"kind":"textcortex-ai","displayName":"TextCortex AI","description":"AI-powered writing assistant for content creation, code generation, translations, and more using multiple AI models.","auth":{"kind":"api-key","hint":"TextCortex AI API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"prompt.send","description":"Send a prompt to TextCortex AI and get a response.","parameters":{"type":"object","properties":{"prompt":{"type":"string","description":"The prompt text to send."},"model":{"type":"string","description":"The AI model to use (optional)."},"max_tokens":{"type":"integer","description":"Maximum tokens in response (optional, 1-4096)."},"temperature":{"type":"number","description":"Temperature/creativity level (optional, 0.0-2.0)."},"n":{"type":"integer","description":"Number of outputs to generate (optional, 1-5)."}},"required":["prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"paraphrase.create","description":"Create a paraphrase of the provided text.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"The text to paraphrase."},"model":{"type":"string","description":"The AI model to use (optional)."}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"social.media.caption.create","description":"Generate a social media caption for given content.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"The content to create a caption for."},"model":{"type":"string","description":"The AI model to use (optional)."}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"translation.create","description":"Translate text from source language to target language.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"The text to translate."},"source_lang":{"type":"string","description":"Source language code (optional)."},"target_lang":{"type":"string","description":"Target language code."},"model":{"type":"string","description":"The AI model to use (optional)."}},"required":["text","target_lang"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"code.create","description":"Generate code based on provided instructions.","parameters":{"type":"object","properties":{"instructions":{"type":"string","description":"Code generation instructions."},"language":{"type":"string","description":"Programming language for code."},"model":{"type":"string","description":"The AI model to use (optional)."},"max_tokens":{"type":"integer","description":"Maximum tokens in response (optional, 1-4096)."},"temperature":{"type":"number","description":"Temperature/creativity level (optional, 0.0-2.0)."}},"required":["instructions","language"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"email.create","description":"Generate an email with optional context and instructions.","parameters":{"type":"object","properties":{"context":{"type":"string","description":"Context for the email."},"to":{"type":"string","description":"Email recipient (optional)."},"from":{"type":"string","description":"Email sender (optional)."},"instructions":{"type":"string","description":"Instructions for email generation (optional)."},"received_email":{"type":"string","description":"Email being replied to (optional)."},"purpose":{"type":"string","description":"Purpose of the email (optional)."},"company_details":{"type":"string","description":"Company details (optional)."},"formality":{"type":"string","description":"Formality level (optional)."},"model":{"type":"string","description":"The AI model to use (optional)."}},"required":["context"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"product.description.create","description":"Generate a product description with name, features, brand, and category.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Product name."},"description":{"type":"string","description":"Product features."},"brand":{"type":"string","description":"Product brand (optional)."},"category":{"type":"string","description":"Product category (optional)."},"keywords":{"type":"string","description":"Keywords to include (comma-separated, optional)."},"model":{"type":"string","description":"The AI model to use (optional)."}},"required":["name","description"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"summary.create","description":"Generate a summary of the provided text.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"The text to summarize."},"model":{"type":"string","description":"The AI model to use (optional)."}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"templates.list","description":"List saved generation templates.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Number of results per page (optional)."},"offset":{"type":"integer","description":"Pagination offset (optional)."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"personas.list","description":"List available personas.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Number of results per page (optional)."},"offset":{"type":"integer","description":"Pagination offset (optional)."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"history.list","description":"List previous generations.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Number of results per page (optional)."},"offset":{"type":"integer","description":"Pagination offset (optional)."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"history.delete","description":"Delete a generation entry from history.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"History entry ID."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"theirstack","displayName":"TheirStack","description":"Jobs and technographics data API. Search job postings and companies across 100+ countries, look up a company's tech stack, and detect buying intent.","auth":{"kind":"api-key","hint":"API key from app.theirstack.com/settings/api. Sent as the Authorization: Bearer header."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"jobs.search","description":"Search job postings with filters (title, country, technology, posting recency, company). Requires at least one filter such as posted_at_max_age_days. Costs 1 credit per job returned.","parameters":{"type":"object","properties":{"posted_at_max_age_days":{"type":"integer"},"job_title_or":{"type":"array","items":{"type":"string"}},"job_country_code_or":{"type":"array","items":{"type":"string"}},"company_technology_slug_or":{"type":"array","items":{"type":"string"}},"company_name_or":{"type":"array","items":{"type":"string"}},"limit":{"type":"integer"},"page":{"type":"integer"}},"required":["posted_at_max_age_days","limit","page"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.search","description":"Search companies by country, technologies used, industry, funding, and nested job filters. Costs 3 credits per company returned.","parameters":{"type":"object","properties":{"company_country_code_or":{"type":"array","items":{"type":"string"}},"company_technology_slug_or":{"type":"array","items":{"type":"string"}},"industry_id_or":{"type":"array","items":{"type":"integer"}},"min_funding_usd":{"type":"integer"},"max_funding_usd":{"type":"integer"},"limit":{"type":"integer"},"page":{"type":"integer"}},"required":["limit","page"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.technologies","description":"Look up the technologies (tech stack) detected for a company identified by domain, name, or LinkedIn URL. Costs 3 credits per company lookup.","parameters":{"type":"object","properties":{"company_domain":{"type":"string"},"company_name":{"type":"string"},"company_linkedin_url":{"type":"string"},"technology_slug_or":{"type":"array","items":{"type":"string"}}},"required":["company_domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.buying_intents","description":"Retrieve buying-intent signals for a company identified by domain, name, or LinkedIn URL. Costs 3 credits per company lookup.","parameters":{"type":"object","properties":{"company_domain":{"type":"string"},"company_name":{"type":"string"},"company_linkedin_url":{"type":"string"}},"required":["company_domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"ticktick","displayName":"TickTick","description":"Create, update, complete, and delete tasks in TickTick.","auth":{"kind":"oauth2","authorizationUrl":"https://ticktick.com/oauth/authorize","tokenUrl":"https://ticktick.com/oauth/token","scopes":["tasks:read","tasks:write"],"clientIdEnv":"TICKTICK_OAUTH_CLIENT_ID","clientSecretEnv":"TICKTICK_OAUTH_CLIENT_SECRET","tokenClientAuthMethod":"client_secret_basic"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tasks.create","description":"Create a new task in TickTick.","parameters":{"type":"object","properties":{"title":{"type":"string"},"projectId":{"type":"string"},"description":{"type":"string"},"priority":{"type":"integer"},"dueDate":{"type":"string"}},"required":["title","projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update an existing task in TickTick.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"priority":{"type":"integer"},"dueDate":{"type":"string"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.get","description":"Retrieve a specific task from TickTick.","parameters":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.find","description":"Find tasks in a TickTick project by query.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"query":{"type":"string"},"limit":{"type":"integer"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.complete","description":"Mark a task as complete in TickTick.","parameters":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.delete","description":"Delete a task from TickTick.","parameters":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"projects.get","description":"Retrieve a specific project from TickTick.","parameters":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.create","description":"Create a new project (list) in TickTick.","parameters":{"type":"object","properties":{"name":{"type":"string"},"color":{"type":"string","description":"Hex color code for the project (optional)."},"viewMode":{"type":"string","description":"View mode, e.g. 'list', 'kanban', 'timeline' (optional)."},"kind":{"type":"string","description":"Project kind, e.g. 'TASK' or 'NOTE' (optional)."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.update","description":"Update an existing project in TickTick.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"name":{"type":"string","description":"New project name (optional)."},"color":{"type":"string","description":"Hex color code for the project (optional)."},"viewMode":{"type":"string","description":"View mode (optional)."},"kind":{"type":"string","description":"Project kind (optional)."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.delete","description":"Delete a project from TickTick.","parameters":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.move","description":"Move a task to another project.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"projectId":{"type":"string","description":"Destination project ID."}},"required":["taskId","projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"tiktok","displayName":"TikTok","description":"Read the connected TikTok profile and videos, then publish approved videos or photo posts from verified HTTPS URLs.","auth":{"kind":"oauth2","authorizationUrl":"https://www.tiktok.com/v2/auth/authorize/","tokenUrl":"https://open.tiktokapis.com/v2/oauth/token/","scopes":["user.info.basic","video.list","video.publish"],"scopeSeparator":",","pkce":"unsupported","authorizationClientIdParam":"client_key","tokenClientIdParam":"client_key","tokenClientSecretParam":"client_secret","clientIdEnv":"TIKTOK_OAUTH_CLIENT_KEY","clientSecretEnv":"TIKTOK_OAUTH_CLIENT_SECRET","tokenMetadata":{"openId":"open_id"}},"category":"comms","defaultConsistencyModel":"advisory","capabilities":[{"name":"user.info","description":"Read the connected TikTok account identity, display name, and avatar.","parameters":{"type":"object","properties":{}},"requiredScopes":["user.info.basic"],"class":"read"},{"name":"videos.list","description":"List videos for the connected creator, including public URLs, dimensions, duration, and engagement counts.","parameters":{"type":"object","properties":{"cursor":{"type":"integer","minimum":0,"description":"UTC millisecond cursor returned by the previous page."},"max_count":{"type":"integer","minimum":1,"maximum":20,"default":10}}},"requiredScopes":["video.list"],"class":"read"},{"name":"videos.query","description":"Read up to 20 TikTok videos by their exact video ids.","parameters":{"type":"object","properties":{"video_ids":{"type":"array","minItems":1,"maxItems":20,"uniqueItems":true,"items":{"type":"string","minLength":1}}},"required":["video_ids"]},"requiredScopes":["video.list"],"class":"read"},{"name":"publishing.creatorInfo","description":"Read the latest creator posting limits, privacy choices, and interaction settings before presenting a publish confirmation.","parameters":{"type":"object","properties":{}},"requiredScopes":["video.publish"],"class":"read"},{"name":"publishing.status","description":"Read processing, moderation, and publication status for one publish request.","parameters":{"type":"object","properties":{"publish_id":{"type":"string","minLength":1,"maxLength":64}},"required":["publish_id"]},"requiredScopes":["video.publish"],"class":"read"},{"name":"publishing.videoFromUrl","description":"Directly publish one approved video from an app-verified HTTPS URL. The adapter refreshes creator limits before it sends the post.","parameters":{"type":"object","properties":{"video_url":{"type":"string","format":"uri","pattern":"^https://","description":"Public HTTPS URL covered by the domain or URL prefix verified in the TikTok app."},"video_duration_sec":{"type":"number","exclusiveMinimum":0,"description":"Measured video duration used to enforce the creator-specific limit."},"privacy_level":{"type":"string","enum":["PUBLIC_TO_EVERYONE","MUTUAL_FOLLOW_FRIENDS","FOLLOWER_OF_CREATOR","SELF_ONLY"]},"title":{"type":"string","maxLength":2200},"disable_duet":{"type":"boolean"},"disable_comment":{"type":"boolean"},"disable_stitch":{"type":"boolean"},"video_cover_timestamp_ms":{"type":"integer","minimum":0},"brand_content_toggle":{"type":"boolean","description":"True for a paid partnership that promotes a third-party business."},"brand_organic_toggle":{"type":"boolean","description":"True when the post promotes the creator's own business."},"is_aigc":{"type":"boolean","description":"True when TikTok must label the video as AI-generated content."}},"required":["video_url","video_duration_sec","privacy_level","disable_duet","disable_comment","disable_stitch","brand_content_toggle","brand_organic_toggle"]},"requiredScopes":["video.publish"],"class":"mutation","cas":"none","externalEffect":true},{"name":"publishing.photosFromUrls","description":"Directly publish 1–35 approved photos from app-verified HTTPS URLs. The adapter refreshes creator options before it sends the post.","parameters":{"type":"object","properties":{"photo_images":{"type":"array","minItems":1,"maxItems":35,"items":{"type":"string","format":"uri","pattern":"^https://"}},"photo_cover_index":{"type":"integer","minimum":0},"privacy_level":{"type":"string","enum":["PUBLIC_TO_EVERYONE","MUTUAL_FOLLOW_FRIENDS","FOLLOWER_OF_CREATOR","SELF_ONLY"]},"title":{"type":"string","maxLength":90},"description":{"type":"string","maxLength":4000},"disable_comment":{"type":"boolean"},"auto_add_music":{"type":"boolean"},"brand_content_toggle":{"type":"boolean","description":"True for a paid partnership that promotes a third-party business."},"brand_organic_toggle":{"type":"boolean","description":"True when the post promotes the creator's own business."}},"required":["photo_images","photo_cover_index","privacy_level","disable_comment","auto_add_music","brand_content_toggle","brand_organic_toggle"]},"requiredScopes":["video.publish"],"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"time-ops","displayName":"TimeOps","description":"Manage customers, projects, and time registrations in TimeOps.","auth":{"kind":"api-key","hint":"TimeOps API key from account settings."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"customers.create","description":"Create a new customer.","parameters":{"type":"object","properties":{"name":{"type":"string"},"vatNumber":{"type":"string"},"defaultRate":{"type":"number"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.create","description":"Create a new project.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"name":{"type":"string"},"billable":{"type":"boolean"},"rate":{"type":"number"},"finishedAt":{"type":"string"}},"required":["customerId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"registrations.create","description":"Create a time registration.","parameters":{"type":"object","properties":{"userId":{"type":"string"},"startedAt":{"type":"string"},"stoppedAt":{"type":"string"},"projectId":{"type":"string"},"description":{"type":"string"},"tags":{"type":"object"}},"required":["userId","startedAt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"timers.start","description":"Start a timer.","parameters":{"type":"object","properties":{"userId":{"type":"string"},"projectId":{"type":"string"},"description":{"type":"string"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"timers.stop","description":"Stop a timer.","parameters":{"type":"object","properties":{"userId":{"type":"string"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.update","description":"Update a customer record.","parameters":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"vatNumber":{"type":"string"},"defaultRate":{"type":"number"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.update","description":"Update a project.","parameters":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"customerId":{"type":"string"},"billable":{"type":"boolean"},"rate":{"type":"number"},"finishedAt":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"registrations.update","description":"Update a time registration.","parameters":{"type":"object","properties":{"id":{"type":"string"},"startedAt":{"type":"string"},"stoppedAt":{"type":"string"},"projectId":{"type":"string"},"description":{"type":"string"},"tags":{"type":"object"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"registrations.delete","description":"Delete a time registration.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.list","description":"List all customers.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.list","description":"List projects.","parameters":{"type":"object","properties":{"customerId":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"registrations.list","description":"List time registrations.","parameters":{"type":"object","properties":{"userId":{"type":"string"},"projectId":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"timelines-ai","displayName":"Timelines AI","description":"Search, manage, and send WhatsApp messages through Timelines AI.","auth":{"kind":"api-key","hint":"Timelines AI API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"chats.find","description":"Find chats with optional filters (name, labels, responsible, read status, closed status, ChatGPT autoresponse status, creation date).","parameters":{"type":"object","properties":{"name":{"type":"string"},"label":{"type":"object"},"responsible":{"type":"object"},"read":{"type":"boolean"},"closed":{"type":"boolean"},"chatgpt_autoresponse_enabled":{"type":"boolean"},"created_after":{"type":"string"},"created_before":{"type":"string"},"page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.find","description":"Find a specific message by message UID.","parameters":{"type":"object","properties":{"message_uid":{"type":"string"}},"required":["message_uid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.status","description":"Find the status of a message.","parameters":{"type":"object","properties":{"message_uid":{"type":"string"}},"required":["message_uid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.find","description":"Find an uploaded file by filename.","parameters":{"type":"object","properties":{"filename":{"type":"string"}},"required":["filename"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.find","description":"Find a WhatsApp account by ID or phone number.","parameters":{"type":"object","properties":{"id":{"type":"string"},"phone":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"chats.close","description":"Close a chat.","parameters":{"type":"object","properties":{"jid":{"type":"string"}},"required":["jid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send","description":"Send a message to an existing chat.","parameters":{"type":"object","properties":{"jid":{"type":"string"},"text":{"type":"string"},"attachment_template_id":{"type":"integer"}},"required":["jid","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send.to.new.chat","description":"Send a message to a new chat.","parameters":{"type":"object","properties":{"contactType":{"type":"string"},"contact":{"type":"string"},"chat_name":{"type":"string"},"text":{"type":"string"},"attachment_template_id":{"type":"integer"}},"required":["contactType","contact","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.send","description":"Send a file to an existing chat.","parameters":{"type":"object","properties":{"jid":{"type":"string"},"file":{"type":"string"}},"required":["jid","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.send.uploaded","description":"Send an uploaded file to an existing chat.","parameters":{"type":"object","properties":{"jid":{"type":"string"},"file":{"type":"string"}},"required":["jid","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chats.assign","description":"Assign a chat to a team member.","parameters":{"type":"object","properties":{"jid":{"type":"string"},"responsible_id":{"type":"string"}},"required":["jid","responsible_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chats.tag","description":"Tag a chat with a label.","parameters":{"type":"object","properties":{"jid":{"type":"string"},"label":{"type":"string"}},"required":["jid","label"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.markRead","description":"Mark a message as read.","parameters":{"type":"object","properties":{"message_uid":{"type":"string"}},"required":["message_uid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.create","description":"Add an internal note to a chat.","parameters":{"type":"object","properties":{"jid":{"type":"string"},"text":{"type":"string"}},"required":["jid","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"tl-dv","displayName":"tl;dv","description":"List meetings, retrieve transcripts and highlights, and import recordings for transcription.","auth":{"kind":"api-key","hint":"tl;dv API key sent in the x-api-key header."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"meetings.list","description":"Search and list tl;dv meetings with pagination, date, participation, and meeting-type filters.","parameters":{"type":"object","properties":{"query":{"type":"string"},"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1},"from":{"type":"string","description":"ISO-8601 lower bound."},"to":{"type":"string","description":"ISO-8601 upper bound."},"onlyParticipated":{"type":"boolean"},"meetingType":{"type":"string","enum":["internal","external"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"meetings.get","description":"Get metadata for a tl;dv meeting by id.","parameters":{"type":"object","properties":{"meetingId":{"type":"string"}},"required":["meetingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"meetings.upload","description":"Import a publicly reachable audio or video recording for asynchronous processing.","parameters":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"},"happenedAt":{"type":"string"},"dryRun":{"type":"boolean"},"participants":{"type":"array","items":{"type":"string","description":"Participant email address."}}},"required":["name","url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transcripts.get","description":"Get the speaker-attributed transcript for a tl;dv meeting.","parameters":{"type":"object","properties":{"meetingId":{"type":"string"}},"required":["meetingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"highlights.get","description":"Get highlights and notes for a tl;dv meeting.","parameters":{"type":"object","properties":{"meetingId":{"type":"string"}},"required":["meetingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"todoist","displayName":"Todoist","description":"Create, update, and search tasks in Todoist.","auth":{"kind":"oauth2","authorizationUrl":"https://todoist.com/oauth/authorize","tokenUrl":"https://todoist.com/oauth/access_token","scopes":["data:read_write"],"clientIdEnv":"TODOIST_OAUTH_CLIENT_ID","clientSecretEnv":"TODOIST_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tasks.create","description":"Create a task in Todoist.","parameters":{"type":"object","properties":{"content":{"type":"string","description":"Task content/title"},"description":{"type":"string","description":"Task description"},"project_id":{"type":"string","description":"Project ID where the task will be created"},"due_string":{"type":"string","description":"Due date (e.g., \"tomorrow\", \"next Monday\")"},"priority":{"type":"integer","description":"Priority (1-4, where 4 is urgent)"},"labels":{"type":"array","description":"Label names"},"assignee_id":{"type":"string","description":"Assignee user ID"}},"required":["content"]},"requiredScopes":["data:read_write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update a Todoist task.","parameters":{"type":"object","properties":{"task_id":{"type":"string","description":"Task ID"},"content":{"type":"string","description":"Task content/title"},"description":{"type":"string","description":"Task description"},"due_string":{"type":"string","description":"Due date (e.g., \"tomorrow\", \"next Monday\")"},"priority":{"type":"integer","description":"Priority (1-4, where 4 is urgent)"},"labels":{"type":"array","description":"Label names"},"assignee_id":{"type":"string","description":"Assignee user ID"}},"required":["task_id"]},"requiredScopes":["data:read_write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.get","description":"Retrieve a single task from Todoist.","parameters":{"type":"object","properties":{"task_id":{"type":"string","description":"Task ID"}},"required":["task_id"]},"requiredScopes":["data:read_write"],"class":"read"},{"name":"tasks.list","description":"List tasks from a project or filter.","parameters":{"type":"object","properties":{"project_id":{"type":"string","description":"Filter by project ID"},"filter":{"type":"string","description":"Todoist filter query"},"limit":{"type":"integer","description":"Maximum number of tasks to return"}},"required":[]},"requiredScopes":["data:read_write"],"class":"read"},{"name":"tasks.complete","description":"Mark a task as completed.","parameters":{"type":"object","properties":{"task_id":{"type":"string","description":"Task ID"}},"required":["task_id"]},"requiredScopes":["data:read_write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.delete","description":"Delete a task.","parameters":{"type":"object","properties":{"task_id":{"type":"string","description":"Task ID"}},"required":["task_id"]},"requiredScopes":["data:read_write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"projects.list","description":"List all projects.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":["data:read_write"],"class":"read"},{"name":"projects.create","description":"Create a new project.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Project name"},"parent_id":{"type":"string","description":"Parent project ID"},"color":{"type":"string","description":"Project color"},"is_favorite":{"type":"boolean","description":"Whether the project is marked as favorite"},"view_style":{"type":"string","description":"Project view style (list or board)"}},"required":["name"]},"requiredScopes":["data:read_write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.delete","description":"Delete a project.","parameters":{"type":"object","properties":{"project_id":{"type":"string","description":"Project ID"}},"required":["project_id"]},"requiredScopes":["data:read_write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Add a comment to a task or project.","parameters":{"type":"object","properties":{"content":{"type":"string","description":"Comment content"},"task_id":{"type":"string","description":"Task ID to attach the comment to"},"project_id":{"type":"string","description":"Project ID to attach the comment to"}},"required":["content"]},"requiredScopes":["data:read_write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"labels.create","description":"Create a new label.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Label name"},"color":{"type":"string","description":"Label color"},"order":{"type":"integer","description":"Label order"},"is_favorite":{"type":"boolean","description":"Whether the label is marked as favorite"}},"required":["name"]},"requiredScopes":["data:read_write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"toggl-track","displayName":"Toggl Track","description":"Manage time entries, projects, clients, tasks, and tags in Toggl Track.","auth":{"kind":"api-key","hint":"Toggl Track API token."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"clients.create","description":"Create a new client.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"name":{"type":"string"},"external_reference":{"type":"string"},"notes":{"type":"string"}},"required":["workspace_id","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"clients.find","description":"Find clients in a workspace.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"status":{"type":"string"},"page":{"type":"integer"},"per_page":{"type":"integer"}},"required":["workspace_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.create","description":"Create a new project.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"name":{"type":"string"},"client_id":{"type":"integer"},"is_private":{"type":"boolean"},"active":{"type":"boolean"},"color":{"type":"string"},"rate":{"type":"number"},"fixed_fee":{"type":"number"},"start_date":{"type":"string"},"end_date":{"type":"string"}},"required":["workspace_id","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.find","description":"Find projects in a workspace.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"only_me":{"type":"boolean"},"only_templates":{"type":"boolean"},"page":{"type":"integer"},"per_page":{"type":"integer"}},"required":["workspace_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.create","description":"Create a new task.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"project_id":{"type":"integer"},"name":{"type":"string"},"description":{"type":"string"},"estimated_seconds":{"type":"integer"},"user_id":{"type":"integer"}},"required":["workspace_id","project_id","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.find","description":"Find tasks in a workspace.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"project_id":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"}},"required":["workspace_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tags.create","description":"Create a new tag.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"name":{"type":"string"}},"required":["workspace_id","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.find","description":"Find tags in a workspace.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"search_term":{"type":"string"}},"required":["workspace_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"time-entries.create","description":"Create a new time entry.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"description":{"type":"string"},"duration":{"type":"integer"},"start":{"type":"string"},"stop":{"type":"string"},"project_id":{"type":"integer"},"task_id":{"type":"integer"},"billable":{"type":"boolean"},"tag_ids":{"type":"array","items":{"type":"integer"}}},"required":["workspace_id","start","duration"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"time-entries.start","description":"Start a new time entry.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"description":{"type":"string"},"project_id":{"type":"integer"},"task_id":{"type":"integer"},"billable":{"type":"boolean"},"tag_ids":{"type":"array","items":{"type":"integer"}}},"required":["workspace_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"time-entries.stop","description":"Stop a running time entry.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"time_entry_id":{"type":"integer"}},"required":["workspace_id","time_entry_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"time-entries.find","description":"Find time entries in a workspace.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"before":{"type":"string"},"since":{"type":"integer"},"meta":{"type":"boolean"}},"required":["workspace_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"user.find","description":"Find a user by name or email.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"search_term":{"type":"string"}},"required":["workspace_id","search_term"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"clients.update","description":"Update an existing client.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"client_id":{"type":"integer"},"name":{"type":"string"},"external_reference":{"type":"string"},"notes":{"type":"string"}},"required":["workspace_id","client_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"clients.delete","description":"Delete a client.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"client_id":{"type":"integer"}},"required":["workspace_id","client_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.update","description":"Update an existing project.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"project_id":{"type":"integer"},"name":{"type":"string"},"client_id":{"type":"integer"},"is_private":{"type":"boolean"},"active":{"type":"boolean"},"color":{"type":"string"},"rate":{"type":"number"},"fixed_fee":{"type":"number"},"start_date":{"type":"string"},"end_date":{"type":"string"}},"required":["workspace_id","project_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.delete","description":"Delete a project.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"project_id":{"type":"integer"}},"required":["workspace_id","project_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"time-entries.delete","description":"Delete a time entry.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"time_entry_id":{"type":"integer"}},"required":["workspace_id","time_entry_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"totalcms","displayName":"Total CMS","description":"Content management system for modern websites","auth":{"kind":"api-key","hint":"Total CMS API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"posts.get_blog_post","description":"Get a blog post by slug.","parameters":{"type":"object","properties":{"slug":{"type":"string"}},"required":["slug"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"content.get_content","description":"Get content by permalink.","parameters":{"type":"object","properties":{"permalink":{"type":"string"}},"required":["permalink"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"posts.save_blog_post","description":"Create or update a blog post.","parameters":{"type":"object","properties":{"slug":{"type":"string"},"data":{"type":"object"}},"required":["slug","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"content.save_content","description":"Create or update content.","parameters":{"type":"object","properties":{"permalink":{"type":"string"},"data":{"type":"object"}},"required":["permalink","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.save_image","description":"Upload and save an image.","parameters":{"type":"object","properties":{"image":{"type":"string"},"alt":{"type":"string"}},"required":["image","alt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.save_blog_image","description":"Upload and save a blog post image.","parameters":{"type":"object","properties":{"image":{"type":"string"},"alt":{"type":"string"}},"required":["image","alt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.save_video","description":"Upload and save a video.","parameters":{"type":"object","properties":{"video":{"type":"string"},"title":{"type":"string"}},"required":["video"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.save_gallery","description":"Create or update a media gallery.","parameters":{"type":"object","properties":{"name":{"type":"string"},"items":{"type":"array"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.save_blog_gallery","description":"Create or update a blog post gallery.","parameters":{"type":"object","properties":{"name":{"type":"string"},"items":{"type":"array"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"data.save_file","description":"Upload and save a file.","parameters":{"type":"object","properties":{"filename":{"type":"string"},"file":{"type":"string"}},"required":["filename","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"data.save_text","description":"Save text data.","parameters":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"data.save_toggle","description":"Save a toggle/boolean value.","parameters":{"type":"object","properties":{"key":{"type":"string"},"enabled":{"type":"boolean"}},"required":["key","enabled"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"data.save_date","description":"Save a date value.","parameters":{"type":"object","properties":{"key":{"type":"string"},"date":{"type":"string"}},"required":["key","date"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"depot.save_depot","description":"Save to depot storage.","parameters":{"type":"object","properties":{"key":{"type":"string"},"data":{"type":"object"}},"required":["key","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.delete","description":"Delete a blog post by slug. Re-deleting an absent slug is treated as a no-op.","parameters":{"type":"object","properties":{"slug":{"type":"string"}},"required":["slug"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"content.delete","description":"Delete a content block by permalink. Re-deleting an absent permalink is a no-op.","parameters":{"type":"object","properties":{"permalink":{"type":"string"}},"required":["permalink"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.delete","description":"Delete a media asset by id. Re-deleting an absent id is a no-op.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.list","description":"List uploaded media assets. Optional type filter (images, videos, galleries, files).","parameters":{"type":"object","properties":{"type":{"type":"string","description":"Optional filter: images | videos | galleries | files."},"limit":{"type":"integer","minimum":1,"maximum":200},"offset":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"trello","displayName":"Trello","description":"Read and mutate Trello boards, lists, cards, checklists, and comments.","auth":{"kind":"api-key","hint":"Trello user token. Mint a developer API key at https://trello.com/app-key, then authorize a user token via https://trello.com/1/authorize?expiration=never&scope=read,write&response_type=token&key=<KEY>. Pass the developer key as the `key` argument on every invocation."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"boards.list","description":"List Trello boards visible to the authenticated member.","parameters":{"type":"object","properties":{"key":{"type":"string","description":"Trello developer API key."},"memberId":{"type":"string","description":"Member id or \"me\"."},"filter":{"type":"string","enum":["all","open","closed","members","organization","public","starred"]},"fields":{"type":"string","description":"Comma-separated board fields."}},"required":["key","memberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"boards.get","description":"Read a single board with optional nested lists/cards.","parameters":{"type":"object","properties":{"key":{"type":"string"},"boardId":{"type":"string"},"lists":{"type":"string","enum":["none","open","closed","all"]},"cards":{"type":"string","enum":["none","open","closed","all","visible"]},"fields":{"type":"string"}},"required":["key","boardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"boards.lists","description":"List the lists (columns) on a board.","parameters":{"type":"object","properties":{"key":{"type":"string"},"boardId":{"type":"string"},"filter":{"type":"string","enum":["all","open","closed","none"]},"fields":{"type":"string"}},"required":["key","boardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.cards","description":"List cards in a list.","parameters":{"type":"object","properties":{"key":{"type":"string"},"listId":{"type":"string"},"fields":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":1000}},"required":["key","listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cards.get","description":"Read a single card by id.","parameters":{"type":"object","properties":{"key":{"type":"string"},"cardId":{"type":"string"},"fields":{"type":"string"},"members":{"type":"boolean"},"checklists":{"type":"string","enum":["none","all"]}},"required":["key","cardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search","description":"Search across boards, cards, organizations, and members.","parameters":{"type":"object","properties":{"key":{"type":"string"},"query":{"type":"string"},"modelTypes":{"type":"string","description":"Comma-separated: actions,boards,cards,members,organizations."},"board_fields":{"type":"string"},"cards_limit":{"type":"integer","minimum":1,"maximum":1000}},"required":["key","query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cards.create","description":"Create a card in a list. Pass `idList` plus optional `name`, `desc`, `pos`, `due`, `idMembers`, `idLabels`.","parameters":{"type":"object","properties":{"key":{"type":"string"},"idList":{"type":"string"},"name":{"type":"string"},"desc":{"type":"string"},"pos":{"type":"string","description":"top, bottom, or a positive float."},"due":{"type":"string","description":"ISO 8601 due date."},"idMembers":{"type":"array","items":{"type":"string"}},"idLabels":{"type":"array","items":{"type":"string"}}},"required":["key","idList"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cards.update","description":"Update fields on an existing card.","parameters":{"type":"object","properties":{"key":{"type":"string"},"cardId":{"type":"string"},"name":{"type":"string"},"desc":{"type":"string"},"closed":{"type":"boolean"},"idList":{"type":"string"},"idBoard":{"type":"string"},"pos":{"type":"string"},"due":{"type":"string"},"dueComplete":{"type":"boolean"}},"required":["key","cardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"cards.move","description":"Move a card to a different list (and optionally position).","parameters":{"type":"object","properties":{"key":{"type":"string"},"cardId":{"type":"string"},"idList":{"type":"string"},"pos":{"type":"string"}},"required":["key","cardId","idList"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"cards.archive","description":"Archive (closed=true) a card without deleting it.","parameters":{"type":"object","properties":{"key":{"type":"string"},"cardId":{"type":"string"}},"required":["key","cardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"cards.delete","description":"Permanently delete a card.","parameters":{"type":"object","properties":{"key":{"type":"string"},"cardId":{"type":"string"}},"required":["key","cardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"cards.addComment","description":"Post a comment on a card.","parameters":{"type":"object","properties":{"key":{"type":"string"},"cardId":{"type":"string"},"text":{"type":"string"}},"required":["key","cardId","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cards.addLabel","description":"Attach an existing label to a card.","parameters":{"type":"object","properties":{"key":{"type":"string"},"cardId":{"type":"string"},"labelId":{"type":"string"}},"required":["key","cardId","labelId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cards.addMember","description":"Assign a Trello member to a card.","parameters":{"type":"object","properties":{"key":{"type":"string"},"cardId":{"type":"string"},"memberId":{"type":"string"}},"required":["key","cardId","memberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.create","description":"Create a list on a board.","parameters":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"idBoard":{"type":"string"},"pos":{"type":"string"}},"required":["key","name","idBoard"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.update","description":"Update a list (rename, archive via closed=true, reposition).","parameters":{"type":"object","properties":{"key":{"type":"string"},"listId":{"type":"string"},"name":{"type":"string"},"closed":{"type":"boolean"},"pos":{"type":"string"},"idBoard":{"type":"string"}},"required":["key","listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"boards.create","description":"Create a new Trello board.","parameters":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"desc":{"type":"string"},"idOrganization":{"type":"string"},"defaultLists":{"type":"boolean"},"prefs_permissionLevel":{"type":"string","enum":["private","org","public"]}},"required":["key","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"checklists.create","description":"Create a checklist on a card.","parameters":{"type":"object","properties":{"key":{"type":"string"},"idCard":{"type":"string"},"name":{"type":"string"},"pos":{"type":"string"}},"required":["key","idCard"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"checklists.addItem","description":"Add a check item to an existing checklist.","parameters":{"type":"object","properties":{"key":{"type":"string"},"checklistId":{"type":"string"},"name":{"type":"string"},"pos":{"type":"string"},"checked":{"type":"boolean"}},"required":["key","checklistId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.archive","description":"Archive a list (closed=true) without deleting it.","parameters":{"type":"object","properties":{"key":{"type":"string"},"listId":{"type":"string"}},"required":["key","listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"boards.update","description":"Update a board (rename, description, prefs, closed state).","parameters":{"type":"object","properties":{"key":{"type":"string"},"boardId":{"type":"string"},"name":{"type":"string"},"desc":{"type":"string"},"closed":{"type":"boolean"},"subscribed":{"type":"boolean"},"prefs/permissionLevel":{"type":"string","enum":["private","org","public"]},"prefs/background":{"type":"string"}},"required":["key","boardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"checklists.checkItem","description":"Mark a check item complete (or incomplete) on a card.","parameters":{"type":"object","properties":{"key":{"type":"string"},"cardId":{"type":"string"},"checkItemId":{"type":"string"},"state":{"type":"string","enum":["complete","incomplete"],"description":"Defaults to complete."}},"required":["key","cardId","checkItemId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"labels.create","description":"Create a label on a board.","parameters":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"color":{"type":"string","description":"Trello label color (yellow, purple, blue, red, green, orange, black, sky, pink, lime, null)."},"idBoard":{"type":"string"}},"required":["key","name","color","idBoard"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.create","description":"Create a webhook subscribing to events on a Trello model (board/card/list/member).","parameters":{"type":"object","properties":{"key":{"type":"string"},"callbackURL":{"type":"string","description":"Public HTTPS endpoint Trello will POST events to."},"idModel":{"type":"string","description":"Trello object id (board, card, list, member) to subscribe to."},"description":{"type":"string"},"active":{"type":"boolean"}},"required":["key","callbackURL","idModel"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"twenty","displayName":"Twenty","description":"Open-source CRM platform. Create and manage contacts, companies, and opportunities.","auth":{"kind":"api-key","hint":"Twenty API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.create","description":"Create a new contact in Twenty.","parameters":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"}},"required":["firstName","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.find","description":"Find a person by email or other criteria.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.update","description":"Update a contact in Twenty.","parameters":{"type":"object","properties":{"personId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"}},"required":["personId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"companies.create","description":"Create a new company in Twenty.","parameters":{"type":"object","properties":{"name":{"type":"string"},"domainName":{"type":"string"},"address":{"type":"string"},"employees":{"type":"integer"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"companies.find","description":"Find a company by name or domain.","parameters":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.update","description":"Update a company in Twenty.","parameters":{"type":"object","properties":{"companyId":{"type":"string"},"name":{"type":"string"},"domainName":{"type":"string"},"address":{"type":"string"},"employees":{"type":"integer"}},"required":["companyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"opportunities.create","description":"Create a new opportunity in Twenty.","parameters":{"type":"object","properties":{"name":{"type":"string"},"amount":{"type":"number"},"currency":{"type":"string"},"stage":{"type":"string"},"closeDate":{"type":"string"},"companyId":{"type":"string"}},"required":["name","companyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.update","description":"Update an opportunity in Twenty.","parameters":{"type":"object","properties":{"opportunityId":{"type":"string"},"name":{"type":"string"},"amount":{"type":"number"},"currency":{"type":"string"},"stage":{"type":"string"},"closeDate":{"type":"string"}},"required":["opportunityId","name","amount","currency","stage","closeDate"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.delete","description":"Delete an opportunity in Twenty.","parameters":{"type":"object","properties":{"opportunityId":{"type":"string"}},"required":["opportunityId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.delete","description":"Delete a person/contact in Twenty.","parameters":{"type":"object","properties":{"personId":{"type":"string"}},"required":["personId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"companies.delete","description":"Delete a company in Twenty.","parameters":{"type":"object","properties":{"companyId":{"type":"string"}},"required":["companyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.create","description":"Add a note to a contact, company, or opportunity in Twenty.","parameters":{"type":"object","properties":{"title":{"type":"string"},"body":{"type":"string"},"targetType":{"type":"string","description":"Type of object the note is attached to (person, company, opportunity)"},"targetId":{"type":"string","description":"ID of the object the note is attached to"}},"required":["title","body","targetType","targetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"twilio","displayName":"Twilio","description":"Send SMS messages, make outbound calls, manage messages and recordings.","auth":{"kind":"api-key","hint":"Twilio Account SID and Auth Token (format: AccountSid:AuthToken)."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"messages.send","description":"Send an SMS message to a phone number.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Recipient phone number in E.164 format."},"from":{"type":"string","description":"Sender phone number in E.164 format."},"body":{"type":"string","description":"Message body text."}},"required":["to","from","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.get","description":"Retrieve a specific message by SID.","parameters":{"type":"object","properties":{"messageSid":{"type":"string","description":"The unique identifier of the message."}},"required":["messageSid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.list","description":"List messages on the account, optionally filtered by date range.","parameters":{"type":"object","properties":{"dateSentAfter":{"type":"string","description":"ISO 8601 date to filter messages sent after."},"dateSentBefore":{"type":"string","description":"ISO 8601 date to filter messages sent before."},"limit":{"type":"integer","minimum":1,"maximum":1000,"default":50}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.make","description":"Make an outbound call to a phone number.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Recipient phone number in E.164 format."},"from":{"type":"string","description":"Caller phone number in E.164 format."},"url":{"type":"string","description":"URL containing TwiML instructions for the call."},"timeout":{"type":"integer","description":"Timeout in seconds to ring before hanging up."}},"required":["to","from","url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.get","description":"Retrieve details of a specific call by SID.","parameters":{"type":"object","properties":{"callSid":{"type":"string","description":"The unique identifier of the call."}},"required":["callSid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.list","description":"List calls on the account.","parameters":{"type":"object","properties":{"status":{"type":"string","enum":["queued","ringing","in-progress","completed","failed","busy","no-answer","canceled"],"description":"Filter calls by status."},"limit":{"type":"integer","minimum":1,"maximum":1000,"default":50}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"recordings.get","description":"Retrieve a recording by SID.","parameters":{"type":"object","properties":{"recordingSid":{"type":"string","description":"The unique identifier of the recording."}},"required":["recordingSid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"recordings.list","description":"List recordings on the account.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":1000,"default":50}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.delete","description":"Delete a message record (irreversible — purges the message and its body from logs).","parameters":{"type":"object","properties":{"messageSid":{"type":"string","description":"The unique identifier of the message (SM…)."}},"required":["messageSid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.cancel","description":"Cancel a queued or ringing call by setting its Status to canceled.","parameters":{"type":"object","properties":{"callSid":{"type":"string","description":"The unique identifier of the call (CA…)."}},"required":["callSid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.update","description":"Update an in-progress call — redirect TwiML, hang up, or mute via the Status field.","parameters":{"type":"object","properties":{"callSid":{"type":"string","description":"The unique identifier of the call (CA…)."},"Url":{"type":"string","description":"Optional new TwiML URL to redirect the call to."},"Method":{"type":"string","enum":["GET","POST"],"description":"HTTP method Twilio uses when fetching the new URL."},"Status":{"type":"string","enum":["canceled","completed"],"description":"Set \"completed\" to hang up an in-progress call."}},"required":["callSid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"numbers.list","description":"List IncomingPhoneNumbers on the account.","parameters":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"Optional exact-match filter on the E.164 number."},"limit":{"type":"integer","minimum":1,"maximum":1000,"default":50}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"numbers.update","description":"Update an IncomingPhoneNumber configuration (voice/SMS webhook URLs, friendly name).","parameters":{"type":"object","properties":{"phoneNumberSid":{"type":"string","description":"The unique identifier of the phone number resource (PN…)."},"FriendlyName":{"type":"string","description":"Optional friendly label."},"SmsUrl":{"type":"string","description":"Optional URL Twilio fetches when an SMS comes in."},"VoiceUrl":{"type":"string","description":"Optional URL Twilio fetches when a call comes in."}},"required":["phoneNumberSid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"twilio-sms","displayName":"Twilio SMS","description":"Send outbound SMS, look up phone numbers, and audit recent messages. Twilio's native Idempotency-Key prevents duplicate sends on retry.","auth":{"kind":"api-key","hint":"Paste your Twilio credentials as \"AccountSid:AuthToken\" (e.g. \"AC123…:abc…\"). API-key style \"AccountSid:KeySid:Secret\" is also accepted."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"send_sms","class":"mutation","description":"Send an SMS from the configured Twilio number to the supplied destination.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"to":{"type":"string","description":"E.164 destination, e.g. +14155551212"},"body":{"type":"string","description":"Message body (≤1600 chars after Twilio segments)."},"from":{"type":"string","description":"Optional E.164 sender; falls back to metadata.fromNumber."}},"required":["to","body"]}},{"name":"lookup_number","class":"read","description":"Validate a phone number and (if your account has Lookup) retrieve carrier metadata.","parameters":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"E.164 number to look up."},"includeCarrier":{"type":"boolean","default":false}},"required":["phoneNumber"]}},{"name":"find_recent_messages","class":"read","description":"Return up to `limit` recent Messages on the account, optionally filtered by To or From.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Optional E.164 filter on the To address."},"from":{"type":"string","description":"Optional E.164 filter on the From address."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}}}},{"name":"send_mms","class":"mutation","description":"Send an MMS message with one or more media URLs attached.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"to":{"type":"string","description":"E.164 destination."},"body":{"type":"string","description":"Optional MMS body (may be empty when only sending media)."},"from":{"type":"string","description":"Optional E.164 sender; falls back to metadata.fromNumber."},"mediaUrl":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"One or more media URLs Twilio should attach to the MMS."}},"required":["to","mediaUrl"]}},{"name":"send_whatsapp","class":"mutation","description":"Send a WhatsApp message via Twilio (To/From use the whatsapp: prefix).","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"to":{"type":"string","description":"E.164 destination (the connector prepends `whatsapp:` if missing)."},"body":{"type":"string","description":"WhatsApp message body."},"from":{"type":"string","description":"Optional sender; falls back to metadata.whatsappFromNumber or metadata.fromNumber."}},"required":["to","body"]}},{"name":"redact_message","class":"mutation","description":"Redact the body of an already-delivered SMS by SID. Sets Body=\"\" on the Message resource.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"messageSid":{"type":"string","description":"SID of the Message to redact (SM…)."}},"required":["messageSid"]}},{"name":"list_numbers","class":"read","description":"List the IncomingPhoneNumbers owned by the account.","parameters":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"Optional exact-match filter on the E.164 number."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}}}}]},{"kind":"twin-labs","displayName":"Twin Labs","description":"Automate web browsing tasks with AI-driven task execution.","auth":{"kind":"api-key","hint":"Twin Labs API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"browsing.start","description":"Start a new browsing task with a goal and initial URL.","parameters":{"type":"object","properties":{"startUrl":{"type":"string","description":"The URL where the browsing task should begin"},"goal":{"type":"string","description":"The goal or objective of the browsing task"}},"required":["startUrl","goal"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"browsing.stop","description":"Stop an in-progress browsing session.","parameters":{"type":"object","properties":{"sessionId":{"type":"string","description":"Identifier of the browsing session to stop."}},"required":["sessionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"browsing.get","description":"Fetch the current state of a browsing session, including status, current URL, and a screenshot URL.","parameters":{"type":"object","properties":{"sessionId":{"type":"string","description":"Identifier of the browsing session to inspect."}},"required":["sessionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"twitter","displayName":"Twitter","description":"Read and verify Twitter/X engagement (follows, tweets, likes, retweets, mentions) and post or reply to tweets.","auth":{"kind":"one_of","preferred":"oauth2","options":[{"kind":"oauth2","authorizationUrl":"https://twitter.com/i/oauth2/authorize","tokenUrl":"https://api.twitter.com/2/oauth2/token","scopes":["tweet.read","tweet.write","media.write","users.read","follows.read","like.write","like.read","offline.access"],"clientIdEnv":"TWITTER_OAUTH_CLIENT_ID","clientSecretEnv":"TWITTER_OAUTH_CLIENT_SECRET","tokenClientAuthMethod":"client_secret_basic"},{"kind":"api-key","hint":"Twitter/X OAuth 2.0 bearer token or app/user access token."}]},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tweets.create","description":"Post a new tweet.","parameters":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tweets.reply","description":"Reply to an existing tweet.","parameters":{"type":"object","properties":{"text":{"type":"string"},"replyTo":{"type":"string"}},"required":["text","replyTo"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tweets.delete","description":"Delete a tweet authored by the authenticated user.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Tweet id to delete."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tweets.like","description":"Like a tweet on behalf of the authenticated user.","parameters":{"type":"object","properties":{"user_id":{"type":"string","description":"Authenticated user id performing the like."},"tweet_id":{"type":"string","description":"Tweet id to like."}},"required":["user_id","tweet_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tweets.retweet","description":"Retweet a tweet on behalf of the authenticated user.","parameters":{"type":"object","properties":{"user_id":{"type":"string","description":"Authenticated user id performing the retweet."},"tweet_id":{"type":"string","description":"Tweet id to retweet."}},"required":["user_id","tweet_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"dms.send","description":"Send a direct message to a participant.","parameters":{"type":"object","properties":{"participant_id":{"type":"string","description":"Recipient user id."},"text":{"type":"string","description":"Message text body."}},"required":["participant_id","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.me","description":"Resolve the connected account (id, name, username) — anchors every other read. Pass user_fields (e.g. \"public_metrics,created_at\") to also fetch follower count and account age for anti-bot gating.","parameters":{"type":"object","properties":{"user_fields":{"type":"string","description":"Optional X `user.fields` selector, e.g. \"public_metrics,created_at\"."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.following","description":"List the accounts a user follows, for verifying follows and followed_by. Cursor with pagination_token. Gated behind a paid X API tier.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"User id whose following list to read (from users.me)."},"max_results":{"type":"integer","description":"Page size (1–1000)."},"pagination_token":{"type":"string","description":"Cursor from a prior page (meta.next_token)."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.by.username","description":"Resolve a handle to its numeric user id (and name) — for followed_by (resolve target → list users.following) and mentioned-with-target (resolve target → filter users.mentions by author_id). Returns { id, name, username }.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Twitter/X handle WITHOUT a leading @; resolves to a numeric user id."}},"required":["username"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.tweets","description":"List recent tweets authored by a user, for verifying tweeted. Hashtag filtering is applied by the caller. Cursor with pagination_token.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Author user id (from users.me)."},"max_results":{"type":"integer","description":"Page size (5–100)."},"pagination_token":{"type":"string","description":"Cursor from a prior page (meta.next_token)."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tweets.retweetedBy","description":"List the accounts that retweeted a tweet, for verifying retweeted. Cursor with pagination_token. Gated behind a paid X API tier.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Tweet id to inspect."},"max_results":{"type":"integer","description":"Page size (1–100)."},"pagination_token":{"type":"string","description":"Cursor from a prior page (meta.next_token)."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tweets.likingUsers","description":"List the accounts that liked a tweet, for verifying liked. Requires the like.read scope and a paid X API tier.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Tweet id to inspect."},"max_results":{"type":"integer","description":"Page size (1–100)."},"pagination_token":{"type":"string","description":"Cursor from a prior page (meta.next_token)."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.mentions","description":"List tweets that mention a user, for verifying mentioned. Author filtering is applied by the caller. Cursor with pagination_token.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Mentioned user id (from users.me)."},"max_results":{"type":"integer","description":"Page size (5–100)."},"pagination_token":{"type":"string","description":"Cursor from a prior page (meta.next_token)."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"typeform","displayName":"Typeform","description":"Read Typeform forms and responses, edit forms, and manage webhook subscriptions for response.received events.","auth":{"kind":"oauth2","authorizationUrl":"https://api.typeform.com/oauth/authorize","tokenUrl":"https://api.typeform.com/oauth/token","scopes":["forms:read","forms:write","responses:read","webhooks:read","webhooks:write","workspaces:read","accounts:read","offline"],"clientIdEnv":"TYPEFORM_OAUTH_CLIENT_ID","clientSecretEnv":"TYPEFORM_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.get","description":"Get the authenticated Typeform account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.list","description":"List forms in the connected workspace; supports pagination and search.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":200},"search":{"type":"string","description":"Substring filter against form titles."},"workspace_id":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.get","description":"Read a single form definition by id.","parameters":{"type":"object","properties":{"form_id":{"type":"string"}},"required":["form_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"responses.list","description":"List responses to a form; supports cursor-style pagination via since/until/before/after and the answered-fields filter.","parameters":{"type":"object","properties":{"form_id":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":1000},"since":{"type":"string","description":"ISO-8601 lower bound (inclusive)."},"until":{"type":"string","description":"ISO-8601 upper bound (exclusive)."},"before":{"type":"string","description":"Response token cursor — return responses submitted before this token."},"after":{"type":"string","description":"Response token cursor — return responses submitted after this token."},"included_response_ids":{"type":"string","description":"Comma-separated response tokens to include."},"completed":{"type":"boolean"},"sort":{"type":"string","description":"e.g. \"submitted_at,asc\" or \"submitted_at,desc\"."},"query":{"type":"string","description":"Free-text search across response answers."},"fields":{"type":"string","description":"Comma-separated answer field ids to include."}},"required":["form_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"responses.delete","description":"Delete one or more responses by response token. Irreversible — the responses are removed from analytics and exports.","parameters":{"type":"object","properties":{"form_id":{"type":"string"},"included_tokens":{"type":"string","description":"Comma-separated response tokens to delete."}},"required":["form_id","included_tokens"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.update","description":"Replace a Typeform form definition (PUT semantics — the body must be the complete form).","parameters":{"type":"object","properties":{"form_id":{"type":"string"},"fields":{"type":"object","description":"Complete form payload — title, fields[], welcome_screens, thankyou_screens, settings, theme, workspace, hidden, logic."}},"required":["form_id","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"webhooks.list","description":"List webhook subscriptions on a form.","parameters":{"type":"object","properties":{"form_id":{"type":"string"}},"required":["form_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"webhooks.get","description":"Read a single webhook subscription by tag.","parameters":{"type":"object","properties":{"form_id":{"type":"string"},"tag":{"type":"string","description":"Caller-chosen webhook identifier."}},"required":["form_id","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"webhooks.upsert","description":"Create or update a webhook subscription on a form. PUT against the tag is idempotent — repeat calls with the same tag overwrite the prior subscription.","parameters":{"type":"object","properties":{"form_id":{"type":"string"},"tag":{"type":"string"},"url":{"type":"string","description":"HTTPS endpoint Typeform should POST submissions to."},"enabled":{"type":"boolean"},"secret":{"type":"string","description":"Shared secret used to sign payloads via Typeform-Signature header."},"verify_ssl":{"type":"boolean"}},"required":["form_id","tag","url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Delete a webhook subscription by tag.","parameters":{"type":"object","properties":{"form_id":{"type":"string"},"tag":{"type":"string"}},"required":["form_id","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workspaces.list","description":"List workspaces the connected account can access.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":200},"search":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.create","description":"Create a new form. Body must be the complete form payload (title, fields[], settings, theme, workspace, ...).","parameters":{"type":"object","properties":{"fields":{"type":"object","description":"Full form payload — title, fields[], welcome_screens, thankyou_screens, settings, theme, workspace, hidden, logic."}},"required":["fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.delete","description":"Delete a form. Irreversible — wipes the form, its responses, and webhook subscriptions.","parameters":{"type":"object","properties":{"form_id":{"type":"string"}},"required":["form_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"themes.list","description":"List themes available to the connected account.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":200}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"images.create","description":"Upload an image used in forms. Provide either a base64-encoded `image` envelope or a remote `url`; `file_name` is required.","parameters":{"type":"object","properties":{"file_name":{"type":"string","description":"File name (with extension) Typeform should store under."},"image":{"type":"object","description":"Base64 image envelope: { value: <base64>, type: \"image/png\" }.","properties":{"value":{"type":"string"},"type":{"type":"string"}}},"url":{"type":"string","description":"Optional remote URL Typeform should fetch the image from (alternative to `image`)."}},"required":["file_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"typefully","displayName":"Typefully","description":"Write, schedule, and publish social media content across multiple platforms.","auth":{"kind":"api-key","hint":"Typefully API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"drafts.create","description":"Create a new social media draft.","parameters":{"type":"object","properties":{"text":{"type":"string"},"platforms":{"type":"array","items":{"type":"string"}},"draft_title":{"type":"string"},"reply_to_url":{"type":"string"}},"required":["text","platforms"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"drafts.createAdvanced","description":"Create a new social media draft with advanced options.","parameters":{"type":"object","properties":{"text":{"type":"string"},"platforms_json":{"type":"object"},"draft_title":{"type":"string"},"share":{"type":"boolean"},"publish_at":{"type":"string"}},"required":["text","platforms_json"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"drafts.get","description":"Get details of a specific draft.","parameters":{"type":"object","properties":{"draft_id":{"type":"string"}},"required":["draft_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"drafts.list","description":"List drafts with optional filtering and sorting.","parameters":{"type":"object","properties":{"status":{"type":"string"},"order_by":{"type":"string"},"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"drafts.delete","description":"Delete a draft.","parameters":{"type":"object","properties":{"draft_id":{"type":"string"}},"required":["draft_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"drafts.publishNow","description":"Publish a draft immediately.","parameters":{"type":"object","properties":{"draft_id":{"type":"string"}},"required":["draft_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"drafts.schedule","description":"Schedule a draft for publishing at a specific date and time.","parameters":{"type":"object","properties":{"draft_id":{"type":"string"},"schedule_at":{"type":"string"}},"required":["draft_id","schedule_at"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.upload","description":"Upload media file (image, video, GIF, or PDF) for use in drafts.","parameters":{"type":"object","properties":{"file":{"type":"string"}},"required":["file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"drafts.update","description":"Update an existing draft's content or scheduling fields.","parameters":{"type":"object","properties":{"draft_id":{"type":"string"},"text":{"type":"string"},"draft_title":{"type":"string"},"platforms":{"type":"array","items":{"type":"string"}},"schedule_at":{"type":"string"}},"required":["draft_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"drafts.unschedule","description":"Unschedule a previously scheduled draft.","parameters":{"type":"object","properties":{"draft_id":{"type":"string"}},"required":["draft_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"accounts.list","description":"List connected social accounts.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"media.delete","description":"Delete a previously uploaded media asset.","parameters":{"type":"object","properties":{"media_id":{"type":"string"}},"required":["media_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"umami","displayName":"Umami","description":"Privacy-focused, open-source web analytics. Query website stats, metrics, visitors, and send custom events.","auth":{"kind":"api-key","hint":"Umami API token or basic auth credentials (base64-encoded username:password)."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"websites.list","description":"List all websites in the Umami instance.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"website.stats","description":"Get website stats including pageviews, visitors, bounce rate, and session duration.","parameters":{"type":"object","properties":{"websiteId":{"type":"string","description":"The website ID."},"startDate":{"type":"string","description":"Start date (ISO 8601 format)."},"endDate":{"type":"string","description":"End date (ISO 8601 format)."},"unit":{"type":"string","description":"Group by unit: day, week, month, year."},"timezone":{"type":"string","description":"Timezone (e.g., Europe/Paris, UTC)."}},"required":["websiteId","startDate","endDate"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"website.metrics","description":"Get website metrics ranked by a specified metric type.","parameters":{"type":"object","properties":{"websiteId":{"type":"string","description":"The website ID."},"startDate":{"type":"string","description":"Start date (ISO 8601 format)."},"endDate":{"type":"string","description":"End date (ISO 8601 format)."},"type":{"type":"string","description":"Metric type: pageviews, visitors, bounce_rate, duration."},"limit":{"type":"integer","description":"Maximum number of results."}},"required":["websiteId","startDate","endDate","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"website.active_visitors","description":"Get the number of active visitors on a website right now.","parameters":{"type":"object","properties":{"websiteId":{"type":"string","description":"The website ID."}},"required":["websiteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"website.pageviews","description":"Get pageview data for a website.","parameters":{"type":"object","properties":{"websiteId":{"type":"string","description":"The website ID."},"startDate":{"type":"string","description":"Start date (ISO 8601 format)."},"endDate":{"type":"string","description":"End date (ISO 8601 format)."},"unit":{"type":"string","description":"Group by unit: day, week, month, year."},"limit":{"type":"integer","description":"Maximum number of results."}},"required":["websiteId","startDate","endDate"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"event.send","description":"Send a custom event or pageview to Umami.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Page URL or path."},"referrer":{"type":"string","description":"Referrer URL."},"eventName":{"type":"string","description":"Custom event name (optional; omit for pageview)."},"eventData":{"type":"object","description":"Additional event properties."},"title":{"type":"string","description":"Page title."},"hostname":{"type":"string","description":"Website hostname."},"language":{"type":"string","description":"User language."},"screenResolution":{"type":"string","description":"Screen resolution (WIDTHxHEIGHT)."},"userAgent":{"type":"string","description":"User agent string."}},"required":["url","hostname"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"websites.create","description":"Create a new tracked website.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Display name of the website."},"domain":{"type":"string","description":"Primary domain (e.g., example.com)."},"shareId":{"type":"string","description":"Optional public share token."},"teamId":{"type":"string","description":"Team owning the website."}},"required":["name","domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"websites.update","description":"Update settings on an existing website.","parameters":{"type":"object","properties":{"websiteId":{"type":"string","description":"The website ID."},"name":{"type":"string"},"domain":{"type":"string"},"shareId":{"type":"string"}},"required":["websiteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"websites.delete","description":"Delete a tracked website and its analytics data.","parameters":{"type":"object","properties":{"websiteId":{"type":"string","description":"The website ID."}},"required":["websiteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"teams.list","description":"List teams the authenticated user belongs to.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"upgradechat","displayName":"Upgrade.chat","description":"Manage contacts, subscriptions, invoices, and products in Upgrade.chat.","auth":{"kind":"api-key","hint":"Upgrade.chat API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.add_or_update","description":"Add or update a contact.","parameters":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"email1":{"type":"string"},"companyName":{"type":"string"},"mobilePhone":{"type":"string"}},"required":["firstName","lastName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.get","description":"Get contact details by ID.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.add_or_update","description":"Add or update a subscription.","parameters":{"type":"object","properties":{"productCode":{"type":"string"},"paymentPeriodType":{"type":"string"},"status":{"type":"string"},"contactId":{"type":"string"}},"required":["productCode","paymentPeriodType","status"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.create","description":"Create an invoice.","parameters":{"type":"object","properties":{"productCode":{"type":"string"},"paymentPeriodType":{"type":"string"},"status":{"type":"string"},"invoiceNo":{"type":"integer"},"date":{"type":"string"},"dueDate":{"type":"string"},"currencyId":{"type":"string"},"grandTotal":{"type":"number"},"invoiceDescription":{"type":"string"},"quantity":{"type":"integer"}},"required":["productCode","paymentPeriodType","status","invoiceNo","date","dueDate","currencyId","invoiceDescription","quantity"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.create","description":"Create a product.","parameters":{"type":"object","properties":{"name":{"type":"string"},"code":{"type":"string"},"productType":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"unit":{"type":"string"},"frequency":{"type":"string"}},"required":["name","code","productType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.cancel","description":"Cancel a recurring subscription.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string"},"reason":{"type":"string"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.update","description":"Update a product.","parameters":{"type":"object","properties":{"productId":{"type":"string"},"name":{"type":"string"},"code":{"type":"string"},"productType":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"unit":{"type":"string"},"frequency":{"type":"string"}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.delete","description":"Delete a product.","parameters":{"type":"object","properties":{"productId":{"type":"string"}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.refund","description":"Refund an invoice.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"},"amount":{"type":"number"},"reason":{"type":"string"}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"uscreen","displayName":"Uscreen","description":"Create users, assign access, and manage video monetization content.","auth":{"kind":"api-key","hint":"Uscreen API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.create","description":"Create a new user in Uscreen.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"The new user email address."},"first_name":{"type":"string","description":"The new user first name."},"last_name":{"type":"string","description":"The new user last name."},"password":{"type":"string","description":"The new user password."},"opted_in_for_news_and_updates":{"type":"boolean","description":"Whether the user opted in for news and updates."},"custom_fields":{"type":"object","description":"Custom fields defined in your storefront."}},"required":["email","first_name","last_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"access.assign","description":"Assign user access to content or courses in Uscreen.","parameters":{"type":"object","properties":{"user_id":{"type":"string","description":"The user ID to assign access to."},"product_id":{"type":"string","description":"The product or course ID to grant access to."},"perform_action_at":{"type":"string","description":"ISO 8601 datetime to schedule the access assignment."},"with_manual_billing":{"type":"boolean","description":"Whether to apply manual billing for offers."}},"required":["user_id","product_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.update","description":"Update an existing Uscreen user account.","parameters":{"type":"object","properties":{"user_id":{"type":"string","description":"The ID of the user to update."},"email":{"type":"string","description":"Updated email address."},"first_name":{"type":"string","description":"Updated first name."},"last_name":{"type":"string","description":"Updated last name."},"password":{"type":"string","description":"Updated password."},"opted_in_for_news_and_updates":{"type":"boolean","description":"Updated opt-in preference."},"custom_fields":{"type":"object","description":"Updated custom fields."}},"required":["user_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.delete","description":"Delete a Uscreen user account.","parameters":{"type":"object","properties":{"user_id":{"type":"string","description":"The ID of the user to delete."}},"required":["user_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"access.revoke","description":"Revoke a user's content or course access in Uscreen.","parameters":{"type":"object","properties":{"user_id":{"type":"string","description":"The user ID whose access is being revoked."},"product_id":{"type":"string","description":"The product or course ID to revoke."}},"required":["user_id","product_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.list","description":"List Uscreen users with optional pagination.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1,"description":"Page number."},"per_page":{"type":"integer","minimum":1,"maximum":100,"description":"Results per page."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"usergems","displayName":"UserGems","description":"Job-change and relationship tracking ingestion API. Add or remove contacts and accounts on watchlists so UserGems surfaces job-change and buying signals for them.","auth":{"kind":"api-key","hint":"API key requested via support@usergems.com. Sent as the X-Api-Key header."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.add","description":"Add a contact to your UserGems tracking list so job changes and signals are monitored. Email is required; many profile and custom signal fields are optional.","parameters":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"fullName":{"type":"string"},"company":{"type":"string"},"relationshipType":{"type":"string"},"linkedinUrl":{"type":"string"},"signal":{"type":"string"},"custom":{"type":"object"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.delete","description":"Remove a contact from your UserGems tracking list by email.","parameters":{"type":"object","properties":{"email":{"type":"string"},"relationshipType":{"type":"string"},"signal":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"accounts.add","description":"Add an account (company) for which you want to receive new-prospect and signal reports. Name and domain are required.","parameters":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"},"reportName":{"type":"string"},"signal":{"type":"string"},"salesforceId":{"type":"string"},"customId":{"type":"string"},"custom":{"type":"object"}},"required":["name","domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"accounts.delete","description":"Remove a previously added account by name and domain.","parameters":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"},"reportName":{"type":"string"},"signal":{"type":"string"},"salesforceId":{"type":"string"},"customId":{"type":"string"}},"required":["name","domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"validatedmails","displayName":"ValidatedMails","description":"Validate email addresses in real time and retrieve status, score, and domain-level deliverability signals.","auth":{"kind":"api-key","hint":"ValidatedMails API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"email.validate","description":"Validate an email address in real time and return status, score, and domain-level deliverability signals.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"The email address to validate."},"dnsTimeoutMs":{"type":"integer","description":"DNS timeout in milliseconds. Value is clamped between 200 and 5000."},"mode":{"type":"string","description":"HTTP method used for validation request.","enum":["smtp","dns"]}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"vapi","displayName":"Vapi","description":"AI voice agent platform. Create outbound calls, manage assistants, and retrieve call details.","auth":{"kind":"api-key","hint":"Vapi API key from your Vapi Dashboard."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.create","description":"Create an outbound call with Vapi.","parameters":{"type":"object","properties":{"assistantId":{"type":"string","description":"The ID of the assistant handling the call."},"phoneNumberId":{"type":"string","description":"The ID of the phone number making the call."},"customerNumber":{"type":"string","description":"The phone number to call (E.164 format)."},"name":{"type":"string","description":"Optional name for the call."},"assistantOverrides":{"type":"object","description":"Optional assistant configuration overrides."}},"required":["assistantId","phoneNumberId","customerNumber"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.get","description":"Retrieve details of a specific call.","parameters":{"type":"object","properties":{"callId":{"type":"string","description":"The unique identifier of the call."}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"assistants.update","description":"Update a Vapi assistant configuration.","parameters":{"type":"object","properties":{"assistantId":{"type":"string","description":"The ID of the assistant to update."},"firstMessage":{"type":"string","description":"The first message the assistant will say."},"instructions":{"type":"string","description":"System prompt or instructions for the assistant."},"model":{"type":"string","description":"Model name (e.g., gpt-4o)."},"provider":{"type":"string","description":"Model provider (e.g., openai)."},"endCallMessage":{"type":"string","description":"Message before ending the call."},"overrides":{"type":"object","description":"Additional UpdateAssistantDTO fields."}},"required":["assistantId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"calls.hangup","description":"End an active Vapi call.","parameters":{"type":"object","properties":{"callId":{"type":"string","description":"The unique identifier of the call to end."}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assistants.create","description":"Create a new Vapi voice assistant.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Display name of the assistant."},"firstMessage":{"type":"string","description":"The first message the assistant will say."},"instructions":{"type":"string","description":"System prompt or instructions for the assistant."},"model":{"type":"string","description":"Model name (e.g., gpt-4o)."},"provider":{"type":"string","description":"Model provider (e.g., openai)."},"endCallMessage":{"type":"string","description":"Message before ending the call."},"overrides":{"type":"object","description":"Additional CreateAssistantDTO fields."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assistants.delete","description":"Delete a Vapi assistant.","parameters":{"type":"object","properties":{"assistantId":{"type":"string","description":"The ID of the assistant to delete."}},"required":["assistantId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"phone-numbers.list","description":"List provisioned Vapi phone numbers.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum number of phone numbers to return."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"vbout","displayName":"VBOUT","description":"Manage contacts, tags, and email campaigns in VBOUT marketing automation platform for agencies.","auth":{"kind":"api-key","hint":"VBOUT API key from Settings. The connection must also store the per-account email for authentication."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.get","description":"Get a contact by email address.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.list","description":"List all contacts or search with filters.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Add a new contact to VBOUT.","parameters":{"type":"object","properties":{"email":{"type":"string"},"ipaddress":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"phone":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update an existing contact.","parameters":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"phone":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tags.add","description":"Add a tag to a contact.","parameters":{"type":"object","properties":{"email":{"type":"string"},"tagname":{"type":"string"}},"required":["email","tagname"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.remove","description":"Remove a tag from a contact.","parameters":{"type":"object","properties":{"email":{"type":"string"},"tagname":{"type":"string"}},"required":["email","tagname"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"lists.get","description":"Get list of email lists.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.create","description":"Create a new email list.","parameters":{"type":"object","properties":{"listname":{"type":"string"}},"required":["listname"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.create","description":"Create an email marketing campaign.","parameters":{"type":"object","properties":{"name":{"type":"string"},"subject":{"type":"string"},"fromName":{"type":"string"},"fromEmail":{"type":"string"},"replyTo":{"type":"string"},"lists":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"type":{"type":"string","enum":["standard","autoresponder"]}},"required":["name","subject","fromName","fromEmail","replyTo","lists","body","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.unsubscribe","description":"Unsubscribe a contact from all lists.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"social.messages.create","description":"Create a social media message.","parameters":{"type":"object","properties":{"message":{"type":"string"},"platforms":{"type":"array","items":{"type":"string"}}},"required":["message","platforms"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.delete","description":"Delete a contact from VBOUT.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email of the contact to delete."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.delete","description":"Delete an email list from VBOUT.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"ID of the list to delete."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.send","description":"Send a previously created email campaign.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"ID of the campaign to send."},"schedule":{"type":"string","description":"Optional ISO 8601 datetime to schedule the send."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.delete","description":"Delete an email marketing campaign from VBOUT.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"ID of the campaign to delete."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"vercel","displayName":"Vercel","description":"List Vercel projects and deployments, create and cancel deployments, manage project environment variables, and inspect domains for a connected Vercel account or team.","auth":{"kind":"oauth2","authorizationUrl":"https://vercel.com/integrations/install","tokenUrl":"https://api.vercel.com/v2/oauth/access_token","scopes":["user:read","team:read","project:read","project:read-write","deployment:read","deployment:read-write","env:read","env:read-write","domain:read"],"clientIdEnv":"VERCEL_OAUTH_CLIENT_ID","clientSecretEnv":"VERCEL_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"user.get","description":"Return the authenticated Vercel user (id, email, username, default team).","parameters":{"type":"object","properties":{}},"requiredScopes":["user:read"],"class":"read"},{"name":"teams.list","description":"List teams the authenticated identity belongs to. Pagination via `since` (createdAt cursor) and `limit`.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"since":{"type":"integer","description":"Unix-ms cursor; return teams created before this value."},"until":{"type":"integer","description":"Unix-ms cursor; return teams created after this value."}}},"requiredScopes":["team:read"],"class":"read"},{"name":"projects.list","description":"List projects visible to the authenticated identity (optionally scoped to a team).","parameters":{"type":"object","properties":{"teamId":{"type":"string","description":"Scope to a specific team id (e.g. \"team_xxx\")."},"limit":{"type":"integer","minimum":1,"maximum":100},"search":{"type":"string","description":"Substring match against project name."},"from":{"type":"integer","description":"Unix-ms pagination cursor returned by a prior page."}}},"requiredScopes":["project:read"],"class":"read"},{"name":"projects.get","description":"Read a single Vercel project by id or name.","parameters":{"type":"object","properties":{"idOrName":{"type":"string","description":"Project id (prj_…) or project name."},"teamId":{"type":"string"}},"required":["idOrName"]},"requiredScopes":["project:read"],"class":"read"},{"name":"projects.create","description":"Create a Vercel project. Name is required; framework + gitRepository optional.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Lowercase, hyphen-separated project name."},"framework":{"type":"string","description":"Vercel framework preset slug (e.g. \"nextjs\", \"vite\", \"astro\", \"remix\")."},"gitRepository":{"type":"object","description":"Link a Git repository at creation time (optional).","properties":{"type":{"type":"string","enum":["github","gitlab","bitbucket"]},"repo":{"type":"string","description":"owner/repo slug."}}},"publicSource":{"type":"boolean"},"rootDirectory":{"type":"string"},"buildCommand":{"type":"string"},"installCommand":{"type":"string"},"outputDirectory":{"type":"string"},"devCommand":{"type":"string"},"teamId":{"type":"string","description":"Scope to a specific team id (e.g. \"team_xxx\")."}},"required":["name"]},"requiredScopes":["project:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.delete","description":"Delete a Vercel project by id or name. Destructive: removes all deployments and aliases.","parameters":{"type":"object","properties":{"idOrName":{"type":"string"},"teamId":{"type":"string"}},"required":["idOrName"]},"requiredScopes":["project:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deployments.list","description":"List deployments, optionally filtered by project, state, target, or time range.","parameters":{"type":"object","properties":{"teamId":{"type":"string"},"projectId":{"type":"string","description":"Filter by Vercel project id (prj_…)."},"app":{"type":"string","description":"Filter by project name."},"state":{"type":"string","description":"Comma-separated deployment states.","enum":["BUILDING","ERROR","INITIALIZING","QUEUED","READY","CANCELED"]},"target":{"type":"string","enum":["production","preview"]},"limit":{"type":"integer","minimum":1,"maximum":100},"since":{"type":"integer","description":"Unix-ms; deployments created after this timestamp."},"until":{"type":"integer","description":"Unix-ms; deployments created before this timestamp."}}},"requiredScopes":["deployment:read"],"class":"read"},{"name":"deployments.get","description":"Read a single deployment by id (dpl_…) or alias URL.","parameters":{"type":"object","properties":{"idOrUrl":{"type":"string","description":"Deployment id (dpl_…) or alias (myapp.vercel.app)."},"teamId":{"type":"string"},"withGitRepoInfo":{"type":"boolean"}},"required":["idOrUrl"]},"requiredScopes":["deployment:read"],"class":"read"},{"name":"deployments.create","description":"Trigger a new deployment for a project (Git-linked redeploy or file upload).","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Project name to deploy under."},"project":{"type":"string","description":"Project id (prj_…) or name (alternative to `name`)."},"target":{"type":"string","enum":["production","staging"]},"gitSource":{"type":"object","description":"Trigger a Git-based deploy (e.g. {type:\"github\",ref:\"main\",repoId:123})."},"files":{"type":"array","description":"File manifest for file-upload deploys ({file,sha,size}[]).","items":{"type":"object"}},"deploymentId":{"type":"string","description":"When set, redeploys an existing deployment by id (rollback / promote)."},"teamId":{"type":"string"},"forceNew":{"type":"boolean","description":"Force a new build even if the source is unchanged."}},"required":["name"]},"requiredScopes":["deployment:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deployments.cancel","description":"Cancel an in-progress deployment by id. No-op upstream if the deployment is already terminal.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Deployment id (dpl_…)."},"teamId":{"type":"string"}},"required":["id"]},"requiredScopes":["deployment:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"env.list","description":"List environment variables on a project.","parameters":{"type":"object","properties":{"idOrName":{"type":"string"},"teamId":{"type":"string"},"decrypt":{"type":"boolean","description":"Return decrypted plaintext values (requires env:read-write scope)."}},"required":["idOrName"]},"requiredScopes":["env:read"],"class":"read"},{"name":"env.create","description":"Create one or more environment variables on a project.","parameters":{"type":"object","properties":{"idOrName":{"type":"string"},"teamId":{"type":"string"},"key":{"type":"string","description":"Variable key (uppercase, underscore-separated)."},"value":{"type":"string","description":"Variable value. Stored encrypted upstream."},"type":{"type":"string","enum":["system","secret","encrypted","plain","sensitive"]},"target":{"type":"array","description":"Environments this var applies to.","items":{"type":"string","enum":["production","preview","development"]}},"gitBranch":{"type":"string","description":"Optional preview-branch scope."},"comment":{"type":"string"}},"required":["idOrName","key","value","type","target"]},"requiredScopes":["env:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"env.delete","description":"Delete an environment variable from a project by env-var id.","parameters":{"type":"object","properties":{"idOrName":{"type":"string"},"envId":{"type":"string"},"teamId":{"type":"string"}},"required":["idOrName","envId"]},"requiredScopes":["env:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"domains.list","description":"List domains owned by the authenticated identity (or team).","parameters":{"type":"object","properties":{"teamId":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"since":{"type":"integer"},"until":{"type":"integer"}}},"requiredScopes":["domain:read"],"class":"read"},{"name":"domains.get","description":"Read a single domain by name (e.g. \"acme.com\").","parameters":{"type":"object","properties":{"domain":{"type":"string"},"teamId":{"type":"string"}},"required":["domain"]},"requiredScopes":["domain:read"],"class":"read"}]},{"kind":"videoask","displayName":"VideoAsk","description":"Manage VideoAsk forms, contacts, and responses. Create or update contacts, add/remove tags, and search forms.","auth":{"kind":"oauth2","authorizationUrl":"https://www.videoask.com/oauth/authorize","tokenUrl":"https://www.videoask.com/oauth/token","scopes":["contacts:write","contacts:read","forms:read"],"clientIdEnv":"VIDEOASK_OAUTH_CLIENT_ID","clientSecretEnv":"VIDEOASK_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.create","description":"Create a new contact in VideoAsk.","parameters":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"phone":{"type":"string"},"customFields":{"type":"object"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update an existing contact in VideoAsk.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"phone":{"type":"string"},"customFields":{"type":"object"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.tags.add","description":"Add a tag to a contact in VideoAsk.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"tag":{"type":"string"}},"required":["contactId","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.tags.remove","description":"Remove a tag from a contact in VideoAsk.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"tag":{"type":"string"}},"required":["contactId","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"forms.search","description":"Search and list VideoAsk forms.","parameters":{"type":"object","properties":{"search":{"type":"string"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.get","description":"Get details of a specific form.","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"responses.list","description":"List responses for a form.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.create","description":"Create a new VideoAsk form.","parameters":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"settings":{"type":"object"}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.update","description":"Update form configuration.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"settings":{"type":"object"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.delete","description":"Delete a form.","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"responses.delete","description":"Delete a response.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"responseId":{"type":"string"}},"required":["formId","responseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"vidlab7","displayName":"VidLab7","description":"Generate AI avatar videos with configurable scripts, voices, and styles.","auth":{"kind":"api-key","hint":"VidLab7 API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"videos.create","description":"Create an AI avatar video with a custom script and voice.","parameters":{"type":"object","properties":{"avatarId":{"type":"string"},"script":{"type":"string"},"voiceId":{"type":"string"},"webhookUrl":{"type":"string"},"similarity_boost":{"type":"number"},"use_speaker_boost":{"type":"boolean"},"style":{"type":"number"},"stability":{"type":"number"},"waitForCompletion":{"type":"boolean"}},"required":["avatarId","script","voiceId","webhookUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"vlm-run","displayName":"VLM Run","description":"Analyze images, videos, audio, and documents using visual AI. Extract data, detect objects, transcribe, and parse content.","auth":{"kind":"api-key","hint":"VLM Run API key from your account dashboard."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"analyze.image","description":"Analyze an image using visual AI to extract data and detect objects.","parameters":{"type":"object","properties":{"imageUrl":{"type":"string","description":"URL of the image to analyze"},"prompt":{"type":"string","description":"Optional analysis prompt or instruction"},"mode":{"type":"string","enum":["object-detection","ocr","general"],"description":"Analysis mode"}},"required":["imageUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"analyze.video","description":"Analyze a video file to extract frames, detect objects, and summarize content.","parameters":{"type":"object","properties":{"videoUrl":{"type":"string","description":"URL of the video to analyze"},"sampleRate":{"type":"integer","description":"Frame sampling rate (frames per second)"},"prompt":{"type":"string","description":"Optional analysis instruction"}},"required":["videoUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"analyze.audio","description":"Transcribe and analyze audio content.","parameters":{"type":"object","properties":{"audioUrl":{"type":"string","description":"URL of the audio file to analyze"},"language":{"type":"string","description":"Language code (e.g., en, es, fr)"},"extractEntities":{"type":"boolean","description":"Extract named entities from transcription"}},"required":["audioUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"analyze.document","description":"Extract text and structured data from documents (PDF, images, etc.).","parameters":{"type":"object","properties":{"documentUrl":{"type":"string","description":"URL of the document to parse"},"documentType":{"type":"string","enum":["pdf","image","mixed"],"description":"Document type"},"extractTables":{"type":"boolean","description":"Extract tables as structured data"}},"required":["documentUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"file.get","description":"Retrieve a previously analyzed file result.","parameters":{"type":"object","properties":{"fileId":{"type":"string","description":"ID of the analyzed file"}},"required":["fileId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.upload","description":"Upload a file by URL or inline base64 payload for later analysis. Returns the stored file id.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Public URL the API should fetch the file from."},"contentBase64":{"type":"string","description":"Inline base64-encoded file payload."},"filename":{"type":"string","description":"Filename to associate with the upload."},"contentType":{"type":"string","description":"MIME type of the upload."},"purpose":{"type":"string","description":"Optional purpose hint (e.g. analysis, training)."}},"required":["filename"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.delete","description":"Delete a previously-uploaded file. Idempotent: 404 is treated as success upstream.","parameters":{"type":"object","properties":{"fileId":{"type":"string","description":"ID of the file to delete."}},"required":["fileId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"jobs.list","description":"List analysis jobs, optionally filtered by status and paginated by cursor.","parameters":{"type":"object","properties":{"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"],"description":"Filter jobs by status."},"limit":{"type":"integer","description":"Maximum number of jobs to return (1-100)."},"cursor":{"type":"string","description":"Pagination cursor returned by a prior call."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobs.cancel","description":"Cancel a running analysis job. Idempotent for already-terminal jobs.","parameters":{"type":"object","properties":{"jobId":{"type":"string","description":"ID of the job to cancel."}},"required":["jobId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"vouchery-io","displayName":"Vouchery","description":"Vouchery is a voucher and gift card management platform.","auth":{"kind":"api-key","hint":"Vouchery API key."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"vouchers.find","description":"Find a voucher by code.","parameters":{"type":"object","properties":{"code":{"type":"string"}},"required":["code"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.create","description":"Create a customer in Vouchery.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"metadata":{"type":"object"}},"required":["identifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"vouchers.create","description":"Create a voucher (avoucher) in Vouchery.","parameters":{"type":"object","properties":{"code":{"type":"string"},"value":{"type":"number"},"expiresAt":{"type":"string"},"customerId":{"type":"string"}},"required":["code","value"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"vouchers.redeem","description":"Redeem a voucher by code. Optional customer_id attributes the redemption; optional amount partially redeems a value-bearing voucher.","parameters":{"type":"object","properties":{"code":{"type":"string"},"customer_id":{"type":"string"},"amount":{"type":"number"}},"required":["code"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"vouchers.void","description":"Void a voucher by code so it can no longer be redeemed. Optional reason is recorded with the void event.","parameters":{"type":"object","properties":{"code":{"type":"string"},"reason":{"type":"string"}},"required":["code"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"vtex","displayName":"VTEX","description":"Manage VTEX catalog including brands, products, SKUs, categories, clients, and orders.","auth":{"kind":"api-key","hint":"VTEX App Key and App Token with Host URL."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"brands.list","description":"Get a list of all brands.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"brands.get","description":"Get a brand by ID.","parameters":{"type":"object","properties":{"brandId":{"type":"integer","description":"The Brand ID"}},"required":["brandId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"brands.create","description":"Create a new brand.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Brand name"},"text":{"type":"string","description":"Brand text/description"},"keywords":{"type":"string","description":"Keywords for the brand"},"active":{"type":"boolean","description":"Is the brand active"},"score":{"type":"integer","description":"Score value"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"brands.update","description":"Update a brand.","parameters":{"type":"object","properties":{"brandId":{"type":"integer","description":"The Brand ID"},"name":{"type":"string","description":"Brand name"},"text":{"type":"string","description":"Brand text/description"},"keywords":{"type":"string","description":"Keywords for the brand"},"active":{"type":"boolean","description":"Is the brand active"},"score":{"type":"integer","description":"Score value"}},"required":["brandId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"brands.delete","description":"Delete a brand.","parameters":{"type":"object","properties":{"brandId":{"type":"integer","description":"The Brand ID"}},"required":["brandId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.get","description":"Get a product by ID.","parameters":{"type":"object","properties":{"productId":{"type":"integer","description":"The Product ID"}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.create","description":"Create a new product.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Product name"},"categoryId":{"type":"integer","description":"Category ID"},"brandId":{"type":"integer","description":"Brand ID"},"description":{"type":"string","description":"Product description"},"refId":{"type":"string","description":"Reference ID"},"isVisible":{"type":"boolean","description":"Is the product visible"},"descriptionShort":{"type":"string","description":"Short description"},"releaseDate":{"type":"string","description":"Release date"},"keyWords":{"type":"string","description":"Keywords"},"isActive":{"type":"boolean","description":"Is the product active"},"taxCode":{"type":"string","description":"Tax code"},"metaTagDescription":{"type":"string","description":"Meta tag description"},"showWithoutStock":{"type":"boolean","description":"Show without stock"}},"required":["name","categoryId","brandId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.update","description":"Update a product.","parameters":{"type":"object","properties":{"productId":{"type":"integer","description":"The Product ID"},"name":{"type":"string","description":"Product name"},"categoryId":{"type":"integer","description":"Category ID"},"brandId":{"type":"integer","description":"Brand ID"},"description":{"type":"string","description":"Product description"},"refId":{"type":"string","description":"Reference ID"},"isVisible":{"type":"boolean","description":"Is the product visible"},"descriptionShort":{"type":"string","description":"Short description"},"releaseDate":{"type":"string","description":"Release date"},"keyWords":{"type":"string","description":"Keywords"},"isActive":{"type":"boolean","description":"Is the product active"},"taxCode":{"type":"string","description":"Tax code"},"metaTagDescription":{"type":"string","description":"Meta tag description"},"showWithoutStock":{"type":"boolean","description":"Show without stock"}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"categories.get","description":"Get a category by ID.","parameters":{"type":"object","properties":{"categoryId":{"type":"integer","description":"The Category ID"}},"required":["categoryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"skus.list","description":"Get SKUs for a product.","parameters":{"type":"object","properties":{"productId":{"type":"integer","description":"The Product ID"}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"skus.create","description":"Create a new SKU.","parameters":{"type":"object","properties":{"productId":{"type":"integer","description":"Product ID"},"name":{"type":"string","description":"SKU name"},"packaging":{"type":"object","description":"Packaging dimensions","properties":{"height":{"type":"number","description":"Package Height"},"length":{"type":"number","description":"Package Length"},"width":{"type":"number","description":"Package Width"},"weightKg":{"type":"number","description":"Package Weight (Kg)"}}},"isKit":{"type":"boolean","description":"Is Kit"}},"required":["productId","name","packaging"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.get","description":"Get an order by ID.","parameters":{"type":"object","properties":{"orderId":{"type":"integer","description":"The Order ID"}},"required":["orderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.list","description":"Get a list of orders.","parameters":{"type":"object","properties":{"fromYear":{"type":"integer","description":"From year"},"toYear":{"type":"string","description":"To year"},"fromMonth":{"type":"string","description":"From month"},"toMonth":{"type":"string","description":"To month"},"fromDay":{"type":"string","description":"From day"},"toDay":{"type":"string","description":"To day"},"limit":{"type":"integer","description":"Result limit"}},"required":["fromYear","toYear"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"clients.get","description":"Get a client by ID.","parameters":{"type":"object","properties":{"clientId":{"type":"integer","description":"The Client ID"}},"required":["clientId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"clients.list","description":"Get a list of clients.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Result limit"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.delete","description":"Delete a product.","parameters":{"type":"object","properties":{"productId":{"type":"integer","description":"The Product ID"}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"categories.create","description":"Create a new category.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Category name"},"fatherCategoryId":{"type":"integer","description":"Parent category ID"},"title":{"type":"string","description":"Category page title"},"description":{"type":"string","description":"Category description"},"keywords":{"type":"string","description":"Keywords"},"isActive":{"type":"boolean","description":"Whether the category is active"},"showInStoreFront":{"type":"boolean","description":"Show in store front"},"showBrandFilter":{"type":"boolean","description":"Show brand filter"},"activeStoreFrontLink":{"type":"boolean","description":"Active store front link"},"globalCategoryId":{"type":"integer","description":"Global category ID"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"skus.update","description":"Update an SKU.","parameters":{"type":"object","properties":{"skuId":{"type":"integer","description":"The SKU ID"},"name":{"type":"string","description":"SKU name"},"productId":{"type":"integer","description":"Product ID"},"isActive":{"type":"boolean","description":"Is the SKU active"},"packagedHeight":{"type":"number","description":"Packaged Height"},"packagedLength":{"type":"number","description":"Packaged Length"},"packagedWidth":{"type":"number","description":"Packaged Width"},"packagedWeightKg":{"type":"number","description":"Packaged Weight (Kg)"},"isKit":{"type":"boolean","description":"Is Kit"}},"required":["skuId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"orders.cancel","description":"Cancel an order.","parameters":{"type":"object","properties":{"orderId":{"type":"string","description":"The Order ID"},"reason":{"type":"string","description":"Cancellation reason"}},"required":["orderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"vtiger","displayName":"VTiger","description":"Search, create, update, and delete records in VTiger CRM.","auth":{"kind":"api-key","hint":"VTiger instance URL, username, and access key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.search","description":"Search records in VTiger using filter criteria.","parameters":{"type":"object","properties":{"fields":{"type":"object","description":"Search filter fields"},"limit":{"type":"integer","description":"Maximum number of records to return"}},"required":["fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.get","description":"Get a specific record from VTiger.","parameters":{"type":"object","properties":{"recordId":{"type":"string","description":"The record ID"}},"required":["recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.create","description":"Create a new record in VTiger.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Record fields and values"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Update an existing record in VTiger.","parameters":{"type":"object","properties":{"recordId":{"type":"string","description":"The record ID"},"data":{"type":"object","description":"Fields and values to update"}},"required":["recordId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.delete","description":"Delete a record from VTiger.","parameters":{"type":"object","properties":{"recordId":{"type":"string","description":"The record ID"}},"required":["recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.query","description":"Query records using VTiger query language.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"VTiger query statement"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.assign","description":"Reassign a record to another user.","parameters":{"type":"object","properties":{"recordId":{"type":"string","description":"The record ID"},"assigned_user_id":{"type":"string","description":"The user the record is reassigned to"}},"required":["recordId","assigned_user_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.convert","description":"Convert lead to contact/opportunity.","parameters":{"type":"object","properties":{"recordId":{"type":"string","description":"The lead record ID to convert"},"targetModule":{"type":"string","description":"Target module (Contacts, Potentials)"},"data":{"type":"object","description":"Conversion field map"}},"required":["recordId","targetModule"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.upload","description":"Upload a document attached to a record.","parameters":{"type":"object","properties":{"recordId":{"type":"string","description":"The record to attach to"},"filename":{"type":"string","description":"The file name"},"content":{"type":"string","description":"Base64-encoded file content"},"contentType":{"type":"string","description":"Document content type"}},"required":["recordId","filename","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Add a comment to a record.","parameters":{"type":"object","properties":{"recordId":{"type":"string","description":"The record ID"},"comment":{"type":"string","description":"The comment body"}},"required":["recordId","comment"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"wafeq","displayName":"Wafeq","description":"Cloud accounting software for invoicing, bills, expenses, and tax reporting (ZATCA, UAE FTA compliance).","auth":{"kind":"api-key","hint":"Wafeq API key from account settings."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.create","description":"Create a contact (customer or supplier) in Wafeq.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Business name or full name."},"relationship":{"type":"string","enum":["customer","supplier","both"],"description":"Type of contact."},"email":{"type":"string","description":"Contact email address."},"phone":{"type":"string","description":"Contact phone number."},"tax_registration_number":{"type":"string","description":"VAT or tax ID."},"address":{"type":"string","description":"Street address."},"city":{"type":"string","description":"City name."},"postal_code":{"type":"string","description":"Postal or ZIP code."},"country":{"type":"string","description":"Two-letter ISO country code (e.g., AE, SA, US)."},"external_id":{"type":"string","description":"Your internal reference ID for this contact."}},"required":["name","relationship"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.find","description":"Search contacts by keyword or reference ID.","parameters":{"type":"object","properties":{"keyword":{"type":"string","description":"Search term to match against contact names and emails."},"external_id":{"type":"string","description":"Filter by your internal reference ID."},"limit":{"type":"integer","description":"Max results (default 50, max 200).","minimum":1,"maximum":200}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"invoices.create","description":"Create a full invoice with line items for a customer.","parameters":{"type":"object","properties":{"invoice_number":{"type":"string","description":"Unique invoice number (e.g., INV-2024-001)."},"invoice_date":{"type":"string","description":"Invoice date (ISO format: YYYY-MM-DD)."},"invoice_due_date":{"type":"string","description":"Due date (ISO format: YYYY-MM-DD)."},"contact_id":{"type":"string","description":"ID of the customer contact."},"description":{"type":"string","description":"Line item description."},"unit_price":{"type":"number","description":"Sale price per unit."},"status":{"type":"string","enum":["draft","authorized"],"description":"Draft = editable, not in books. Authorized = posted to books."}},"required":["invoice_number","invoice_date","invoice_due_date","contact_id","description","unit_price"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.simplified","description":"Create a simplified invoice (single-line, quick entry).","parameters":{"type":"object","properties":{"invoice_number":{"type":"string"},"invoice_date":{"type":"string","description":"ISO format YYYY-MM-DD."},"invoice_due_date":{"type":"string","description":"ISO format YYYY-MM-DD."},"contact_id":{"type":"string"},"unit_price":{"type":"number"},"status":{"type":"string","enum":["draft","authorized"]}},"required":["invoice_number","invoice_date","invoice_due_date","contact_id","unit_price"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.report.tax","description":"Report an invoice to tax authority (ZATCA/UAE FTA).","parameters":{"type":"object","properties":{"invoice_id":{"type":"string","description":"ID of the invoice to report."}},"required":["invoice_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.download.pdf","description":"Download an invoice as PDF.","parameters":{"type":"object","properties":{"invoice_id":{"type":"string","description":"ID of the invoice."},"file_name":{"type":"string","description":"Optional custom file name for the PDF."}},"required":["invoice_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bills.create","description":"Create a bill (purchase) from a supplier.","parameters":{"type":"object","properties":{"bill_number":{"type":"string","description":"Unique bill number (e.g., BILL-2024-001)."},"bill_date":{"type":"string","description":"Date on the bill (ISO format: YYYY-MM-DD)."},"bill_due_date":{"type":"string","description":"Due date (ISO format: YYYY-MM-DD)."},"contact_id":{"type":"string","description":"ID of the supplier contact."},"description":{"type":"string","description":"Line item description."},"unit_cost":{"type":"number","description":"Cost per unit."},"status":{"type":"string","enum":["draft","authorized"]},"prices_include_tax":{"type":"boolean","description":"Whether prices include tax."},"reference":{"type":"string","description":"Optional reference (e.g., project name)."},"order_number":{"type":"string","description":"Optional PO number."},"notes":{"type":"string","description":"Internal notes."}},"required":["bill_number","bill_date","bill_due_date","contact_id","description","unit_cost"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"credits.create","description":"Create a credit note.","parameters":{"type":"object","properties":{"credit_note_number":{"type":"string","description":"Unique credit note number (e.g., CN-2024-001)."},"credit_note_date":{"type":"string","description":"Date of credit note (ISO format: YYYY-MM-DD)."},"contact_id":{"type":"string","description":"ID of the contact."},"description":{"type":"string","description":"Line item description."},"amount":{"type":"number","description":"Credit amount."}},"required":["credit_note_number","credit_note_date","contact_id","description","amount"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"quotes.create","description":"Create a quote (sales proposal).","parameters":{"type":"object","properties":{"quote_number":{"type":"string","description":"Unique quote number (e.g., QT-2024-001)."},"quote_date":{"type":"string","description":"Quote date (ISO format: YYYY-MM-DD)."},"contact_id":{"type":"string","description":"ID of the customer contact."},"description":{"type":"string","description":"Line item description."},"unit_price":{"type":"number","description":"Price per unit."},"purchase_order":{"type":"string","description":"Optional customer PO number."}},"required":["quote_number","quote_date","contact_id","description","unit_price"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"quotes.convert","description":"Convert a quote to an invoice.","parameters":{"type":"object","properties":{"quote_id":{"type":"string","description":"ID of the quote to convert."},"invoice_number":{"type":"string","description":"Number for the new invoice."},"invoice_date":{"type":"string","description":"Invoice date (ISO format: YYYY-MM-DD)."}},"required":["quote_id","invoice_number","invoice_date"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payments.record","description":"Record a payment received from a customer or payment made to supplier.","parameters":{"type":"object","properties":{"type":{"type":"string","enum":["customer_payment","supplier_payment"],"description":"Payment type."},"target_id":{"type":"string","description":"ID of the document (invoice, bill, or credit note)."},"amount":{"type":"number","description":"Amount applied to the document."},"amount_to_pcy":{"type":"number","description":"Amount in the payment currency."},"date":{"type":"string","description":"Payment date (ISO format: YYYY-MM-DD)."},"payment_fees":{"type":"number","description":"Optional bank/card fees."}},"required":["type","target_id","amount","amount_to_pcy","date"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"items.create","description":"Create a catalog item (product or service).","parameters":{"type":"object","properties":{"sku":{"type":"string","description":"SKU or product code."},"description":{"type":"string","description":"Item description."},"unit_price":{"type":"number","description":"Sale price per unit."},"unit_cost":{"type":"number","description":"Purchase cost per unit."},"revenue_account":{"type":"string","description":"Advanced: account ID for sales revenue."},"expense_account":{"type":"string","description":"Advanced: account ID for purchase expense."},"revenue_tax_rate":{"type":"string","description":"Advanced: tax rate ID for sales."},"purchase_tax_rate":{"type":"string","description":"Advanced: tax rate ID for purchases."},"is_tracked_inventory":{"type":"boolean","description":"Track stock levels."},"is_active":{"type":"boolean","description":"Item is active and can be added to invoices."}},"required":["description"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"items.list","description":"List catalog items.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Max results to return."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.delete","description":"Delete a contact (customer or supplier).","parameters":{"type":"object","properties":{"contact_id":{"type":"string","description":"ID of the contact to delete."}},"required":["contact_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.delete","description":"Delete or void an invoice.","parameters":{"type":"object","properties":{"invoice_id":{"type":"string","description":"ID of the invoice to delete or void."}},"required":["invoice_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bills.delete","description":"Delete a bill.","parameters":{"type":"object","properties":{"bill_id":{"type":"string","description":"ID of the bill to delete."}},"required":["bill_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"items.delete","description":"Delete a catalog item.","parameters":{"type":"object","properties":{"item_id":{"type":"string","description":"ID of the item to delete."}},"required":["item_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"accounts.list","description":"List chart of accounts, optionally filtered by type and payment capability.","parameters":{"type":"object","properties":{"classification":{"type":"string","enum":["revenue","expense","asset","liability","equity"],"description":"Filter by account type."},"is_payment_enabled":{"type":"string","enum":["true","false"],"description":"Payment-enabled (bank/cash/card) accounts only."},"created_after":{"type":"string","description":"Filter accounts created on or after this date (ISO format: YYYY-MM-DD)."},"created_before":{"type":"string","description":"Filter accounts created on or before this date (ISO format: YYYY-MM-DD)."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"warmly","displayName":"Warmly","description":"List identified website visitors and visiting accounts from your Warmly workspace via its agent-tools API.","auth":{"kind":"api-key","hint":"Per-organization API key from the Warmly admin UI. Sent as the Authorization: Bearer header; organizationId must be included in each request body."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tools.list","description":"Discover the available agent tools and their input JSON schemas for your workspace.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"visitors.list","description":"List identified people who visited your website, with optional filters and pagination. This is a billed read executed via the tool-execution endpoint.","parameters":{"type":"object","properties":{"organizationId":{"type":"string","description":"The organization the API key is issued for."},"timeWindow":{"type":"string","description":"Lookback window: past_day (default) or past_week."},"take":{"type":"integer","description":"Number of results to return, 1-500 (default 25)."},"offset":{"type":"integer","description":"Pagination offset."},"searchTerm":{"type":"string","description":"Substring match on name, email, or company."}},"required":["organizationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"accounts.list","description":"List company-level aggregations of accounts that visited your website. Billed read executed via the tool-execution endpoint.","parameters":{"type":"object","properties":{"organizationId":{"type":"string","description":"The organization the API key is issued for."},"timeWindow":{"type":"string","description":"Lookback window: past_day (default) or past_week."},"take":{"type":"integer","description":"Number of results to return, 1-500."}},"required":["organizationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false}]},{"kind":"weaviate","displayName":"Weaviate","description":"Manage Weaviate vector-database schemas (collections), CRUD individual objects, run vector / hybrid / BM25 search via GraphQL, and batch-insert objects against a Weaviate Cloud or self-hosted cluster.","auth":{"kind":"api-key","hint":"Weaviate Cloud cluster API key. Create one under the cluster details page at https://console.weaviate.cloud. Self-hosted clusters must enable the api-key auth module."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"schema.list","description":"List every collection (class) currently defined on the cluster, with its full property schema and vectorizer config.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"schema.get","description":"Fetch the schema definition for a single collection (class) by name.","parameters":{"type":"object","properties":{"className":{"type":"string","description":"Weaviate class / collection name (capitalised by convention)."}},"required":["className"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"schema.create","description":"Create a new collection (class) with the supplied property + vectorizer config. The body must be a Weaviate class definition object (class, vectorizer, properties, …).","parameters":{"type":"object","properties":{"class":{"type":"string"},"description":{"type":"string"},"vectorizer":{"type":"string","description":"Vectorizer module id, e.g. text2vec-openai, text2vec-cohere, none."},"moduleConfig":{"type":"object"},"vectorIndexType":{"type":"string"},"vectorIndexConfig":{"type":"object"},"properties":{"type":"array","items":{"type":"object"},"description":"Ordered property list — each item is { name, dataType[], description?, indexFilterable?, indexSearchable?, moduleConfig? }."},"invertedIndexConfig":{"type":"object"},"replicationConfig":{"type":"object"},"shardingConfig":{"type":"object"},"multiTenancyConfig":{"type":"object"}},"required":["class"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"schema.delete","description":"Delete a collection (class) and every object stored under it. Irreversible.","parameters":{"type":"object","properties":{"className":{"type":"string"}},"required":["className"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"objects.list","description":"List objects in a collection. Supports limit/offset/after-cursor pagination and the `include=vector,classification` parameter.","parameters":{"type":"object","properties":{"className":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":10000},"offset":{"type":"integer","minimum":0},"after":{"type":"string","description":"Cursor — UUID of the last object from the previous page."},"include":{"type":"string","description":"Comma-separated extras to inline: vector, classification, featureProjection."}},"required":["className"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"objects.get","description":"Fetch a single object by UUID within a collection. Pass include=vector to inline the embedding.","parameters":{"type":"object","properties":{"className":{"type":"string"},"id":{"type":"string","description":"Object UUID (v3 or v5)."},"include":{"type":"string"}},"required":["className","id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"objects.create","description":"Insert one object. Body must include `class` and `properties`; pass `vector` to skip server-side vectorization, or `id` to assign a deterministic UUID (the recommended dedupe path).","parameters":{"type":"object","properties":{"class":{"type":"string"},"id":{"type":"string","description":"Optional deterministic UUID — when supplied, repeat inserts on the same UUID return 422 instead of creating duplicates."},"properties":{"type":"object"},"vector":{"type":"array","items":{"type":"number"}},"vectors":{"type":"object","description":"Named-vector map for collections configured with multiple vector spaces."},"tenant":{"type":"string","description":"Tenant id for multi-tenant collections."}},"required":["class","properties"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"objects.update","description":"Merge-update an object: properties supplied in the body overwrite their counterparts, untouched properties are preserved (PATCH semantics).","parameters":{"type":"object","properties":{"className":{"type":"string"},"id":{"type":"string"},"properties":{"type":"object"},"vector":{"type":"array","items":{"type":"number"}},"vectors":{"type":"object"}},"required":["className","id","properties"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"objects.replace","description":"Replace an object in place (PUT semantics): every property must be present in the body, omitted properties are cleared.","parameters":{"type":"object","properties":{"className":{"type":"string"},"id":{"type":"string"},"properties":{"type":"object"},"vector":{"type":"array","items":{"type":"number"}},"vectors":{"type":"object"}},"required":["className","id","properties"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"objects.delete","description":"Delete a single object by UUID.","parameters":{"type":"object","properties":{"className":{"type":"string"},"id":{"type":"string"}},"required":["className","id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"graphql.query","description":"Run an arbitrary GraphQL query against the cluster. Vector search, hybrid search, BM25, aggregations, and `Explore` are all expressed as GraphQL queries — the caller composes the query string.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"GraphQL query string. Example: `{ Get { Article(nearText: { concepts: [\"AI\"] }, limit: 5) { title _additional { id distance } } } }`."},"variables":{"type":"object"},"operationName":{"type":"string"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"batch.objects.create","description":"Insert a batch of objects in one round-trip. Body is `{ objects: [...] }` where each item matches the single-object body. The server returns per-item success/error; the caller must inspect the result array.","parameters":{"type":"object","properties":{"objects":{"type":"array","description":"Up to ~100 objects per request (cluster-configurable). Each item carries class, properties, optional id/vector/vectors/tenant.","items":{"type":"object"}},"consistencyLevel":{"type":"string","description":"ONE | QUORUM | ALL — overrides the cluster default."}},"required":["objects"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"batch.objects.delete","description":"Delete every object in a collection matching a where-filter. Body is `{ match: { class, where } }`. Returns a summary of matched / deleted / failed counts.","parameters":{"type":"object","properties":{"className":{"type":"string"},"where":{"type":"object","description":"Weaviate where-filter operator tree (path, operator, value*)."},"output":{"type":"string","description":"minimal | verbose — verbose lists per-object outcomes."},"dryRun":{"type":"boolean"},"consistencyLevel":{"type":"string"}},"required":["className","where"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"meta.get","description":"Fetch cluster metadata: version, hostname, enabled modules and their configs. Useful for capability discovery.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"nodes.list","description":"Return per-node cluster status: name, status, version, shard counts. Useful for health and rebalancing dashboards.","parameters":{"type":"object","properties":{"output":{"type":"string","description":"minimal | verbose."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"classes.update","description":"Update a class/collection schema in place. Body is a full class definition object; non-mutable settings (vectorizer, properties) must match the existing class — only invertedIndexConfig, replicationConfig, vectorIndexConfig and description are practically mutable.","parameters":{"type":"object","properties":{"className":{"type":"string"},"class":{"type":"string","description":"Must equal className."},"description":{"type":"string"},"vectorIndexConfig":{"type":"object"},"invertedIndexConfig":{"type":"object"},"replicationConfig":{"type":"object"},"shardingConfig":{"type":"object"},"multiTenancyConfig":{"type":"object"}},"required":["className","class"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"schema.shards","description":"List shards for a class with their READY/READONLY/INDEXING status. Used to drive rebalancing and read-only failover decisions.","parameters":{"type":"object","properties":{"className":{"type":"string"},"tenant":{"type":"string","description":"Tenant id for multi-tenant collections."}},"required":["className"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"backups.create","description":"Create a backup snapshot to a configured backend (filesystem / s3 / gcs / azure). Body carries backup id and optional include/exclude class lists. The backup_id is the caller-supplied dedupe key.","parameters":{"type":"object","properties":{"backend":{"type":"string","description":"Backup backend module id, e.g. filesystem, s3, gcs, azure."},"id":{"type":"string","description":"Caller-chosen backup id; lowercase letters/digits/_-."},"include":{"type":"array","items":{"type":"string"}},"exclude":{"type":"array","items":{"type":"string"}},"config":{"type":"object","description":"Backend-specific overrides (e.g. chunkSize)."}},"required":["backend","id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"backups.restore","description":"Restore a previously-created backup snapshot. Specify backend + id; optional include/exclude narrows the restore scope.","parameters":{"type":"object","properties":{"backend":{"type":"string"},"id":{"type":"string"},"include":{"type":"array","items":{"type":"string"}},"exclude":{"type":"array","items":{"type":"string"}},"config":{"type":"object"},"nodeMapping":{"type":"object","description":"Map original node names to current cluster nodes."}},"required":["backend","id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"webflow","displayName":"Webflow","description":"Read Webflow sites, collections, pages, forms, and form submissions, and create, update, delete, or publish CMS items through the Webflow Data API v2.","auth":{"kind":"oauth2","authorizationUrl":"https://webflow.com/oauth/authorize","tokenUrl":"https://api.webflow.com/oauth/access_token","scopes":["sites:read","cms:read","cms:write","pages:read","forms:read"],"clientIdEnv":"WEBFLOW_OAUTH_CLIENT_ID","clientSecretEnv":"WEBFLOW_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"sites.list","description":"List Webflow sites the connected workspace can access.","parameters":{"type":"object","properties":{}},"requiredScopes":["sites:read"],"class":"read"},{"name":"sites.get","description":"Read a single Webflow site by ID.","parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Webflow site ID."}},"required":["siteId"]},"requiredScopes":["sites:read"],"class":"read"},{"name":"collections.list","description":"List CMS collections defined on a Webflow site.","parameters":{"type":"object","properties":{"siteId":{"type":"string"}},"required":["siteId"]},"requiredScopes":["cms:read"],"class":"read"},{"name":"collections.get","description":"Fetch a Webflow CMS collection, including its field definitions.","parameters":{"type":"object","properties":{"collectionId":{"type":"string"}},"required":["collectionId"]},"requiredScopes":["cms:read"],"class":"read"},{"name":"items.list","description":"List items in a Webflow CMS collection. Pagination is offset-based; `name` and `slug` filter on those reserved fields.","parameters":{"type":"object","properties":{"collectionId":{"type":"string"},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":100},"name":{"type":"string","description":"Filter on the reserved `name` field (exact match)."},"slug":{"type":"string","description":"Filter on the reserved `slug` field (exact match)."}},"required":["collectionId"]},"requiredScopes":["cms:read"],"class":"read"},{"name":"items.get","description":"Fetch a single Webflow CMS item by collection + item ID.","parameters":{"type":"object","properties":{"collectionId":{"type":"string"},"itemId":{"type":"string"}},"required":["collectionId","itemId"]},"requiredScopes":["cms:read"],"class":"read"},{"name":"items.create","description":"Create a CMS item in a Webflow collection. `fieldData` carries the per-field values keyed by collection field slug; reserved fields like `name` and `slug` live alongside custom fields.","parameters":{"type":"object","properties":{"collectionId":{"type":"string"},"fieldData":{"type":"object","description":"Field-slug keyed values for the new item, e.g. `{ name: \"Post\", slug: \"post\" }`.","additionalProperties":true},"isArchived":{"type":"boolean","description":"Create the item archived. Defaults to false."},"isDraft":{"type":"boolean","description":"Create the item as draft (unpublished). Defaults to false."}},"required":["collectionId","fieldData"]},"requiredScopes":["cms:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"items.update","description":"Update a CMS item in a Webflow collection. Webflow does not support optimistic concurrency on the Data API; concurrent edits last-writer-wins.","parameters":{"type":"object","properties":{"collectionId":{"type":"string"},"itemId":{"type":"string"},"fieldData":{"type":"object","description":"Field-slug keyed values to overwrite on the item.","additionalProperties":true},"isArchived":{"type":"boolean"},"isDraft":{"type":"boolean"}},"required":["collectionId","itemId","fieldData"]},"requiredScopes":["cms:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"items.delete","description":"Delete a CMS item from a Webflow collection.","parameters":{"type":"object","properties":{"collectionId":{"type":"string"},"itemId":{"type":"string"}},"required":["collectionId","itemId"]},"requiredScopes":["cms:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"items.publish","description":"Publish one or more staged CMS items live to the connected Webflow site. Items remain in their collection but become visible on the published site.","parameters":{"type":"object","properties":{"collectionId":{"type":"string"},"itemIds":{"type":"array","description":"Item IDs in the collection to publish.","items":{"type":"string"},"minItems":1}},"required":["collectionId","itemIds"]},"requiredScopes":["cms:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"items.unpublish","description":"Unpublish one or more CMS items from the live Webflow site. Items remain in their collection but are removed from the published view.","parameters":{"type":"object","properties":{"collectionId":{"type":"string"},"itemIds":{"type":"array","description":"Item IDs in the collection to unpublish.","items":{"type":"string"},"minItems":1}},"required":["collectionId","itemIds"]},"requiredScopes":["cms:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.create","description":"Create a CMS collection on a Webflow site. `displayName` is the human-readable label, `singularName` is the per-item noun, `slug` (optional) sets the URL/api slug.","parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Webflow site ID that owns the new collection."},"displayName":{"type":"string","description":"Display name of the collection."},"singularName":{"type":"string","description":"Singular noun for an item in the collection."},"slug":{"type":"string","description":"Optional collection slug — auto-generated from displayName if omitted."}},"required":["siteId","displayName","singularName"]},"requiredScopes":["cms:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.delete","description":"Delete a CMS collection from a Webflow site. All items in the collection are removed.","parameters":{"type":"object","properties":{"collectionId":{"type":"string"}},"required":["collectionId"]},"requiredScopes":["cms:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sites.publish","description":"Publish a Webflow site to its domains. `publishToWebflowSubdomain` toggles the *.webflow.io staging URL; `customDomains` is an array of domain IDs (from `sites.get`) to publish to. At least one target must be supplied.","parameters":{"type":"object","properties":{"siteId":{"type":"string"},"publishToWebflowSubdomain":{"type":"boolean","description":"Publish to the *.webflow.io staging subdomain. Defaults to false."},"customDomains":{"type":"array","description":"Custom domain IDs (see Site.customDomains[].id) to publish to.","items":{"type":"string"}}},"required":["siteId"]},"requiredScopes":["sites:read","cms:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pages.list","description":"List static pages defined on a Webflow site.","parameters":{"type":"object","properties":{"siteId":{"type":"string"},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":100}},"required":["siteId"]},"requiredScopes":["pages:read"],"class":"read"},{"name":"forms.list","description":"List forms defined on a Webflow site.","parameters":{"type":"object","properties":{"siteId":{"type":"string"},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":100}},"required":["siteId"]},"requiredScopes":["forms:read"],"class":"read"},{"name":"forms.submissions","description":"List form submissions for a Webflow form.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":100}},"required":["formId"]},"requiredScopes":["forms:read"],"class":"read"}]},{"kind":"webhook","displayName":"Webhook (custom URL)","description":"Fire signed HTTP POSTs from your agent to any URL you control. The escape hatch when there's no native connector — receive the agent's intent, run your own logic, return a result.","auth":{"kind":"hmac"},"category":"webhook","defaultConsistencyModel":"advisory","capabilities":[{"name":"post_event","class":"mutation","description":"Send a JSON event to the configured webhook URL. The receiver SHOULD return 200 on accept and 409 on conflict (the agent will offer alternatives if you include them in the response).","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","additionalProperties":true,"description":"Whatever JSON the operator declared at connect time. The DataSource.metadata.requestSchema is the source of truth at runtime."}},{"name":"fetch_state","class":"read","description":"GET the configured webhook URL with the agent-supplied query params. Returns whatever JSON the receiver responds with.","parameters":{"type":"object","additionalProperties":true}}]},{"kind":"webscraping-ai","displayName":"WebScraping AI","description":"Scrape websites and extract data using WebScraping AI.","auth":{"kind":"api-key","hint":"WebScraping AI API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"page.scrapeText","description":"Scrape text content from a web page.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"URL of the page to scrape."},"renderJs":{"type":"boolean","description":"Whether to render JavaScript."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"page.scrapeHtml","description":"Scrape the full HTML structure of a web page.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"URL of the page to scrape."},"renderJs":{"type":"boolean","description":"Whether to render JavaScript."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"data.extract","description":"Extract structured data from a web page given a prompt.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"URL of the page to analyze."},"question":{"type":"string","description":"Natural language question about the page content."},"renderJs":{"type":"boolean","description":"Whether to render JavaScript."}},"required":["url","question"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"account.info","description":"Retrieve account information and usage statistics.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"what-converts","displayName":"WhatConverts","description":"Fetch, search, and manage leads in WhatConverts CRM.","auth":{"kind":"api-key","hint":"WhatConverts API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"leads.list","description":"List leads with optional filtering by date range, type, source, and other criteria.","parameters":{"type":"object","properties":{"from_date":{"type":"string","description":"Start date for the export range in YYYY-MM-DD format."},"to_date":{"type":"string","description":"End date for the export range in YYYY-MM-DD format."},"lead_type":{"type":"string","description":"Filter leads by their type."},"per_page":{"type":"integer","description":"Number of leads to fetch per page (max 1000)."},"no_of_pages":{"type":"integer","description":"The number of pages to retrieve (max 100)."},"referring_source":{"type":"string","description":"Filter leads by source."},"referring_medium":{"type":"string","description":"Filter leads by medium."},"referring_campaign":{"type":"string","description":"Filter leads by campaign."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.getByEmail","description":"Retrieve a lead by email address.","parameters":{"type":"object","properties":{"email_address":{"type":"string","description":"Find a lead by their email address."}},"required":["email_address"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.create","description":"Create a new lead in WhatConverts.","parameters":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"},"phone_number":{"type":"string"},"company_name":{"type":"string"},"notes":{"type":"string"},"send_notification":{"type":"boolean","description":"Set to true to send a new lead notification email."},"quote_value":{"type":"number","description":"The monetary value of the quote associated with the lead."},"sales_value":{"type":"number","description":"The monetary value of the sale associated with the lead."},"quotable":{"type":"string","description":"Indicates if the lead is quotable."}},"required":["first_name","last_name","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update","description":"Update an existing lead in WhatConverts.","parameters":{"type":"object","properties":{"lead_id":{"type":"string","description":"The ID of the lead to update."},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"},"phone_number":{"type":"string"},"company_name":{"type":"string"},"notes":{"type":"string"},"quote_value":{"type":"number","description":"The monetary value of the quote associated with the lead."},"sales_value":{"type":"number","description":"The monetary value of the sale associated with the lead."},"quotable":{"type":"string","description":"Indicates if the lead is quotable."}},"required":["lead_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"leads.delete","description":"Delete a lead.","parameters":{"type":"object","properties":{"lead_id":{"type":"string","description":"The ID of the lead to delete."}},"required":["lead_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.qualify","description":"Update qualified/quotable/quote-value fields on an existing lead.","parameters":{"type":"object","properties":{"lead_id":{"type":"string","description":"The ID of the lead to qualify."},"quotable":{"type":"string","description":"Indicates if the lead is quotable."},"quote_value":{"type":"number","description":"The monetary value of the quote associated with the lead."},"quality_score":{"type":"string","description":"The qualification quality score for the lead."}},"required":["lead_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"accounts.list","description":"List accounts/profiles.","parameters":{"type":"object","properties":{"per_page":{"type":"integer","description":"Number of accounts to fetch per page."},"page":{"type":"integer","description":"The page number to retrieve."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.list","description":"List account users.","parameters":{"type":"object","properties":{"per_page":{"type":"integer","description":"Number of users to fetch per page."},"page":{"type":"integer","description":"The page number to retrieve."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"whatsapp","displayName":"WhatsApp Business","description":"Send messages, media, and templates via WhatsApp Business API.","auth":{"kind":"api-key","hint":"WhatsApp Business System User Access Token."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"messages.send","description":"Send a text message via WhatsApp.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Recipient phone number"},"text":{"type":"string","description":"Message text"},"businessAccountId":{"type":"string","description":"Business Account ID"}},"required":["to","text","businessAccountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.send","description":"Send media (image, audio, video, document) via WhatsApp.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Recipient phone number"},"type":{"type":"string","enum":["image","audio","video","document"],"description":"Media type"},"media":{"type":"string","description":"Media URL"},"caption":{"type":"string","description":"Caption for the media"},"filename":{"type":"string","description":"Filename (for documents)"},"businessAccountId":{"type":"string","description":"Business Account ID"}},"required":["to","type","media","businessAccountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"template.send","description":"Send a pre-approved template message via WhatsApp.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Recipient phone number"},"templateName":{"type":"string","description":"Name of the template"},"language":{"type":"string","description":"Template language code (e.g., en, es)"},"parameters":{"type":"array","description":"Template parameter values"},"businessAccountId":{"type":"string","description":"Business Account ID"}},"required":["to","templateName","language","businessAccountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.reply","description":"Reply to a specific WhatsApp message in-thread by quoting the original message id.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Recipient phone number"},"text":{"type":"string","description":"Reply text body"},"replyToMessageId":{"type":"string","description":"WAMID of the message to reply to"},"businessAccountId":{"type":"string","description":"Business Account ID"}},"required":["to","text","replyToMessageId","businessAccountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.react","description":"React to a specific WhatsApp message with an emoji. Pass an empty emoji to remove an existing reaction.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Recipient phone number"},"messageId":{"type":"string","description":"WAMID of the message to react to"},"emoji":{"type":"string","description":"Emoji to react with (empty string removes existing reaction)"},"businessAccountId":{"type":"string","description":"Business Account ID"}},"required":["to","messageId","emoji","businessAccountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.delete","description":"Delete a previously sent WhatsApp message by id.","parameters":{"type":"object","properties":{"messageId":{"type":"string","description":"WAMID of the message to delete"},"businessAccountId":{"type":"string","description":"Business Account ID"}},"required":["messageId","businessAccountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.list","description":"List contacts associated with the WhatsApp Business Account.","parameters":{"type":"object","properties":{"businessAccountId":{"type":"string","description":"Business Account ID"},"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Maximum number of contacts to return"}},"required":["businessAccountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"whatsapp-business","displayName":"WhatsApp Business","description":"Send text and template messages from a verified WhatsApp Business number, and read your approved message templates. Advisory surface — WhatsApp sends are append-only.","auth":{"kind":"oauth2","authorizationUrl":"https://www.facebook.com/v21.0/dialog/oauth","tokenUrl":"https://graph.facebook.com/v21.0/oauth/access_token","scopes":["whatsapp_business_messaging","whatsapp_business_management","business_management"],"clientIdEnv":"WHATSAPP_BUSINESS_OAUTH_CLIENT_ID","clientSecretEnv":"WHATSAPP_BUSINESS_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"advisory","capabilities":[{"name":"send_text_message","class":"mutation","description":"Send a free-form text message from the connected WABA number. Outside the 24h customer-service window, Meta will reject — use send_template_message instead.","cas":"none","externalEffect":true,"requiredScopes":["whatsapp_business_messaging"],"parameters":{"type":"object","properties":{"to":{"type":"string","description":"E.164 destination, e.g. +14155551212."},"body":{"type":"string","description":"Message body (≤4096 chars)."},"previewUrl":{"type":"boolean","description":"Render a link preview if body contains a URL.","default":false}},"required":["to","body"]}},{"name":"send_template_message","class":"mutation","description":"Send a pre-approved Meta message template. Required for outbound contact outside the 24h customer-service window.","cas":"none","externalEffect":true,"requiredScopes":["whatsapp_business_messaging"],"parameters":{"type":"object","properties":{"to":{"type":"string","description":"E.164 destination."},"template":{"type":"string","description":"Name of the approved template."},"language":{"type":"string","description":"BCP-47 language code, e.g. en_US.","default":"en_US"},"components":{"type":"array","description":"Optional Meta template components array (header/body/button parameter substitutions)."}},"required":["to","template"]}},{"name":"list_message_templates","class":"read","description":"List approved message templates for the connected WhatsApp Business Account.","requiredScopes":["whatsapp_business_management"],"parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200,"default":50},"status":{"type":"string","description":"Optional filter by template status (APPROVED, PENDING, REJECTED)."}}}},{"name":"get_business_phone_number","class":"read","description":"Return the verified display name, quality rating, and verification status of the connected phone number.","requiredScopes":["whatsapp_business_management"],"parameters":{"type":"object","properties":{}}},{"name":"media.upload","class":"mutation","description":"Upload media (image, audio, video, document) to the connected phone number for later use as a message attachment. Returns the Meta media ID.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["whatsapp_business_messaging"],"parameters":{"type":"object","properties":{"dataBase64":{"type":"string","description":"Raw media bytes, base64-encoded."},"mimeType":{"type":"string","description":"MIME type of the media, e.g. image/jpeg, audio/ogg."},"filename":{"type":"string","description":"Optional filename hint (recommended for documents)."}},"required":["dataBase64","mimeType"]}},{"name":"templates.create","class":"mutation","description":"Submit a new message template for Meta approval. Components follow the Cloud API message_templates schema.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["whatsapp_business_management"],"parameters":{"type":"object","properties":{"name":{"type":"string","description":"Template name (lowercase, snake_case, ≤512 chars)."},"language":{"type":"string","description":"BCP-47 language code, e.g. en_US."},"category":{"type":"string","description":"Template category (MARKETING, UTILITY, AUTHENTICATION)."},"components":{"type":"array","description":"Template components array (header/body/footer/buttons)."}},"required":["name","language","category","components"]}},{"name":"templates.delete","class":"mutation","description":"Delete a message template by name (and optional hsm_id to delete a specific language variant).","cas":"native-idempotency","externalEffect":true,"requiredScopes":["whatsapp_business_management"],"parameters":{"type":"object","properties":{"name":{"type":"string","description":"Template name to delete."},"hsmId":{"type":"string","description":"Optional template ID to delete a specific language variant only."}},"required":["name"]}},{"name":"messages.mark-read","class":"mutation","description":"Mark an incoming WhatsApp message as read (sends the blue tick to the sender).","cas":"native-idempotency","externalEffect":true,"requiredScopes":["whatsapp_business_messaging"],"parameters":{"type":"object","properties":{"messageId":{"type":"string","description":"WAMID of the incoming message to mark as read."}},"required":["messageId"]}}]},{"kind":"whatsscale","displayName":"WhatsScale","description":"Send WhatsApp messages, manage contacts, and automate conversations via WAHA.","auth":{"kind":"api-key","hint":"WhatsScale API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.create","description":"Create a CRM contact.","parameters":{"type":"object","properties":{"phone":{"type":"string"},"name":{"type":"string"},"tags":{"type":"string"}},"required":["phone"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.get","description":"Get a CRM contact by ID.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.findByPhone","description":"Find a CRM contact by phone number.","parameters":{"type":"object","properties":{"phone":{"type":"string"}},"required":["phone"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.update","description":"Update a CRM contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"name":{"type":"string"},"tags":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.delete","description":"Delete a CRM contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.list","description":"List CRM contacts.","parameters":{"type":"object","properties":{"search":{"type":"string"},"limit":{"type":"integer"},"page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.addTag","description":"Add a tag to a CRM contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"tag":{"type":"string"}},"required":["contactId","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.removeTag","description":"Remove a tag from a CRM contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"tag":{"type":"string"}},"required":["contactId","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"messages.sendText","description":"Send a text message to a contact.","parameters":{"type":"object","properties":{"recipient":{"type":"string"},"text":{"type":"string"},"chatType":{"type":"string"}},"required":["recipient","text","chatType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.sendImage","description":"Send an image to a contact.","parameters":{"type":"object","properties":{"recipient":{"type":"string"},"imageUrl":{"type":"string"},"chatType":{"type":"string"}},"required":["recipient","imageUrl","chatType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.sendVideo","description":"Send a video to a contact.","parameters":{"type":"object","properties":{"recipient":{"type":"string"},"videoUrl":{"type":"string"},"chatType":{"type":"string"}},"required":["recipient","videoUrl","chatType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.sendDocument","description":"Send a document to a contact.","parameters":{"type":"object","properties":{"recipient":{"type":"string"},"documentUrl":{"type":"string"},"filename":{"type":"string"},"caption":{"type":"string"},"chatType":{"type":"string"}},"required":["recipient","documentUrl","chatType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"whatsapp.check","description":"Check if a number is registered on WhatsApp.","parameters":{"type":"object","properties":{"phone":{"type":"string"}},"required":["phone"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"wiza","displayName":"Wiza","description":"Real-time contact enrichment that reveals a person's work/personal email and phone from a LinkedIn URL, email, or name plus company.","auth":{"kind":"api-key","hint":"API key from Wiza account settings. Sent as the Authorization: Bearer header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"individual_reveal.create","description":"Start a real-time individual reveal to enrich one contact's email and phone from a LinkedIn URL, email, or name plus company/domain. Consumes credits.","parameters":{"type":"object","properties":{"individual_reveal":{"type":"object","description":"Contact identifiers: full_name + company or domain, OR email, OR linkedin (profile URL)."},"enrichment_level":{"type":"string","description":"One of none, partial, phone, or full."},"email_options":{"type":"object","description":"Object with accept_work and accept_personal booleans."},"phone_options":{"type":"object","description":"Phone enrichment options."}},"required":["individual_reveal","enrichment_level"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"individual_reveal.get","description":"Retrieve the status and revealed contact data of an individual reveal by its id.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"The individual reveal id returned by individual_reveal.create."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"list.create","description":"Create a list to enrich up to 2500 profiles in bulk with email and phone data. Consumes credits.","parameters":{"type":"object","properties":{"list":{"type":"object","description":"List config including name, enrichment_level, email_options, and items (array of up to 2500 profiles)."}},"required":["list"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"credits.get","description":"Get the account's remaining email, phone, export, and API credit balances.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"wonderchat","displayName":"Wonderchat","description":"Interact with Wonderchat chatbots: ask questions, manage pages and tags.","auth":{"kind":"api-key","hint":"Wonderchat API key from your account settings."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"question.ask","description":"Ask a question to a Wonderchat chatbot.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The ID of your chatbot"},"chatlogId":{"type":"string","description":"The ID of your chat session"},"question":{"type":"string","description":"The question to ask the chatbot"},"context":{"type":"string","description":"Additional custom context about the chat session"},"contextUrl":{"type":"string","description":"URL of the page for additional context"}},"required":["chatbotId","chatlogId","question"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"page.add","description":"Add a webpage to a Wonderchat chatbot for training.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The ID of your chatbot"},"urls":{"type":"array","items":{"type":"string"},"description":"List of webpage URLs to add"},"sessionCookie":{"type":"string","description":"Session cookie for crawling sites behind login"}},"required":["chatbotId","urls"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tag.add","description":"Add a tag to a Wonderchat chatbot.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The ID of your chatbot"},"tags":{"type":"object","description":"Tags to add to the chatbot"}},"required":["chatbotId","tags"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tag.remove","description":"Remove a tag from a Wonderchat chatbot.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The ID of your chatbot"},"tagKey":{"type":"string","description":"The tag key to remove"}},"required":["chatbotId","tagKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"page.remove","description":"Remove a previously trained page from a Wonderchat chatbot by page id.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The ID of your chatbot"},"pageId":{"type":"string","description":"The ID of the page to remove"}},"required":["chatbotId","pageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bot.train","description":"Trigger a retrain of the Wonderchat chatbot against its current sources.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The ID of your chatbot"}},"required":["chatbotId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.list","description":"List historical conversations for a Wonderchat chatbot.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The ID of your chatbot"},"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Maximum conversations to return"},"cursor":{"type":"string","description":"Pagination cursor from a previous call"}},"required":["chatbotId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversations.delete","description":"Delete a stored Wonderchat conversation by chatlog id.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The ID of your chatbot"},"chatlogId":{"type":"string","description":"The chatlog id to delete"}},"required":["chatbotId","chatlogId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"woocommerce","displayName":"WooCommerce","description":"Manage WooCommerce products, customers, and coupons.","auth":{"kind":"api-key","hint":"WooCommerce Consumer Key and Consumer Secret from WordPress admin. The connection must also store the WordPress store URL (e.g. https://mystore.com)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"coupons.create","description":"Create a WooCommerce coupon.","parameters":{"type":"object","properties":{"code":{"type":"string"},"discountType":{"type":"string","enum":["percent","fixed_cart","fixed_product"]},"amount":{"type":"number"},"minimumAmount":{"type":"number"}},"required":["code","discountType","amount"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.create","description":"Create a WooCommerce customer.","parameters":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"},"billingAddress":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"address1":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"postcode":{"type":"string"},"country":{"type":"string"},"email":{"type":"string"}}}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.create","description":"Create a WooCommerce product.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"regularPrice":{"type":"number"},"salePrice":{"type":"number"},"categories":{"type":"array","items":{"type":"integer"}},"sku":{"type":"string"},"manageStock":{"type":"boolean"},"stockQuantity":{"type":"integer"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.find","description":"Find a WooCommerce customer by email or search parameters.","parameters":{"type":"object","properties":{"email":{"type":"string"},"search":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.find","description":"Find WooCommerce products by search or filter parameters.","parameters":{"type":"object","properties":{"search":{"type":"string"},"category":{"type":"integer"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.update","description":"Update a WooCommerce customer by ID.","parameters":{"type":"object","properties":{"id":{"type":"integer"},"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.delete","description":"Delete a WooCommerce customer. WooCommerce requires force=true to permanently delete customers.","parameters":{"type":"object","properties":{"id":{"type":"integer"},"force":{"type":"boolean","description":"Permanently delete the customer."},"reassign":{"type":"integer","description":"Reassign customer posts to this user ID."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.update","description":"Update a WooCommerce product by ID.","parameters":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"regularPrice":{"type":"number"},"salePrice":{"type":"number"},"sku":{"type":"string"},"manageStock":{"type":"boolean"},"stockQuantity":{"type":"integer"},"status":{"type":"string","enum":["draft","pending","private","publish"]}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.delete","description":"Delete a WooCommerce product. Pass force=true to permanently delete instead of trashing.","parameters":{"type":"object","properties":{"id":{"type":"integer"},"force":{"type":"boolean","description":"Bypass trash and permanently delete."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.update-status","description":"Update a WooCommerce order's status (e.g. processing, completed, cancelled, refunded).","parameters":{"type":"object","properties":{"id":{"type":"integer"},"status":{"type":"string","enum":["pending","processing","on-hold","completed","cancelled","refunded","failed"]}},"required":["id","status"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"woodpecker","displayName":"Woodpecker","description":"Manage prospects and campaigns with Woodpecker API.","auth":{"kind":"api-key","hint":"Woodpecker API key from Marketplace → Integrations → API keys."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"prospect.find-by-email","description":"Find a prospect by email address.","parameters":{"type":"object","properties":{"email":{"type":"string"},"campaignId":{"type":"string"},"includeCampaignDetails":{"type":"boolean"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"prospect.get-responses","description":"Get prospect responses.","parameters":{"type":"object","properties":{"prospectId":{"type":"number"},"campaignId":{"type":"string"}},"required":["prospectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"prospect.add-to-campaign","description":"Add a prospect to a campaign.","parameters":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string"},"website":{"type":"string"},"linkedinUrl":{"type":"string"},"title":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"country":{"type":"string"},"industry":{"type":"string"},"tags":{"type":"string"},"status":{"type":"string"},"force":{"type":"boolean"},"update":{"type":"boolean"},"setTags":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"prospect.add-to-list","description":"Add a prospect to a list.","parameters":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string"},"website":{"type":"string"},"linkedinUrl":{"type":"string"},"title":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"country":{"type":"string"},"industry":{"type":"string"},"tags":{"type":"string"},"status":{"type":"string"},"force":{"type":"boolean"},"fileName":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"domain.blacklist","description":"Blacklist a domain.","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"prospect.update","description":"Update fields on an existing Woodpecker prospect, addressed by email. Woodpecker treats POST /prospect with update=true as an upsert against the email key.","parameters":{"type":"object","properties":{"email":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"company":{"type":"string"},"website":{"type":"string"},"linkedin_url":{"type":"string"},"title":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"country":{"type":"string"},"industry":{"type":"string"},"tags":{"type":"string"},"status":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"prospect.remove-from-campaign","description":"Remove a prospect from a campaign by prospect ID and campaign ID.","parameters":{"type":"object","properties":{"prospectId":{"type":"number"},"campaignId":{"type":"string"}},"required":["prospectId","campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"prospect.stop","description":"Stop follow-ups for a prospect across all campaigns or within a specific campaign.","parameters":{"type":"object","properties":{"email":{"type":"string"},"campaign_id":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.list","description":"List Woodpecker campaigns, optionally filtered by status.","parameters":{"type":"object","properties":{"status":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"wootric","displayName":"Wootric","description":"Measure and boost customer happiness through surveys and feedback.","auth":{"kind":"oauth2","authorizationUrl":"https://oauth.wootric.com/oauth/authorize","tokenUrl":"https://oauth.wootric.com/oauth/token","scopes":[],"clientIdEnv":"WOOTRIC_OAUTH_CLIENT_ID","clientSecretEnv":"WOOTRIC_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"surveys.create","description":"Create a Wootric survey.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the user to send survey to."},"firstName":{"type":"string","description":"First name of the user."},"lastName":{"type":"string","description":"Last name of the user."},"customAttributes":{"type":"object","description":"Custom user attributes."},"externalId":{"type":"string","description":"External user ID."},"isRecipient":{"type":"boolean","description":"Mark as recipient."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"wordpress","displayName":"WordPress","description":"Read, create, update, and delete WordPress posts, pages, media, and comments via the WordPress.com REST API.","auth":{"kind":"oauth2","authorizationUrl":"https://public-api.wordpress.com/oauth2/authorize","tokenUrl":"https://public-api.wordpress.com/oauth2/token","scopes":["posts","media","comments"],"clientIdEnv":"WORDPRESS_OAUTH_CLIENT_ID","clientSecretEnv":"WORDPRESS_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"posts.list","description":"List posts on a site, optionally filtered by status, author, search term, or pagination.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"status":{"type":"string","description":"Comma-separated WordPress post statuses (publish, future, draft, pending, private). Defaults to \"publish\"."},"search":{"type":"string","description":"Full-text search filter."},"author":{"type":"integer","description":"Restrict to posts by this user ID."},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}},"required":["site"]},"requiredScopes":["posts"],"class":"read"},{"name":"posts.get","description":"Fetch a single WordPress post by ID.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"id":{"type":"integer","description":"Post ID."}},"required":["site","id"]},"requiredScopes":["posts"],"class":"read"},{"name":"posts.create","description":"Create a WordPress post. `content` is HTML or Gutenberg block markup. Set `status` to \"draft\" to skip publication.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"title":{"type":"string"},"content":{"type":"string","description":"Post body. HTML or Gutenberg block markup."},"excerpt":{"type":"string"},"slug":{"type":"string"},"status":{"type":"string","enum":["publish","future","draft","pending","private"]},"categories":{"type":"array","items":{"type":"integer"}},"tags":{"type":"array","items":{"type":"integer"}},"featured_media":{"type":"integer","description":"Attachment ID to use as the featured image."}},"required":["site","title"]},"requiredScopes":["posts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.update","description":"Update fields on an existing WordPress post.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"id":{"type":"integer"},"title":{"type":"string"},"content":{"type":"string"},"excerpt":{"type":"string"},"slug":{"type":"string"},"status":{"type":"string","enum":["publish","future","draft","pending","private"]},"categories":{"type":"array","items":{"type":"integer"}},"tags":{"type":"array","items":{"type":"integer"}},"featured_media":{"type":"integer"}},"required":["site","id"]},"requiredScopes":["posts"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"posts.delete","description":"Move a post to trash, or permanently delete it when `force` is true. WordPress trashes by default and only second deletes hard-delete.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"id":{"type":"integer"},"force":{"type":"boolean","description":"Bypass trash and permanently delete."}},"required":["site","id"]},"requiredScopes":["posts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pages.list","description":"List static pages on a site.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"status":{"type":"string"},"search":{"type":"string"},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}},"required":["site"]},"requiredScopes":["posts"],"class":"read"},{"name":"pages.create","description":"Create a static page on a site.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"title":{"type":"string"},"content":{"type":"string"},"slug":{"type":"string"},"status":{"type":"string","enum":["publish","future","draft","pending","private"]},"parent":{"type":"integer","description":"Parent page ID for nested hierarchy."}},"required":["site","title"]},"requiredScopes":["posts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pages.update","description":"Update fields on an existing WordPress page.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"id":{"type":"integer"},"title":{"type":"string"},"content":{"type":"string"},"slug":{"type":"string"},"status":{"type":"string","enum":["publish","future","draft","pending","private"]},"parent":{"type":"integer"}},"required":["site","id"]},"requiredScopes":["posts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pages.delete","description":"Move a page to trash, or permanently delete it when `force` is true.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"id":{"type":"integer"},"force":{"type":"boolean","description":"Bypass trash and permanently delete."}},"required":["site","id"]},"requiredScopes":["posts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Create a comment on a post.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"post":{"type":"integer","description":"Post ID to comment on."},"content":{"type":"string"},"author_name":{"type":"string"},"author_email":{"type":"string"},"parent":{"type":"integer","description":"Parent comment ID for threaded replies."}},"required":["site","post","content"]},"requiredScopes":["comments"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.delete","description":"Trash a comment, or permanently delete it when `force` is true.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"id":{"type":"integer"},"force":{"type":"boolean"}},"required":["site","id"]},"requiredScopes":["comments"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.upload","description":"Register a media asset on the site. Accepts the public URL of the source asset (WordPress.com sideloads from URL when supplied with `source_url`).","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"source_url":{"type":"string","description":"Public URL WordPress should sideload as a media item."},"title":{"type":"string"},"caption":{"type":"string"},"alt_text":{"type":"string"},"post":{"type":"integer","description":"Attach the uploaded media to this post ID."}},"required":["site","source_url"]},"requiredScopes":["media"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.list","description":"List media items on a site.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"media_type":{"type":"string","enum":["image","video","audio","application"]},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}},"required":["site"]},"requiredScopes":["media"],"class":"read"},{"name":"comments.list","description":"List comments on a site, optionally filtered by post or status.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"post":{"type":"integer","description":"Restrict to comments on this post ID."},"status":{"type":"string","enum":["approve","hold","spam","trash"]},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}},"required":["site"]},"requiredScopes":["comments"],"class":"read"},{"name":"comments.update","description":"Moderate a comment by setting its status (approve, hold, spam, trash) or editing its content.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"id":{"type":"integer"},"status":{"type":"string","enum":["approve","hold","spam","trash"]},"content":{"type":"string"}},"required":["site","id"]},"requiredScopes":["comments"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"categories.create","description":"Create a taxonomy category on a site. `name` is required; `slug`, `description`, and `parent` (parent category ID) are optional.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"name":{"type":"string"},"slug":{"type":"string"},"description":{"type":"string"},"parent":{"type":"integer","description":"Parent category ID for nested hierarchy."}},"required":["site","name"]},"requiredScopes":["posts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.create","description":"Create a taxonomy tag on a site. `name` is required; `slug` and `description` are optional.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"name":{"type":"string"},"slug":{"type":"string"},"description":{"type":"string"}},"required":["site","name"]},"requiredScopes":["posts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.list","description":"List users (authors) on a site. Optionally filter by role (administrator, editor, author, contributor, subscriber) or search.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"search":{"type":"string"},"roles":{"type":"array","items":{"type":"string","enum":["administrator","editor","author","contributor","subscriber"]}},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}},"required":["site"]},"requiredScopes":["posts"],"class":"read"}]},{"kind":"workable","displayName":"Workable","description":"Access candidate records, jobs, stages, and team members in Workable. Move candidates between pipeline stages and rate candidates.","auth":{"kind":"api-key","hint":"Workable API token."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"candidates.get","description":"Retrieve a specific candidate by ID.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Candidate ID"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobs.get","description":"Retrieve a specific job by shortcode.","parameters":{"type":"object","properties":{"shortcode":{"type":"string","description":"Job shortcode"}},"required":["shortcode"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobs.stages","description":"List all hiring pipeline stages for a job.","parameters":{"type":"object","properties":{"shortcode":{"type":"string","description":"Job shortcode"}},"required":["shortcode"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobs.list","description":"List all jobs.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Number of results to return"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"members.list","description":"List team members.","parameters":{"type":"object","properties":{"role":{"type":"string","description":"Filter by member role"},"email":{"type":"string","description":"Filter by member email"},"name":{"type":"string","description":"Filter by member name (exact match)"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"candidates.move","description":"Move a candidate to a different pipeline stage.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Candidate ID"},"target_stage":{"type":"string","description":"Target stage slug"}},"required":["id","target_stage"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"candidates.rate","description":"Rate a candidate on a scale.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Candidate ID"},"scale":{"type":"string","description":"Rating scale (e.g., thumbs, stars, numbers)"},"grade":{"type":"integer","description":"Grade value"},"comment":{"type":"string","description":"Rating comment"}},"required":["id","scale","grade","comment"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"candidates.comment","description":"Add a comment to a candidate record.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Candidate ID"},"comment":{"type":"string","description":"Comment text"}},"required":["id","comment"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"candidates.create","description":"Create a candidate on a job.","parameters":{"type":"object","properties":{"shortcode":{"type":"string","description":"Job shortcode the candidate applies to."},"candidate":{"type":"object","description":"Candidate payload (name, email, headline, summary, etc.)."}},"required":["shortcode","candidate"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"candidates.disqualify","description":"Disqualify a candidate.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Candidate ID"},"disqualification_reason_id":{"type":"string","description":"Optional disqualification reason ID."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"candidates.revert","description":"Revert a disqualified candidate.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Candidate ID"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"jobs.publish","description":"Publish a job opening.","parameters":{"type":"object","properties":{"shortcode":{"type":"string","description":"Job shortcode"}},"required":["shortcode"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"offers.create","description":"Create an offer for a candidate.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Candidate ID"},"offer":{"type":"object","description":"Offer payload (starts_on, salary, currency, employment_type, etc.)."}},"required":["id","offer"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"workday","displayName":"Workday","description":"Read Workday workers, organizations, locations, and time-off data and submit time-off requests through the tenant-scoped Workday REST API.","auth":{"kind":"oauth2","authorizationUrl":"{workdayBaseUrl}/ccx/oauth2/{tenant}/authorize","tokenUrl":"{workdayBaseUrl}/ccx/oauth2/{tenant}/token","scopes":["Staffing","Organizations and Roles","Time Off and Leave"],"clientIdEnv":"WORKDAY_OAUTH_CLIENT_ID","clientSecretEnv":"WORKDAY_OAUTH_CLIENT_SECRET","tokenClientAuthMethod":"client_secret_basic","sendScopeParam":false,"pkce":"unsupported","urlTemplateMetadata":{"workdayBaseUrl":{"kind":"base-url","allowedBaseUrlSuffixes":[".workday.com",".myworkday.com"]},"tenant":{"kind":"path-segment"}}},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"workers.list","description":"List workers in the tenant with optional pagination (Workday returns active workers by default; pass `terminated=true` to include terminated workers).","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Page size (Workday max 100)."},"offset":{"type":"integer","minimum":0},"search":{"type":"string","description":"Free-text worker search (matches name / preferred name / email)."},"terminated":{"type":"boolean","description":"Include terminated workers in the result set."}}},"requiredScopes":["Staffing"],"class":"read"},{"name":"workers.get","description":"Read a single worker record by Workday worker id.","parameters":{"type":"object","properties":{"workerId":{"type":"string","description":"Workday worker WID."}},"required":["workerId"]},"requiredScopes":["Staffing"],"class":"read"},{"name":"workers.history","description":"Read a worker employment history, including position, business title, location, and supervisory organization changes over time.","parameters":{"type":"object","properties":{"workerId":{"type":"string"}},"required":["workerId"]},"requiredScopes":["Staffing"],"class":"read"},{"name":"workers.directReports","description":"List the direct reports of a worker (one supervisory level; recurse for the full tree).","parameters":{"type":"object","properties":{"workerId":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}},"required":["workerId"]},"requiredScopes":["Staffing"],"class":"read"},{"name":"organizations.list","description":"List supervisory organizations (filterable by name) with pagination.","parameters":{"type":"object","properties":{"search":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["Organizations and Roles"],"class":"read"},{"name":"organizations.get","description":"Read a supervisory organization by id (includes manager, members, and parent org link).","parameters":{"type":"object","properties":{"organizationId":{"type":"string"}},"required":["organizationId"]},"requiredScopes":["Organizations and Roles"],"class":"read"},{"name":"locations.list","description":"List Workday locations (offices, remote pools) with pagination.","parameters":{"type":"object","properties":{"search":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["Staffing"],"class":"read"},{"name":"timeOff.types.list","description":"List time-off plan types available to a worker (PTO, sick, jury duty, …).","parameters":{"type":"object","properties":{"workerId":{"type":"string"}},"required":["workerId"]},"requiredScopes":["Time Off and Leave"],"class":"read"},{"name":"timeOff.entries.list","description":"List a worker time-off entries within an optional date range.","parameters":{"type":"object","properties":{"workerId":{"type":"string"},"fromDate":{"type":"string","description":"ISO date (YYYY-MM-DD)."},"toDate":{"type":"string","description":"ISO date (YYYY-MM-DD)."},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}},"required":["workerId"]},"requiredScopes":["Time Off and Leave"],"class":"read"},{"name":"timeOff.submit","description":"Submit a time-off request on behalf of a worker. Body MUST follow the Workday request shape: { entries: [{ date, dailyQuantity, timeOffType: { id } }], comment? }.","parameters":{"type":"object","properties":{"workerId":{"type":"string"},"entries":{"type":"array","description":"One entry per requested day. Each carries the absence type id and daily quantity (in hours).","items":{"type":"object","properties":{"date":{"type":"string","description":"ISO date (YYYY-MM-DD)."},"dailyQuantity":{"type":"string","description":"Hours as a decimal string (e.g. \"8\")."},"timeOffType":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},"required":["date","dailyQuantity","timeOffType"]}},"comment":{"type":"string"}},"required":["workerId","entries"]},"requiredScopes":["Time Off and Leave"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"wrike","displayName":"Wrike","description":"Manage projects, tasks, folders, and comments in Wrike, the work management and collaboration platform.","auth":{"kind":"oauth2","authorizationUrl":"https://app.wrike.com/oauth2/authorize","tokenUrl":"https://www.wrike.com/oauth2/token","scopes":["wsReadOnly","wsReadWrite"],"clientIdEnv":"WRIKE_OAUTH_CLIENT_ID","clientSecretEnv":"WRIKE_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tasks.create","description":"Create a new task in Wrike.","parameters":{"type":"object","properties":{"folderId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"responsible":{"type":"array","items":{"type":"string"}},"dates":{"type":"object","properties":{"start":{"type":"string"},"due":{"type":"string"}}},"priority":{"type":"string","enum":["High","Normal","Low"]},"customFields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"value":{"type":"string"}},"required":["id","value"]}}},"required":["folderId","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update an existing Wrike task.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"responsible":{"type":"array","items":{"type":"string"}},"dates":{"type":"object","properties":{"start":{"type":"string"},"due":{"type":"string"}}},"priority":{"type":"string","enum":["High","Normal","Low"]},"status":{"type":"string","enum":["Active","Completed","OnHold","Cancelled"]},"customFields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"value":{"type":"string"}},"required":["id","value"]}}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"folders.create","description":"Create a new folder in a Wrike workspace.","parameters":{"type":"object","properties":{"parentId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"}},"required":["parentId","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.create","description":"Create a new project in Wrike.","parameters":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"accessType":{"type":"string","enum":["Public","Private"]},"customFields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"value":{"type":"string"}},"required":["id","value"]}}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.add","description":"Add a comment to a task in Wrike.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"text":{"type":"string"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["taskId","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"attachments.upload","description":"Upload an attachment to a task in Wrike.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"filename":{"type":"string"},"url":{"type":"string"}},"required":["taskId","filename","url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.find","description":"Search for a task in Wrike by title or ID.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"title":{"type":"string"},"status":{"type":"string","enum":["Active","Completed","OnHold","Cancelled"]},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.delete","description":"Delete a task.","parameters":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.complete","description":"Mark a task complete.","parameters":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"folders.delete","description":"Delete a folder.","parameters":{"type":"object","properties":{"folderId":{"type":"string"}},"required":["folderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.update","description":"Edit a comment.","parameters":{"type":"object","properties":{"commentId":{"type":"string"},"text":{"type":"string"}},"required":["commentId","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"folders.find","description":"Search for a folder in Wrike.","parameters":{"type":"object","properties":{"folderId":{"type":"string"},"title":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"writesonic-bulk","displayName":"Writesonic","description":"Generate AI-powered content: blog ideas, intros, outlines, product descriptions, ads, and more.","auth":{"kind":"api-key","hint":"Writesonic API key."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"blog.ideas","description":"Generate blog ideas for a given topic.","parameters":{"type":"object","properties":{"topic":{"type":"string"},"numCopies":{"type":"integer","minimum":1,"maximum":5}},"required":["topic","numCopies"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"blog.intros","description":"Generate blog introductions based on title and keyword.","parameters":{"type":"object","properties":{"blogTitle":{"type":"string"},"keyword":{"type":["string","null"]}},"required":["blogTitle"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"blog.outlines","description":"Generate blog outlines based on introduction.","parameters":{"type":"object","properties":{"blogIntro":{"type":"string"}},"required":["blogIntro"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"content.rephraser","description":"Rephrase existing content.","parameters":{"type":"object","properties":{"contentToRephrase":{"type":"string"}},"required":["contentToRephrase"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"content.shorten","description":"Shorten existing content.","parameters":{"type":"object","properties":{"contentToShorten":{"type":"string"}},"required":["contentToShorten"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sentence.expander","description":"Expand a sentence into longer content.","parameters":{"type":"object","properties":{"contentToExpand":{"type":"string"}},"required":["contentToExpand"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"facebook.ads","description":"Generate Facebook ad copy.","parameters":{"type":"object","properties":{"productName":{"type":"string"},"productDescription":{"type":["string","null"]}},"required":["productName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"google.ads","description":"Generate Google ad copy.","parameters":{"type":"object","properties":{"productName":{"type":"string"},"searchTerm":{"type":["string","null"]}},"required":["productName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"generate.product.descriptions","description":"Generate product descriptions with keywords.","parameters":{"type":"object","properties":{"productCharacteristics":{"type":"string"},"primaryKeyword":{"type":["string","null"]},"secondaryKeywords":{"type":["string","null"]}},"required":["productCharacteristics"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"landing.page.headlines","description":"Generate landing page headlines.","parameters":{"type":"object","properties":{"productName":{"type":"string"},"productDescription":{"type":["string","null"]}},"required":["productName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"wufoo","displayName":"Wufoo","description":"Query form entries, create submissions, and manage Wufoo forms.","auth":{"kind":"api-key","hint":"Wufoo API key and subdomain."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"forms.list","description":"List all forms in the Wufoo account.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.find","description":"Find a specific form by name or criteria.","parameters":{"type":"object","properties":{"formHash":{"type":"string"}},"required":["formHash"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"entries.list","description":"List entries from a specific form.","parameters":{"type":"object","properties":{"formHash":{"type":"string"},"pageStart":{"type":"integer"},"pageSize":{"type":"integer"},"sort":{"type":"string"}},"required":["formHash"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"entries.get","description":"Get a specific entry by ID.","parameters":{"type":"object","properties":{"formHash":{"type":"string"},"entryId":{"type":"string"}},"required":["formHash","entryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"entries.create","description":"Create a new form entry.","parameters":{"type":"object","properties":{"formHash":{"type":"string"},"data":{"type":"object"}},"required":["formHash","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"entries.search","description":"Search form entries by field value.","parameters":{"type":"object","properties":{"formHash":{"type":"string"},"fieldId":{"type":"string"},"searchValue":{"type":"string"},"matchType":{"type":"string"}},"required":["formHash","fieldId","searchValue"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"fields.list","description":"List all fields in a form.","parameters":{"type":"object","properties":{"formHash":{"type":"string"}},"required":["formHash"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"entries.update","description":"Update an existing entry.","parameters":{"type":"object","properties":{"formHash":{"type":"string"},"entryId":{"type":"string"},"data":{"type":"object","description":"Field-id keyed update payload."}},"required":["formHash","entryId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"entries.delete","description":"Delete a form entry.","parameters":{"type":"object","properties":{"formHash":{"type":"string"},"entryId":{"type":"string"}},"required":["formHash","entryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.create","description":"Subscribe a webhook to a form.","parameters":{"type":"object","properties":{"formHash":{"type":"string"},"url":{"type":"string","description":"Webhook target URL."},"handshakeKey":{"type":"string","description":"Optional shared secret echoed in posts."},"metadata":{"type":"boolean","description":"Include field metadata in payload."}},"required":["formHash","url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Unsubscribe a webhook from a form.","parameters":{"type":"object","properties":{"formHash":{"type":"string"},"webhookHash":{"type":"string"}},"required":["formHash","webhookHash"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"xero","displayName":"Xero","description":"Search and update Xero contacts, invoices, and chart-of-account records across authorized organizations.","auth":{"kind":"oauth2","authorizationUrl":"https://login.xero.com/identity/connect/authorize","tokenUrl":"https://identity.xero.com/connect/token","scopes":["offline_access","accounting.contacts","accounting.contacts.read","accounting.invoices","accounting.invoices.read","accounting.payments","accounting.settings.read","accounting.reports.aged.read","accounting.reports.balancesheet.read","accounting.reports.banksummary.read","accounting.reports.profitandloss.read","accounting.reports.trialbalance.read"],"clientIdEnv":"XERO_OAUTH_CLIENT_ID","clientSecretEnv":"XERO_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tenants.list","description":"List the Xero organizations (tenants) this connection is authorized for. Call this FIRST — every other Xero capability requires the `tenantId` returned here.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reports.get","description":"Run a Xero accounting report. `reportName` is the Xero report id (ProfitAndLoss, BalanceSheet, TrialBalance, BankSummary, AgedReceivablesByContact, AgedPayablesByContact).","parameters":{"type":"object","properties":{"tenantId":{"type":"string","description":"From tenants.list."},"reportName":{"type":"string","enum":["ProfitAndLoss","BalanceSheet","TrialBalance","BankSummary","AgedReceivablesByContact","AgedPayablesByContact"]},"fromDate":{"type":"string","description":"YYYY-MM-DD."},"toDate":{"type":"string","description":"YYYY-MM-DD."},"date":{"type":"string","description":"YYYY-MM-DD — point-in-time reports (BalanceSheet, TrialBalance)."},"contactId":{"type":"string","description":"Required by the aged receivables/payables reports."}},"required":["tenantId","reportName"]},"requiredScopes":["accounting.reports.aged.read","accounting.reports.balancesheet.read","accounting.reports.banksummary.read","accounting.reports.profitandloss.read","accounting.reports.trialbalance.read"],"class":"read"},{"name":"contacts.search","description":"Search Xero contacts in a tenant using the Xero where-clause query language.","parameters":{"type":"object","properties":{"tenantId":{"type":"string","description":"Xero tenant (organization) id from /connections."},"where":{"type":"string","description":"Xero where clause, e.g. 'Name.Contains(\"Acme\")'."},"order":{"type":"string","description":"Sort expression, e.g. \"Name ASC\"."},"page":{"type":"integer","minimum":1}},"required":["tenantId"]},"requiredScopes":["accounting.contacts.read"],"class":"read"},{"name":"contacts.get","description":"Read a single Xero contact by ContactID.","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"contactId":{"type":"string","description":"Xero ContactID (GUID)."}},"required":["tenantId","contactId"]},"requiredScopes":["accounting.contacts.read"],"class":"read"},{"name":"contacts.create","description":"Create a Xero contact. Pass a Contacts array per the Xero API contract.","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"Contacts":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string"},"EmailAddress":{"type":"string"},"FirstName":{"type":"string"},"LastName":{"type":"string"}},"required":["Name"]}}},"required":["tenantId","Contacts"]},"requiredScopes":["accounting.contacts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update a Xero contact by ContactID.","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"contactId":{"type":"string"},"fields":{"type":"object","description":"Partial Xero Contact payload."}},"required":["tenantId","contactId","fields"]},"requiredScopes":["accounting.contacts"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"invoices.search","description":"Search Xero invoices in a tenant.","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"where":{"type":"string","description":"Xero where clause, e.g. 'Status==\"AUTHORISED\"'."},"order":{"type":"string","description":"Sort expression, e.g. \"Date DESC\"."},"page":{"type":"integer","minimum":1}},"required":["tenantId"]},"requiredScopes":["accounting.invoices.read"],"class":"read"},{"name":"invoices.get","description":"Read a single Xero invoice by InvoiceID or InvoiceNumber.","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"invoiceId":{"type":"string","description":"Xero InvoiceID (GUID) or InvoiceNumber."}},"required":["tenantId","invoiceId"]},"requiredScopes":["accounting.invoices.read"],"class":"read"},{"name":"invoices.create","description":"Create a Xero invoice (AR or AP). Pass an Invoices array per the Xero API contract.","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"Invoices":{"type":"array","items":{"type":"object","properties":{"Type":{"type":"string","enum":["ACCREC","ACCPAY"]},"Contact":{"type":"object"},"LineItems":{"type":"array","items":{"type":"object"}},"Date":{"type":"string","description":"YYYY-MM-DD."},"DueDate":{"type":"string","description":"YYYY-MM-DD."},"Reference":{"type":"string"},"Status":{"type":"string","enum":["DRAFT","SUBMITTED","AUTHORISED"]}},"required":["Type","Contact","LineItems"]}}},"required":["tenantId","Invoices"]},"requiredScopes":["accounting.invoices"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"accounts.search","description":"List Xero chart-of-account records for a tenant.","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"where":{"type":"string","description":"Xero where clause, e.g. 'Type==\"REVENUE\"'."},"order":{"type":"string"}},"required":["tenantId"]},"requiredScopes":["accounting.settings.read"],"class":"read"},{"name":"contacts.archive","description":"Archive a Xero contact (sets ContactStatus to ARCHIVED).","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"contactId":{"type":"string","description":"Xero ContactID (GUID)."}},"required":["tenantId","contactId"]},"requiredScopes":["accounting.contacts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.delete","description":"Void or delete a Xero invoice. DRAFT/SUBMITTED invoices accept DELETED, AUTHORISED invoices accept VOIDED.","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"invoiceId":{"type":"string","description":"Xero InvoiceID (GUID) or InvoiceNumber."},"status":{"type":"string","enum":["VOIDED","DELETED"],"description":"Target status. VOIDED for authorised invoices, DELETED for draft/submitted invoices."}},"required":["tenantId","invoiceId","status"]},"requiredScopes":["accounting.invoices"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.email","description":"Email a Xero invoice to its contact using the saved template.","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"invoiceId":{"type":"string","description":"Xero InvoiceID (GUID) or InvoiceNumber."}},"required":["tenantId","invoiceId"]},"requiredScopes":["accounting.invoices"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payments.create","description":"Apply a payment to a Xero invoice or credit note. Pass a Payments array per the Xero API contract.","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"Payments":{"type":"array","items":{"type":"object","properties":{"Invoice":{"type":"object","description":"Invoice reference, e.g. { InvoiceID: \"...\" }."},"CreditNote":{"type":"object","description":"CreditNote reference, e.g. { CreditNoteID: \"...\" }."},"Account":{"type":"object","description":"Bank account reference, e.g. { Code: \"090\" }."},"Date":{"type":"string","description":"YYYY-MM-DD."},"Amount":{"type":"number"},"Reference":{"type":"string"}},"required":["Account","Date","Amount"]}}},"required":["tenantId","Payments"]},"requiredScopes":["accounting.payments"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"credit-notes.create","description":"Create a Xero credit note (ACCRECCREDIT or ACCPAYCREDIT). Pass a CreditNotes array per the Xero API contract.","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"CreditNotes":{"type":"array","items":{"type":"object","properties":{"Type":{"type":"string","enum":["ACCRECCREDIT","ACCPAYCREDIT"]},"Contact":{"type":"object"},"LineItems":{"type":"array","items":{"type":"object"}},"Date":{"type":"string","description":"YYYY-MM-DD."},"Reference":{"type":"string"},"Status":{"type":"string","enum":["DRAFT","SUBMITTED","AUTHORISED"]}},"required":["Type","Contact","LineItems"]}}},"required":["tenantId","CreditNotes"]},"requiredScopes":["accounting.invoices"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"youcanbookme","displayName":"YouCanBookMe","description":"Manage online scheduling, profiles, and bookings with YouCanBookMe.","auth":{"kind":"api-key","hint":"YouCanBookMe Account ID or API credentials."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"profiles.create","description":"Create a new booking profile.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"Profile title"},"description":{"type":"string","description":"Profile description"},"subdomain":{"type":"string","description":"Subdomain for the profile"},"timeZone":{"type":"string","description":"Time zone (e.g., America/New_York)"},"locale":{"type":"string","description":"Locale (e.g., en-US)"},"logo":{"type":"string","description":"Logo URL"},"accessCode":{"type":"string","description":"Access code"},"displayTimeZone":{"type":"string","description":"Display time zone"}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bookings.retrieve","description":"Retrieve a booking by ID.","parameters":{"type":"object","properties":{"bookingId":{"type":"string","description":"Booking ID"},"fields":{"type":"string","description":"Comma-separated list of fields to return (default: id,title,accountId,profileId,createdAt,startsAt,endsAt,location,tentative,timeZone,cancelled,numberOfSlots)"},"displayTimeZone":{"type":"string","description":"Time zone to display times in"}},"required":["bookingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bookings.cancel","description":"Cancel a booking by ID.","parameters":{"type":"object","properties":{"bookingId":{"type":"string","description":"Booking ID to cancel"},"reason":{"type":"string","description":"Optional cancellation reason"}},"required":["bookingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bookings.reschedule","description":"Reschedule a booking to a new slot.","parameters":{"type":"object","properties":{"bookingId":{"type":"string","description":"Booking ID to reschedule"},"startsAt":{"type":"string","description":"New start time (ISO 8601)"},"endsAt":{"type":"string","description":"New end time (ISO 8601)"},"timeZone":{"type":"string","description":"Time zone for the new slot"}},"required":["bookingId","startsAt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"profiles.update","description":"Update an existing booking profile.","parameters":{"type":"object","properties":{"profileId":{"type":"string","description":"Profile ID to update"},"title":{"type":"string","description":"Updated profile title"},"description":{"type":"string","description":"Updated profile description"},"subdomain":{"type":"string","description":"Updated subdomain"},"timeZone":{"type":"string","description":"Updated time zone"},"locale":{"type":"string","description":"Updated locale"},"logo":{"type":"string","description":"Updated logo URL"},"accessCode":{"type":"string","description":"Updated access code"},"displayTimeZone":{"type":"string","description":"Updated display time zone"}},"required":["profileId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"profiles.delete","description":"Delete a booking profile.","parameters":{"type":"object","properties":{"profileId":{"type":"string","description":"Profile ID to delete"}},"required":["profileId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"youtube","displayName":"YouTube","description":"Resolve a YouTube channel by @handle, username, or id; list its most recent uploads; and fetch public video metadata (title, description, duration, view/like counts) for any public channel the connected Google identity can read.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/youtube.readonly"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"other","defaultConsistencyModel":"cache","capabilities":[{"name":"channels.resolve","description":"Resolve a channel and read its snippet, statistics, and the uploads-playlist id needed by channels.recentUploads. Pass exactly one of handle (e.g. \"@MrBeast\"), username (legacy), or channelId (GET /channels?part=snippet,statistics,contentDetails).","parameters":{"type":"object","properties":{"handle":{"type":"string","description":"Channel @handle, e.g. \"@MrBeast\" (with or without the leading @)."},"username":{"type":"string","description":"Legacy channel username (only for old custom-username channels)."},"channelId":{"type":"string","description":"Canonical channel id (UC...), if already known."}}},"requiredScopes":["https://www.googleapis.com/auth/youtube.readonly"],"class":"read"},{"name":"channels.recentUploads","description":"List a channel's most recent uploads (video id, title, description, publishedAt) from its uploads playlist. Get uploadsPlaylistId from channels.resolve (contentDetails.relatedPlaylists.uploads). maxResults is 1-50, default 15 (GET /playlistItems?part=snippet,contentDetails).","parameters":{"type":"object","properties":{"uploadsPlaylistId":{"type":"string","description":"The channel's uploads playlist id (UU...), from channels.resolve."},"maxResults":{"type":"integer","description":"How many recent uploads to return (1-50, default 15)."},"pageToken":{"type":"string","description":"Page token from a prior response's nextPageToken to page further back."}},"required":["uploadsPlaylistId"]},"requiredScopes":["https://www.googleapis.com/auth/youtube.readonly"],"class":"read"},{"name":"videos.list","description":"Fetch public metadata for up to 50 videos by id — title, description, duration, and view/like/comment counts. Pass a comma-separated id list, e.g. \"id1,id2,id3\" (GET /videos?part=snippet,statistics,contentDetails).","parameters":{"type":"object","properties":{"ids":{"type":"string","description":"Comma-separated video ids (max 50), e.g. \"dQw4w9WgXcQ,abc123\"."}},"required":["ids"]},"requiredScopes":["https://www.googleapis.com/auth/youtube.readonly"],"class":"read"},{"name":"captions.list","description":"List the caption tracks AVAILABLE for a video (language, kind, auto-vs-manual). Reports availability only — caption bodies are owner-only on the Data API, so fetch transcript text out-of-band. (GET /captions?part=snippet&videoId=...).","parameters":{"type":"object","properties":{"videoId":{"type":"string","description":"The video id to list caption tracks for."}},"required":["videoId"]},"requiredScopes":["https://www.googleapis.com/auth/youtube.readonly"],"class":"read"}]},{"kind":"zagomail","displayName":"Zagomail","description":"All-in-one email marketing and automation platform for managing subscribers, campaigns, and tags.","auth":{"kind":"api-key","hint":"Zagomail API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"subscribers.create","description":"Create a new subscriber in Zagomail.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the subscriber"},"firstName":{"type":"string","description":"First name of the subscriber"},"lastName":{"type":"string","description":"Last name of the subscriber"},"metadata":{"type":"object","description":"Additional subscriber metadata"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.update","description":"Update an existing subscriber.","parameters":{"type":"object","properties":{"subscriberUid":{"type":"string","description":"Unique identifier of the subscriber"},"email":{"type":"string","description":"Updated email address"},"firstName":{"type":"string","description":"Updated first name"},"lastName":{"type":"string","description":"Updated last name"},"metadata":{"type":"object","description":"Updated metadata"}},"required":["subscriberUid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"subscribers.get","description":"Get subscriber details by ID.","parameters":{"type":"object","properties":{"subscriberUid":{"type":"string","description":"Unique identifier of the subscriber"}},"required":["subscriberUid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.search","description":"Search subscribers by email address.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address to search for"},"limit":{"type":"integer","description":"Maximum number of results"},"offset":{"type":"integer","description":"Offset for pagination"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.add-tags","description":"Add one or more tags to a subscriber.","parameters":{"type":"object","properties":{"subscriberUid":{"type":"string","description":"Unique identifier of the subscriber"},"tags":{"type":"array","description":"Array of tag names to add","items":{"type":"string"}}},"required":["subscriberUid","tags"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.create","description":"Create a new tag in Zagomail.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Name of the tag to create"},"description":{"type":"string","description":"Optional description of the tag"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.get","description":"Get campaign details by campaign ID.","parameters":{"type":"object","properties":{"campaignId":{"type":"string","description":"Unique identifier of the campaign"}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.list","description":"List all campaigns.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of results"},"offset":{"type":"integer","description":"Offset for pagination"},"status":{"type":"string","description":"Filter by campaign status"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.delete","description":"Delete a subscriber from Zagomail.","parameters":{"type":"object","properties":{"subscriberUid":{"type":"string","description":"Unique identifier of the subscriber to delete"}},"required":["subscriberUid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.unsubscribe","description":"Unsubscribe a subscriber.","parameters":{"type":"object","properties":{"subscriberUid":{"type":"string","description":"Unique identifier of the subscriber"},"reason":{"type":"string","description":"Optional reason for unsubscribing"}},"required":["subscriberUid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.delete","description":"Delete a tag from Zagomail.","parameters":{"type":"object","properties":{"tagId":{"type":"string","description":"Unique identifier of the tag to delete"}},"required":["tagId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.send","description":"Send a campaign immediately.","parameters":{"type":"object","properties":{"campaignId":{"type":"string","description":"Unique identifier of the campaign to send"},"scheduleAt":{"type":"string","description":"Optional ISO timestamp to schedule the send instead of immediate"}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"zapier","displayName":"Zapier","description":"Trigger Zapier Zaps from agents — POST payloads to per-Zap catch hooks and manage Zaps via the Zapier REST Hooks API.","auth":{"kind":"api-key","hint":"Zapier API key (Bearer token) from https://zapier.com/app/developer. Used as `Authorization: Bearer <key>`. Not required for unauthenticated catch-hook POSTs — those use the per-Zap hook URL."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"triggers.catch","description":"POST a JSON payload to a Zapier Catch Hook. Supply the two path segments from the Zap-owned URL; the provider host is fixed so credentials cannot be redirected.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Numeric account segment after `/hooks/catch/` in the Zapier hook URL."},"hookId":{"type":"string","description":"Secret hook segment after the account id in the Zapier hook URL."},"payload":{"type":"object","description":"Arbitrary JSON delivered to the Zap as the trigger event."}},"required":["accountId","hookId","payload"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"zaps.list","description":"List Zaps owned by the authenticated account via the Zapier REST Hooks API (https://api.zapier.com/v1/zaps).","parameters":{"type":"object","properties":{"status":{"type":"string","enum":["on","off"],"description":"Filter to Zaps in this state."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"zaps.get","description":"Read a single Zap by id from the Zapier REST Hooks API.","parameters":{"type":"object","properties":{"zapId":{"type":"string"}},"required":["zapId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"actions.list","description":"List Natural Language Actions (NLA) exposed to the authenticated Zapier account. Returns each exposed action and the args it accepts; feed the results to `actions.execute` to run one.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"actions.execute","description":"Execute a Zapier Natural Language Action by `action_id`. `instructions` is the natural-language directive Zapier's NLA layer parses into the action's argument fields. Set `preview_only: true` to return the parsed args without performing the side-effect — useful for surfacing a confirmation step before committing.","parameters":{"type":"object","properties":{"action_id":{"type":"string","description":"The exposed NLA action id (from `actions.list`)."},"instructions":{"type":"string","description":"Natural-language directive that Zapier maps onto the action's required + optional fields."},"preview_only":{"type":"boolean","default":false,"description":"When true, Zapier returns the parsed args without executing the underlying side-effect."}},"required":["action_id","instructions"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"zendesk","displayName":"Zendesk","description":"Search, read, create, and update Zendesk support tickets and end users.","auth":{"kind":"oauth2","authorizationUrl":"https://{subdomain}.zendesk.com/oauth/authorizations/new","tokenUrl":"https://{subdomain}.zendesk.com/oauth/tokens","scopes":["read","write"],"clientIdEnv":"ZENDESK_OAUTH_CLIENT_ID","clientSecretEnv":"ZENDESK_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tickets.search","description":"Search tickets using the Zendesk search query syntax (e.g. status:open priority:high).","parameters":{"type":"object","properties":{"query":{"type":"string"},"sort_by":{"type":"string"},"sort_order":{"type":"string","enum":["asc","desc"]},"per_page":{"type":"integer"}},"required":["query"]},"requiredScopes":["read"],"class":"read"},{"name":"tickets.get","description":"Read a single Zendesk ticket by id.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"}},"required":["ticketId"]},"requiredScopes":["read"],"class":"read"},{"name":"tickets.create","description":"Create a Zendesk ticket. Pass the Zendesk ticket payload under `ticket`.","parameters":{"type":"object","properties":{"ticket":{"type":"object"}},"required":["ticket"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.update","description":"Update a Zendesk ticket. Pass the Zendesk ticket payload under `ticket`.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"},"ticket":{"type":"object"}},"required":["ticketId","ticket"]},"requiredScopes":["write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"users.search","description":"Search end users (the Zendesk requesters/customers).","parameters":{"type":"object","properties":{"query":{"type":"string"},"per_page":{"type":"integer"}},"required":["query"]},"requiredScopes":["read"],"class":"read"},{"name":"users.create","description":"Create a Zendesk end user. Pass the Zendesk user payload under `user`.","parameters":{"type":"object","properties":{"user":{"type":"object"}},"required":["user"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.delete","description":"Delete a Zendesk ticket by id. Soft-deletes per Zendesk retention rules.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"}},"required":["ticketId"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.merge","description":"Merge one or more source tickets into a target ticket. `ids` lists the source tickets to merge into `ticketId`. Pass optional comments under `target_comment` / `source_comment`.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"},"ids":{"type":"array","items":{"type":"string"}},"target_comment":{"type":"string"},"source_comment":{"type":"string"}},"required":["ticketId","ids"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.add-comment","description":"Add a public or internal comment to an existing ticket. Set `public` to false for an internal note.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"},"body":{"type":"string"},"public":{"type":"boolean"}},"required":["ticketId","body","public"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.update","description":"Update a Zendesk end user. Pass the Zendesk user payload under `user`.","parameters":{"type":"object","properties":{"userId":{"type":"string"},"user":{"type":"object"}},"required":["userId","user"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.delete","description":"Delete a Zendesk end user by id. Soft-deletes per Zendesk retention rules.","parameters":{"type":"object","properties":{"userId":{"type":"string"}},"required":["userId"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"zendesk-sell","displayName":"Zendesk Sell","description":"Manage CRM data with Zendesk Sell for pipeline management, lead tracking, and contact organization.","auth":{"kind":"api-key","hint":"Zendesk Sell API Token."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.create","description":"Create a new contact in Zendesk Sell.","parameters":{"type":"object","properties":{"isOrganization":{"type":"boolean"},"name":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"mobile":{"type":"string"},"address":{"type":"object"},"customFields":{"type":"object"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.find","description":"Find contacts by criteria.","parameters":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"},"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.update","description":"Update an existing contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"name":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"mobile":{"type":"string"},"address":{"type":"object"},"customFields":{"type":"object"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"leads.create","description":"Create a new lead.","parameters":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"organizationName":{"type":"string"},"status":{"type":"string"},"title":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.find","description":"Find leads by criteria.","parameters":{"type":"object","properties":{"status":{"type":"string"},"email":{"type":"string"},"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"deals.create","description":"Create a new deal.","parameters":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"number"},"currency":{"type":"string"},"estimatedCloseDate":{"type":"string"},"hot":{"type":"boolean"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deals.find","description":"Find a deal by ID or name.","parameters":{"type":"object","properties":{"dealId":{"type":"number"},"dealName":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"deals.update","description":"Update an existing deal.","parameters":{"type":"object","properties":{"dealId":{"type":"string"},"name":{"type":"string"},"value":{"type":"number"},"currency":{"type":"string"},"estimatedCloseDate":{"type":"string"},"hot":{"type":"boolean"}},"required":["dealId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"notes.create","description":"Create a note attached to a resource.","parameters":{"type":"object","properties":{"resourceType":{"type":"string"},"resourceId":{"type":"string"},"content":{"type":"string"},"isImportant":{"type":"boolean"}},"required":["resourceType","resourceId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.delete","description":"Delete a contact from Zendesk Sell.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact identifier to delete"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update","description":"Update an existing lead.","parameters":{"type":"object","properties":{"leadId":{"type":"string","description":"Lead identifier to update"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"organizationName":{"type":"string"},"status":{"type":"string"},"title":{"type":"string"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.delete","description":"Delete a lead.","parameters":{"type":"object","properties":{"leadId":{"type":"string","description":"Lead identifier to delete"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deals.delete","description":"Delete a deal.","parameters":{"type":"object","properties":{"dealId":{"type":"string","description":"Deal identifier to delete"}},"required":["dealId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.create","description":"Create a task in Zendesk Sell.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"Task title"},"description":{"type":"string","description":"Task description"},"dueDate":{"type":"string","description":"Due date (ISO 8601)"},"ownerId":{"type":"string","description":"Task owner identifier"},"resourceType":{"type":"string","description":"Associated resource type (e.g., contact, lead, deal)"},"resourceId":{"type":"string","description":"Associated resource identifier"},"completed":{"type":"boolean","description":"Whether the task is completed"}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"zenrows","displayName":"ZenRows","description":"Render and scrape any web page through ZenRows' Universal Scraper API, handling proxy rotation, headless browsers, and anti-bot bypass.","auth":{"kind":"api-key","hint":"API key from your ZenRows dashboard. Sent as the apikey query parameter."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"page.scrape","description":"Fetch a URL and return its HTML, optionally rendering JavaScript and routing through premium residential proxies.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Target URL to scrape."},"js_render":{"type":"boolean","description":"Render the page with a headless browser."},"premium_proxy":{"type":"boolean","description":"Route the request through residential proxies."},"proxy_country":{"type":"string","description":"Two-letter country code for proxy geolocation."},"wait":{"type":"integer","description":"Fixed delay in milliseconds after page load."},"wait_for":{"type":"string","description":"CSS selector to wait for in the DOM before returning."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"page.extract","description":"Scrape a URL and return structured data extracted via CSS selectors or ZenRows' automatic parser.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Target URL to scrape."},"css_extractor":{"type":"string","description":"JSON string mapping output keys to CSS selectors."},"autoparse":{"type":"boolean","description":"Automatically extract structured data from supported sites."},"js_render":{"type":"boolean","description":"Render the page with a headless browser."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"page.markdown","description":"Fetch a URL and return its content converted to Markdown, plaintext, or PDF.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Target URL to scrape."},"response_type":{"type":"string","description":"Output conversion type, e.g. markdown, plaintext, or pdf."},"js_render":{"type":"boolean","description":"Render the page with a headless browser."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"zeplin","displayName":"Zeplin","description":"Collaborate on design projects in Zeplin: find and update projects and screens, create notes on designs.","auth":{"kind":"api-key","hint":"Zeplin API token."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"projects.search","description":"Find a project by name.","parameters":{"type":"object","properties":{"projectName":{"type":"string"}},"required":["projectName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.update","description":"Update a project name or description.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"screens.search","description":"Find a screen by name within a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"screenName":{"type":"string"}},"required":["projectId","screenName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"screens.update","description":"Update a screen in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"screenId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}},"required":["projectId","screenId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"notes.create","description":"Create a note on a design screen.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"screenId":{"type":"string"},"content":{"type":"string"},"color":{"type":"string"},"x":{"type":"number"},"y":{"type":"number"},"xStart":{"type":"number"},"yStart":{"type":"number"}},"required":["projectId","screenId","content","color","x","y"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.update","description":"Update an existing screen note (content and/or color).","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"screenId":{"type":"string"},"noteId":{"type":"string"},"content":{"type":"string"},"color":{"type":"string"}},"required":["projectId","screenId","noteId","content","color"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.delete","description":"Delete a screen note by id.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"screenId":{"type":"string"},"noteId":{"type":"string"}},"required":["projectId","screenId","noteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.list","description":"List all projects the authenticated user has access to.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0},"status":{"type":"string","enum":["active","archived","all"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"components.list","description":"List style-guide components for a given project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"zerobounce","displayName":"ZeroBounce","description":"Email validation and verification via the ZeroBounce REST API.","auth":{"kind":"api-key","hint":"ZeroBounce API key from your account dashboard."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"validate.email","description":"Validate a single email address. Returns status (valid, invalid, catch-all, unknown, spamtrap, abuse), bounce type, and additional metadata.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"The email address to validate."},"ipAddress":{"type":"string","description":"Optional IP address of the user submitting the email address. Can improve accuracy when provided."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"zoho-bookings","displayName":"Zoho Bookings","description":"Discover services and staff, check availability, and manage Zoho Bookings appointments.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.zoho.com/oauth/v2/auth","tokenUrl":"https://accounts.zoho.com/oauth/v2/token","scopes":["zohobookings.data.CREATE","zohobookings.data.READ"],"scopeSeparator":",","clientIdEnv":"ZOHO_OAUTH_CLIENT_ID","clientSecretEnv":"ZOHO_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent"}},"category":"calendar","defaultConsistencyModel":"authoritative","capabilities":[{"name":"workspaces.list","class":"read","description":"List Zoho Bookings workspaces.","parameters":{"type":"object","properties":{}},"requiredScopes":["zohobookings.data.READ"]},{"name":"services.list","class":"read","description":"List services, optionally within one workspace.","parameters":{"type":"object","properties":{"workspace_id":{"type":"string"}}},"requiredScopes":["zohobookings.data.READ"]},{"name":"resources.list","class":"read","description":"List bookable resources, optionally for one service.","parameters":{"type":"object","properties":{"service_id":{"type":"string"}}},"requiredScopes":["zohobookings.data.READ"]},{"name":"staff.list","class":"read","description":"List staff, optionally for one service.","parameters":{"type":"object","properties":{"service_id":{"type":"string"}}},"requiredScopes":["zohobookings.data.READ"]},{"name":"appointments.list","class":"read","description":"List appointments from a required start time.","parameters":{"type":"object","properties":{"from_time":{"type":"string","description":"Zoho timestamp in dd-MMM-yyyy HH:mm:ss format."},"to_time":{"type":"string"},"service_id":{"type":"string"},"staff_id":{"type":"string"},"status":{"type":"string"}},"required":["from_time"]},"requiredScopes":["zohobookings.data.READ"]},{"name":"appointments.get","class":"read","description":"Read one appointment by booking id.","parameters":{"type":"object","properties":{"booking_id":{"type":"string"}},"required":["booking_id"]},"requiredScopes":["zohobookings.data.READ"]},{"name":"availability.fetch","class":"read","description":"Fetch open time slots for a service and date.","parameters":{"type":"object","properties":{"service_id":{"type":"string"},"selected_date":{"type":"string","description":"Date in YYYY-MM-DD format."},"staff_id":{"type":"string"},"group_id":{"type":"string"},"resource_id":{"type":"string"}},"required":["service_id","selected_date"]},"requiredScopes":["zohobookings.data.READ"]},{"name":"appointments.book","class":"mutation","description":"Book an appointment for a customer.","parameters":{"type":"object","properties":{"service_id":{"type":"string"},"from_time":{"type":"string","description":"Zoho timestamp in dd-MMM-yyyy HH:mm:ss format."},"customer_details":{"type":"object","description":"Customer name, email, and phone_number."},"staff_id":{"type":"string"},"resource_id":{"type":"string"},"group_id":{"type":"string"},"to_time":{"type":"string"},"timezone":{"type":"string"},"notes":{"type":"string"},"additional_fields":{"type":"object"},"payment_info":{"type":"object"}},"required":["service_id","from_time","customer_details"]},"cas":"native-idempotency","externalEffect":true,"requiredScopes":["zohobookings.data.CREATE"]},{"name":"appointments.reschedule","class":"mutation","description":"Move an appointment to a new time, staff member, or group.","parameters":{"type":"object","properties":{"booking_id":{"type":"string"},"start_time":{"type":"string","description":"Zoho timestamp in dd-MMM-yyyy HH:mm:ss format."},"staff_id":{"type":"string"},"group_id":{"type":"string"}},"required":["booking_id"]},"cas":"native-idempotency","externalEffect":true,"requiredScopes":["zohobookings.data.CREATE"]},{"name":"appointments.cancel","class":"mutation","description":"Cancel an appointment by booking id.","parameters":{"type":"object","properties":{"booking_id":{"type":"string"}},"required":["booking_id"]},"cas":"native-idempotency","externalEffect":true,"requiredScopes":["zohobookings.data.CREATE"]}]},{"kind":"zoho-books","displayName":"Zoho Books","description":"Manage Zoho Books organizations, contacts, invoices, and customer payments.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.zoho.com/oauth/v2/auth","tokenUrl":"https://accounts.zoho.com/oauth/v2/token","scopes":["ZohoBooks.fullaccess.all"],"scopeSeparator":",","clientIdEnv":"ZOHO_OAUTH_CLIENT_ID","clientSecretEnv":"ZOHO_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent"},"tokenMetadata":{"apiDomain":{"field":"api_domain","required":true}}},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"organizations.list","description":"List organizations available to the connected Zoho Books user.","parameters":{"type":"object","properties":{}},"requiredScopes":["ZohoBooks.fullaccess.all"],"class":"read"},{"name":"contacts.list","description":"List customers and vendors in a Zoho Books organization.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Books organization id. Discover it with organizations.list."},"contact_type":{"type":"string","enum":["customer","vendor"]},"search_text":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":200}},"required":["organization_id"]},"requiredScopes":["ZohoBooks.fullaccess.all"],"class":"read"},{"name":"contacts.get","description":"Read one Zoho Books contact.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Books organization id. Discover it with organizations.list."},"contactId":{"type":"string"}},"required":["organization_id","contactId"]},"requiredScopes":["ZohoBooks.fullaccess.all"],"class":"read"},{"name":"contacts.create","description":"Create a customer or vendor in Zoho Books.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Books organization id. Discover it with organizations.list."},"data":{"type":"object","description":"Provider-native Zoho Books request body."}},"required":["organization_id","data"]},"requiredScopes":["ZohoBooks.fullaccess.all"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update an existing Zoho Books contact.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Books organization id. Discover it with organizations.list."},"contactId":{"type":"string"},"data":{"type":"object","description":"Provider-native Zoho Books request body."}},"required":["organization_id","contactId","data"]},"requiredScopes":["ZohoBooks.fullaccess.all"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"invoices.list","description":"List invoices with optional customer and status filters.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Books organization id. Discover it with organizations.list."},"customer_id":{"type":"string"},"status":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":200}},"required":["organization_id"]},"requiredScopes":["ZohoBooks.fullaccess.all"],"class":"read"},{"name":"invoices.get","description":"Read one Zoho Books invoice.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Books organization id. Discover it with organizations.list."},"invoiceId":{"type":"string"}},"required":["organization_id","invoiceId"]},"requiredScopes":["ZohoBooks.fullaccess.all"],"class":"read"},{"name":"invoices.create","description":"Create an invoice in Zoho Books.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Books organization id. Discover it with organizations.list."},"data":{"type":"object","description":"Provider-native Zoho Books request body."}},"required":["organization_id","data"]},"requiredScopes":["ZohoBooks.fullaccess.all"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.update","description":"Update a Zoho Books invoice.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Books organization id. Discover it with organizations.list."},"invoiceId":{"type":"string"},"data":{"type":"object","description":"Provider-native Zoho Books request body."}},"required":["organization_id","invoiceId","data"]},"requiredScopes":["ZohoBooks.fullaccess.all"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"invoices.send","description":"Email an existing invoice to its configured recipients.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Books organization id. Discover it with organizations.list."},"invoiceId":{"type":"string"},"data":{"type":"object","description":"Provider-native Zoho Books request body."}},"required":["organization_id","invoiceId","data"]},"requiredScopes":["ZohoBooks.fullaccess.all"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customer-payments.list","description":"List customer payments in a Zoho Books organization.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Books organization id. Discover it with organizations.list."},"customer_id":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":200}},"required":["organization_id"]},"requiredScopes":["ZohoBooks.fullaccess.all"],"class":"read"}]},{"kind":"zoho-campaigns","displayName":"Zoho Campaigns","description":"Manage Zoho Campaigns mailing lists, contacts, campaign drafts, and sends.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.zoho.com/oauth/v2/auth","tokenUrl":"https://accounts.zoho.com/oauth/v2/token","scopes":["ZohoCampaigns.campaign.ALL","ZohoCampaigns.contact.ALL"],"scopeSeparator":",","clientIdEnv":"ZOHO_OAUTH_CLIENT_ID","clientSecretEnv":"ZOHO_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent"}},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"campaigns.list","class":"read","description":"List recent campaigns with optional status and pagination filters.","parameters":{"type":"object","properties":{"status":{"type":"string"},"fromindex":{"type":"integer","minimum":1},"range":{"type":"integer","minimum":1,"maximum":200}}},"requiredScopes":["ZohoCampaigns.campaign.ALL"]},{"name":"mailing-lists.list","class":"read","description":"List mailing lists in Zoho Campaigns.","parameters":{"type":"object","properties":{"fromindex":{"type":"integer","minimum":1},"range":{"type":"integer","minimum":1,"maximum":200}}},"requiredScopes":["ZohoCampaigns.contact.ALL"]},{"name":"contacts.list","class":"read","description":"List contacts subscribed to one mailing list.","parameters":{"type":"object","properties":{"listkey":{"type":"string"},"status":{"type":"string"},"fromindex":{"type":"integer","minimum":1},"range":{"type":"integer","minimum":1,"maximum":200}},"required":["listkey"]},"requiredScopes":["ZohoCampaigns.contact.ALL"]},{"name":"contacts.upsert","class":"mutation","description":"Add or update a contact in a mailing list, keyed by email address.","parameters":{"type":"object","properties":{"listkey":{"type":"string"},"contactinfo":{"type":"object","description":"Contact fields. Email Address is required by Zoho Campaigns."},"source":{"type":"string"},"topic_id":{"type":"string"}},"required":["listkey","contactinfo"]},"cas":"native-idempotency","externalEffect":true,"requiredScopes":["ZohoCampaigns.contact.ALL"]},{"name":"contacts.unsubscribe","class":"mutation","description":"Unsubscribe a contact from a mailing list.","parameters":{"type":"object","properties":{"listkey":{"type":"string"},"contactinfo":{"type":"object","description":"Contact identifier fields, normally Email Address."},"topic_id":{"type":"string"}},"required":["listkey","contactinfo"]},"cas":"native-idempotency","externalEffect":true,"requiredScopes":["ZohoCampaigns.contact.ALL"]},{"name":"campaigns.create","class":"mutation","description":"Create a draft campaign targeting one or more mailing lists.","parameters":{"type":"object","properties":{"campaignname":{"type":"string"},"subject":{"type":"string"},"from_name":{"type":"string"},"from_email":{"type":"string"},"reply_to":{"type":"string"},"list_details":{"type":"object","description":"Map of mailing-list key to segment keys; use an empty array for the full list."},"topicId":{"type":"string"},"content_url":{"type":"string"},"email_content":{"type":"string"}},"required":["campaignname","subject","from_name","from_email","list_details"]},"cas":"native-idempotency","externalEffect":true,"requiredScopes":["ZohoCampaigns.campaign.ALL"]},{"name":"campaigns.clone","class":"mutation","description":"Clone an existing campaign into a new draft.","parameters":{"type":"object","properties":{"campaigninfo":{"type":"object","description":"Zoho clone payload, including campaign key and new campaign name."}},"required":["campaigninfo"]},"cas":"native-idempotency","externalEffect":true,"requiredScopes":["ZohoCampaigns.campaign.ALL"]},{"name":"campaigns.send","class":"mutation","description":"Send an existing draft campaign to its configured recipients.","parameters":{"type":"object","properties":{"campaignkey":{"type":"string"}},"required":["campaignkey"]},"cas":"native-idempotency","externalEffect":true,"requiredScopes":["ZohoCampaigns.campaign.ALL"]}]},{"kind":"zoho-crm","displayName":"Zoho CRM","description":"Search Zoho CRM records, read records by id, and create or update modules such as Leads, Contacts, Accounts, and Deals.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.zoho.com/oauth/v2/auth","tokenUrl":"https://accounts.zoho.com/oauth/v2/token","scopes":["ZohoCRM.modules.ALL","ZohoCRM.users.READ","ZohoCRM.settings.READ"],"scopeSeparator":",","clientIdEnv":"ZOHO_OAUTH_CLIENT_ID","clientSecretEnv":"ZOHO_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent"},"tokenMetadata":{"apiDomain":{"field":"api_domain","required":true}}},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.list","description":"List records in a module with pagination and optional field projection.","parameters":{"type":"object","properties":{"module":{"type":"string","description":"CRM module API name, e.g. Leads, Contacts, Accounts, Deals, Tasks."},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":200},"fields":{"type":"string","description":"Comma-separated list of field API names to project."},"sort_by":{"type":"string"},"sort_order":{"type":"string","enum":["asc","desc"]}},"required":["module"]},"requiredScopes":["ZohoCRM.modules.ALL"],"class":"read"},{"name":"records.search","description":"Search records in a module by criteria, email, phone, or word. Supply at least one filter.","parameters":{"type":"object","properties":{"module":{"type":"string","description":"CRM module API name, e.g. Leads, Contacts, Accounts, Deals, Tasks."},"criteria":{"type":"string","description":"Zoho criteria syntax, e.g. (Last_Name:equals:Smith)"},"email":{"type":"string"},"phone":{"type":"string"},"word":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":200}},"required":["module"]},"requiredScopes":["ZohoCRM.modules.ALL"],"class":"read"},{"name":"records.get","description":"Read a single Zoho CRM record by id.","parameters":{"type":"object","properties":{"module":{"type":"string","description":"CRM module API name, e.g. Leads, Contacts, Accounts, Deals, Tasks."},"recordId":{"type":"string"},"fields":{"type":"string","description":"Comma-separated list of field API names to project."}},"required":["module","recordId"]},"requiredScopes":["ZohoCRM.modules.ALL"],"class":"read"},{"name":"records.create","description":"Create one or more records in a module (batched up to 100 per call).","parameters":{"type":"object","properties":{"module":{"type":"string","description":"CRM module API name, e.g. Leads, Contacts, Accounts, Deals, Tasks."},"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Zoho v6 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["module","data"]},"requiredScopes":["ZohoCRM.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Update an existing Zoho CRM record by id. Pass `data: [{ ...patch }]`.","parameters":{"type":"object","properties":{"module":{"type":"string","description":"CRM module API name, e.g. Leads, Contacts, Accounts, Deals, Tasks."},"recordId":{"type":"string"},"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Zoho v6 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["module","recordId","data"]},"requiredScopes":["ZohoCRM.modules.ALL"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.upsert","description":"Upsert records into a module using duplicate_check_fields. Inserts on miss, updates on match.","parameters":{"type":"object","properties":{"module":{"type":"string","description":"CRM module API name, e.g. Leads, Contacts, Accounts, Deals, Tasks."},"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Zoho v6 accepts up to 100 records per call.","minItems":1,"maxItems":100},"duplicate_check_fields":{"type":"array","items":{"type":"string"},"description":"Field API names Zoho should use to detect an existing record."},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["module","data","duplicate_check_fields"]},"requiredScopes":["ZohoCRM.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.delete","description":"Delete a record by id. wf_trigger=false suppresses workflows attached to the module.","parameters":{"type":"object","properties":{"module":{"type":"string","description":"CRM module API name, e.g. Leads, Contacts, Accounts, Deals, Tasks."},"recordId":{"type":"string"},"wf_trigger":{"type":"boolean"}},"required":["module","recordId"]},"requiredScopes":["ZohoCRM.modules.ALL"],"class":"mutation","cas":"none","externalEffect":true},{"name":"records.convert","description":"Convert a Lead into Contact + optional Account/Deal. data[0] carries the conversion payload (Contacts/Accounts/Deals sub-objects, Notify_Lead_Owner, overwrite, etc.).","parameters":{"type":"object","properties":{"leadId":{"type":"string","description":"Lead record id to convert."},"data":{"type":"array","items":{"type":"object"},"description":"Single-element array with the Zoho conversion payload (Contacts, Accounts, Deals, Notify_Lead_Owner, overwrite, etc.).","minItems":1,"maxItems":1}},"required":["leadId","data"]},"requiredScopes":["ZohoCRM.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.assign","description":"Reassign one or more records in a module to a new owner. data[0] must carry the new Owner sub-object (e.g. { Owner: { id: \"USER_ID\" } }).","parameters":{"type":"object","properties":{"module":{"type":"string","description":"CRM module API name, e.g. Leads, Contacts, Accounts, Deals, Tasks."},"ids":{"type":"array","items":{"type":"string"},"description":"Record ids to reassign (up to 100 per call).","minItems":1,"maxItems":100},"data":{"type":"array","items":{"type":"object"},"description":"Single-element array carrying the Owner sub-object Zoho should apply to every id.","minItems":1,"maxItems":1}},"required":["module","ids","data"]},"requiredScopes":["ZohoCRM.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.create","description":"Attach a note to a record. data[0] must include Note_Title (optional), Note_Content, Parent_Id, and se_module (the parent module API name).","parameters":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"},"description":"Note records (Note_Title, Note_Content, Parent_Id, se_module). Up to 100 per call.","minItems":1,"maxItems":100}},"required":["data"]},"requiredScopes":["ZohoCRM.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.upload","description":"Attach a file to a record by URL. Zoho fetches the URL server-side and links the resulting attachment to the parent record.","parameters":{"type":"object","properties":{"module":{"type":"string","description":"CRM module API name, e.g. Leads, Contacts, Accounts, Deals, Tasks."},"recordId":{"type":"string"},"attachmentUrl":{"type":"string","description":"Publicly reachable URL Zoho will fetch and attach."}},"required":["module","recordId","attachmentUrl"]},"requiredScopes":["ZohoCRM.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"zoho-desk","displayName":"Zoho Desk","description":"Discover organizations, manage support tickets, and find contacts in Zoho Desk.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.zoho.com/oauth/v2/auth","tokenUrl":"https://accounts.zoho.com/oauth/v2/token","scopes":["Desk.tickets.ALL","Desk.contacts.READ","Desk.search.READ","Desk.basic.READ"],"scopeSeparator":",","clientIdEnv":"ZOHO_OAUTH_CLIENT_ID","clientSecretEnv":"ZOHO_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent"}},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"organizations.list","description":"List Zoho Desk organizations available to the connected user.","parameters":{"type":"object","properties":{}},"requiredScopes":["Desk.basic.READ"],"class":"read"},{"name":"tickets.list","description":"List tickets within one Zoho Desk organization.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"Zoho Desk organization id. Discover it with organizations.list."},"include":{"type":"string","description":"Comma-separated related objects to include."},"from":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":100},"status":{"type":"string"},"departmentId":{"type":"string"}},"required":["orgId"]},"requiredScopes":["Desk.tickets.ALL"],"class":"read"},{"name":"tickets.get","description":"Read one ticket by id.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"Zoho Desk organization id. Discover it with organizations.list."},"ticketId":{"type":"string"}},"required":["orgId","ticketId"]},"requiredScopes":["Desk.tickets.ALL"],"class":"read"},{"name":"tickets.create","description":"Create a ticket in one Zoho Desk organization.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"Zoho Desk organization id. Discover it with organizations.list."},"data":{"type":"object","description":"Provider-native Zoho Desk request body."}},"required":["orgId","data"]},"requiredScopes":["Desk.tickets.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.update","description":"Update an existing ticket.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"Zoho Desk organization id. Discover it with organizations.list."},"ticketId":{"type":"string"},"data":{"type":"object","description":"Provider-native Zoho Desk request body."}},"required":["orgId","ticketId","data"]},"requiredScopes":["Desk.tickets.ALL"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tickets.close","description":"Close a ticket.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"Zoho Desk organization id. Discover it with organizations.list."},"ticketId":{"type":"string"}},"required":["orgId","ticketId"]},"requiredScopes":["Desk.tickets.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.assign","description":"Assign a ticket to an agent.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"Zoho Desk organization id. Discover it with organizations.list."},"ticketId":{"type":"string"},"assigneeId":{"type":"string"}},"required":["orgId","ticketId","assigneeId"]},"requiredScopes":["Desk.tickets.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.add-comment","description":"Add a public or internal comment to a ticket.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"Zoho Desk organization id. Discover it with organizations.list."},"ticketId":{"type":"string"},"content":{"type":"string"},"isPublic":{"type":"boolean"},"contentType":{"type":"string","enum":["html","plainText"]}},"required":["orgId","ticketId","content","isPublic"]},"requiredScopes":["Desk.tickets.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.merge","description":"Merge duplicate tickets into a primary ticket.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"Zoho Desk organization id. Discover it with organizations.list."},"ticketId":{"type":"string","description":"Primary ticket id."},"ids":{"type":"array","items":{"type":"string"},"minItems":1}},"required":["orgId","ticketId","ids"]},"requiredScopes":["Desk.tickets.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.find","description":"Find contacts by exact email address.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"Zoho Desk organization id. Discover it with organizations.list."},"email":{"type":"string"}},"required":["orgId","email"]},"requiredScopes":["Desk.contacts.READ","Desk.search.READ"],"class":"read"}]},{"kind":"zoho-invoice","displayName":"Zoho Invoice","description":"List, create, update, and send invoices through Zoho Invoice.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.zoho.com/oauth/v2/auth","tokenUrl":"https://accounts.zoho.com/oauth/v2/token","scopes":["ZohoInvoice.fullaccess.all"],"scopeSeparator":",","clientIdEnv":"ZOHO_OAUTH_CLIENT_ID","clientSecretEnv":"ZOHO_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent"},"tokenMetadata":{"apiDomain":{"field":"api_domain","required":true}}},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"organizations.list","description":"List organizations available to the connected Zoho Invoice user.","parameters":{"type":"object","properties":{}},"requiredScopes":["ZohoInvoice.fullaccess.all"],"class":"read"},{"name":"invoices.list","description":"List invoices, optionally filtering by modification time, customer, or status.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Invoice organization id. Discover it with organizations.list."},"last_modified_at":{"type":"string","description":"Provider date filter, YYYY-MM-DD."},"customer_id":{"type":"string"},"status":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":200}},"required":["organization_id"]},"requiredScopes":["ZohoInvoice.fullaccess.all"],"class":"read"},{"name":"invoices.get","description":"Read one Zoho Invoice invoice.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Invoice organization id. Discover it with organizations.list."},"invoiceId":{"type":"string"}},"required":["organization_id","invoiceId"]},"requiredScopes":["ZohoInvoice.fullaccess.all"],"class":"read"},{"name":"invoices.create","description":"Create a Zoho Invoice invoice.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Invoice organization id. Discover it with organizations.list."},"data":{"type":"object","description":"Provider-native Zoho Invoice request body."}},"required":["organization_id","data"]},"requiredScopes":["ZohoInvoice.fullaccess.all"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.update","description":"Update a Zoho Invoice invoice.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Invoice organization id. Discover it with organizations.list."},"invoiceId":{"type":"string"},"data":{"type":"object","description":"Provider-native Zoho Invoice request body."}},"required":["organization_id","invoiceId","data"]},"requiredScopes":["ZohoInvoice.fullaccess.all"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"invoices.send","description":"Email an existing Zoho Invoice invoice to its configured recipients.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Invoice organization id. Discover it with organizations.list."},"invoiceId":{"type":"string"},"data":{"type":"object","description":"Provider-native Zoho Invoice request body."}},"required":["organization_id","invoiceId","data"]},"requiredScopes":["ZohoInvoice.fullaccess.all"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"zoho-mail","displayName":"Zoho Mail","description":"Read, organize, and send mail through Zoho Mail.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.zoho.com/oauth/v2/auth","tokenUrl":"https://accounts.zoho.com/oauth/v2/token","scopes":["ZohoMail.accounts.READ","ZohoMail.messages.ALL","ZohoMail.folders.ALL","ZohoMail.organization.accounts.READ"],"scopeSeparator":",","clientIdEnv":"ZOHO_OAUTH_CLIENT_ID","clientSecretEnv":"ZOHO_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent"}},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"accounts.list","description":"List Zoho Mail accounts available to the connected user.","parameters":{"type":"object","properties":{}},"requiredScopes":["ZohoMail.accounts.READ"],"class":"read"},{"name":"folders.list","description":"List folders for one Zoho Mail account.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Zoho Mail account id."}},"required":["accountId"]},"requiredScopes":["ZohoMail.folders.ALL"],"class":"read"},{"name":"messages.list","description":"List messages for a folder with offset pagination.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Zoho Mail account id."},"folderId":{"type":"string"},"start":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":200}},"required":["accountId"]},"requiredScopes":["ZohoMail.messages.ALL"],"class":"read"},{"name":"messages.get-original","description":"Fetch the original RFC 822 content for a message.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Zoho Mail account id."},"messageId":{"type":"string","description":"Zoho Mail message id."}},"required":["accountId","messageId"]},"requiredScopes":["ZohoMail.messages.ALL"],"class":"read"},{"name":"messages.mark-read","description":"mark-read one Zoho Mail message.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Zoho Mail account id."},"messageId":{"type":"string","description":"Zoho Mail message id."}},"required":["accountId","messageId"]},"requiredScopes":["ZohoMail.messages.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.mark-unread","description":"mark-unread one Zoho Mail message.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Zoho Mail account id."},"messageId":{"type":"string","description":"Zoho Mail message id."}},"required":["accountId","messageId"]},"requiredScopes":["ZohoMail.messages.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.archive","description":"archive one Zoho Mail message.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Zoho Mail account id."},"messageId":{"type":"string","description":"Zoho Mail message id."}},"required":["accountId","messageId"]},"requiredScopes":["ZohoMail.messages.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.unarchive","description":"unarchive one Zoho Mail message.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Zoho Mail account id."},"messageId":{"type":"string","description":"Zoho Mail message id."}},"required":["accountId","messageId"]},"requiredScopes":["ZohoMail.messages.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.move","description":"Move one message to another folder.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Zoho Mail account id."},"messageId":{"type":"string","description":"Zoho Mail message id."},"folderId":{"type":"string","description":"Current folder id."},"destinationFolderId":{"type":"string","description":"Destination folder id."}},"required":["accountId","messageId","folderId","destinationFolderId"]},"requiredScopes":["ZohoMail.messages.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send","description":"Send a new Zoho Mail message.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Zoho Mail account id."},"fromAddress":{"type":"string"},"toAddress":{"type":"string"},"ccAddress":{"type":"string"},"bccAddress":{"type":"string"},"subject":{"type":"string"},"content":{"type":"string"},"mailFormat":{"type":"string","enum":["html","plaintext"]},"askReceipt":{"type":"string","enum":["yes","no"]}},"required":["accountId","fromAddress","toAddress","subject","content"]},"requiredScopes":["ZohoMail.messages.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"zoom","displayName":"Zoom","description":"Create and manage Zoom meetings, webinars, users, and cloud recordings via the Zoom API v2.","auth":{"kind":"oauth2","authorizationUrl":"https://zoom.us/oauth/authorize","tokenUrl":"https://zoom.us/oauth/token","scopes":["user:read:user:admin","user:write:user:admin","meeting:read:meeting:admin","meeting:write:meeting:admin","meeting:update:meeting:admin","meeting:delete:meeting:admin","webinar:read:webinar:admin","webinar:write:webinar:admin","webinar:update:webinar:admin","webinar:delete:webinar:admin","cloud_recording:read:recording:admin","cloud_recording:delete:recording_file:admin"],"clientIdEnv":"ZOOM_OAUTH_CLIENT_ID","clientSecretEnv":"ZOOM_OAUTH_CLIENT_SECRET"},"category":"calendar","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.get","description":"Read a Zoom user by id, email, or the \"me\" alias for the authenticated user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"User id, email address, or \"me\"."}},"required":["userId"]},"requiredScopes":["user:read:user:admin"],"class":"read"},{"name":"users.list","description":"List users on the Zoom account.","parameters":{"type":"object","properties":{"status":{"type":"string","enum":["active","inactive","pending"]},"page_size":{"type":"integer","minimum":1,"maximum":300},"next_page_token":{"type":"string"},"role_id":{"type":"string"}}},"requiredScopes":["user:read:user:admin"],"class":"read"},{"name":"meetings.list","description":"List meetings for a user (scheduled, live, or upcoming).","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"User id, email, or \"me\"."},"type":{"type":"string","enum":["scheduled","live","upcoming","upcoming_meetings","previous_meetings"],"description":"Subset of meetings to return; defaults to scheduled."},"page_size":{"type":"integer","minimum":1,"maximum":300},"next_page_token":{"type":"string"}},"required":["userId"]},"requiredScopes":["meeting:read:meeting:admin"],"class":"read"},{"name":"meetings.get","description":"Read a Zoom meeting by numeric meeting id.","parameters":{"type":"object","properties":{"meetingId":{"type":"string","description":"Numeric Zoom meeting id."},"occurrence_id":{"type":"string","description":"Optional recurring-meeting occurrence id."}},"required":["meetingId"]},"requiredScopes":["meeting:read:meeting:admin"],"class":"read"},{"name":"meetings.create","description":"Schedule a Zoom meeting for a user. Body follows the v2 meetings contract (topic, start_time, duration, type, settings, ...).","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"User id, email, or \"me\"."},"topic":{"type":"string"},"type":{"type":"integer","enum":[1,2,3,8],"description":"1=instant, 2=scheduled, 3=recurring no fixed time, 8=recurring with fixed time."},"start_time":{"type":"string","description":"ISO-8601 start time (UTC or with offset)."},"duration":{"type":"integer","description":"Meeting length in minutes."},"timezone":{"type":"string"},"password":{"type":"string"},"agenda":{"type":"string"},"settings":{"type":"object"},"recurrence":{"type":"object"},"tracking_fields":{"type":"array","items":{"type":"object"}}},"required":["userId","topic"]},"requiredScopes":["meeting:write:meeting:admin"],"class":"mutation","cas":"none","externalEffect":true},{"name":"meetings.update","description":"Update a scheduled Zoom meeting in place.","parameters":{"type":"object","properties":{"meetingId":{"type":"string"},"occurrence_id":{"type":"string"},"topic":{"type":"string"},"start_time":{"type":"string"},"duration":{"type":"integer"},"timezone":{"type":"string"},"password":{"type":"string"},"agenda":{"type":"string"},"settings":{"type":"object"},"recurrence":{"type":"object"}},"required":["meetingId"]},"requiredScopes":["meeting:update:meeting:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"meetings.delete","description":"Delete a Zoom meeting. Optionally notify hosts/registrants and scope to a single occurrence.","parameters":{"type":"object","properties":{"meetingId":{"type":"string"},"occurrence_id":{"type":"string"},"schedule_for_reminder":{"type":"boolean"},"cancel_meeting_reminder":{"type":"boolean"}},"required":["meetingId"]},"requiredScopes":["meeting:delete:meeting:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"meetings.list-registrants","description":"List registrants for a Zoom meeting.","parameters":{"type":"object","properties":{"meetingId":{"type":"string"},"occurrence_id":{"type":"string"},"status":{"type":"string","enum":["pending","approved","denied"]},"page_size":{"type":"integer","minimum":1,"maximum":300},"next_page_token":{"type":"string"}},"required":["meetingId"]},"requiredScopes":["meeting:read:meeting:admin"],"class":"read"},{"name":"meetings.add-registrant","description":"Register a participant for a Zoom meeting that requires registration.","parameters":{"type":"object","properties":{"meetingId":{"type":"string"},"occurrence_ids":{"type":"string","description":"Comma-separated occurrence ids for recurring meetings."},"email":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"},"zip":{"type":"string"},"state":{"type":"string"},"phone":{"type":"string"},"industry":{"type":"string"},"org":{"type":"string"},"job_title":{"type":"string"},"purchasing_time_frame":{"type":"string"},"role_in_purchase_process":{"type":"string"},"no_of_employees":{"type":"string"},"comments":{"type":"string"},"custom_questions":{"type":"array","items":{"type":"object"}},"language":{"type":"string"},"auto_approve":{"type":"boolean"}},"required":["meetingId","email","first_name"]},"requiredScopes":["meeting:write:meeting:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webinars.list","description":"List webinars for a user.","parameters":{"type":"object","properties":{"userId":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":300},"next_page_token":{"type":"string"}},"required":["userId"]},"requiredScopes":["webinar:read:webinar:admin"],"class":"read"},{"name":"webinars.get","description":"Read a Zoom webinar by id.","parameters":{"type":"object","properties":{"webinarId":{"type":"string"},"occurrence_id":{"type":"string"}},"required":["webinarId"]},"requiredScopes":["webinar:read:webinar:admin"],"class":"read"},{"name":"webinars.create","description":"Schedule a Zoom webinar for a user.","parameters":{"type":"object","properties":{"userId":{"type":"string"},"topic":{"type":"string"},"type":{"type":"integer","enum":[5,6,9],"description":"5=scheduled, 6=recurring no fixed time, 9=recurring with fixed time."},"start_time":{"type":"string"},"duration":{"type":"integer"},"timezone":{"type":"string"},"password":{"type":"string"},"agenda":{"type":"string"},"settings":{"type":"object"},"recurrence":{"type":"object"}},"required":["userId","topic"]},"requiredScopes":["webinar:write:webinar:admin"],"class":"mutation","cas":"none","externalEffect":true},{"name":"recordings.list","description":"List cloud recordings for a user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"User id, email, or \"me\"."},"from":{"type":"string","description":"YYYY-MM-DD lower bound."},"to":{"type":"string","description":"YYYY-MM-DD upper bound."},"page_size":{"type":"integer","minimum":1,"maximum":300},"next_page_token":{"type":"string"},"mc":{"type":"string"},"trash":{"type":"boolean"},"trash_type":{"type":"string","enum":["meeting_recordings","recording_file"]}},"required":["userId"]},"requiredScopes":["cloud_recording:read:recording:admin"],"class":"read"},{"name":"meetings.end","description":"End a live Zoom meeting via the status endpoint (PUT /meetings/{id}/status, action=\"end\").","parameters":{"type":"object","properties":{"meetingId":{"type":"string","description":"Numeric Zoom meeting id of the live meeting to end."}},"required":["meetingId"]},"requiredScopes":["meeting:update:meeting:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webinars.update","description":"Update a scheduled Zoom webinar in place.","parameters":{"type":"object","properties":{"webinarId":{"type":"string"},"occurrence_id":{"type":"string"},"topic":{"type":"string"},"start_time":{"type":"string"},"duration":{"type":"integer"},"timezone":{"type":"string"},"password":{"type":"string"},"agenda":{"type":"string"},"settings":{"type":"object"},"recurrence":{"type":"object"}},"required":["webinarId"]},"requiredScopes":["webinar:update:webinar:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webinars.delete","description":"Delete a Zoom webinar. Optionally scope to a single occurrence and toggle host/panelist cancellation notifications.","parameters":{"type":"object","properties":{"webinarId":{"type":"string"},"occurrence_id":{"type":"string"},"cancel_webinar_reminder":{"type":"boolean"}},"required":["webinarId"]},"requiredScopes":["webinar:delete:webinar:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"recordings.delete","description":"Delete (or trash) a cloud recording for a meeting. action=\"trash\" is recoverable; action=\"delete\" is permanent.","parameters":{"type":"object","properties":{"meetingId":{"type":"string","description":"Meeting id or recording UUID."},"action":{"type":"string","enum":["trash","delete"],"description":"trash (default, recoverable) or delete (permanent)."}},"required":["meetingId"]},"requiredScopes":["cloud_recording:delete:recording_file:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.create","description":"Create a user in the Zoom account. `action` selects the provisioning mode; user_info carries the user payload.","parameters":{"type":"object","properties":{"action":{"type":"string","enum":["create","autoCreate","custCreate","ssoCreate"],"description":"Provisioning mode: create (invite), autoCreate (provision), custCreate (custom-managed), ssoCreate (SSO)."},"user_info":{"type":"object","description":"User payload (email, type, first_name, last_name, password for custCreate, etc.)."}},"required":["action","user_info"]},"requiredScopes":["user:write:user:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"recordings.get","description":"List recording files for a meeting or recording id (use a double-encoded UUID if it begins with \"/\" or contains \"//\").","parameters":{"type":"object","properties":{"meetingId":{"type":"string","description":"Meeting id or recording UUID."},"include_fields":{"type":"string","description":"Comma-separated extra fields to include (e.g. download_access_token)."},"ttl":{"type":"integer","description":"TTL in seconds for download_access_token (max 604800)."}},"required":["meetingId"]},"requiredScopes":["cloud_recording:read:recording:admin"],"class":"read"}]},{"kind":"zoominfo","displayName":"ZoomInfo","description":"Search and enrich contacts and companies, plus buyer-intent signals, business Scoops, and company news, via the ZoomInfo GTM Data API. Search is free; enrich consumes bulk-data credits.","auth":{"kind":"oauth2","authorizationUrl":"https://api.zoominfo.com/gtm/oauth/v1/authorize","tokenUrl":"https://api.zoominfo.com/gtm/oauth/v1/token","scopes":["api:data:contact","api:data:company","api:data:intent","api:data:scoops","api:data:news"],"clientIdEnv":"ZOOMINFO_OAUTH_CLIENT_ID","clientSecretEnv":"ZOOMINFO_OAUTH_CLIENT_SECRET"},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contact.search","description":"Search the contact database by firmographic/persona criteria. Returns ranked matches with stable contactId values and basic info only (no emails/phones). Free. Pass contactId to contact.enrich for full detail.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Search criteria wrapped under `data`, e.g. { companyName, jobTitle: [\"VP Sales\"], managementLevel, zipCode }. Resolve valid field names via lookup.search_fields (entity=contact, fieldType=input)."},"pageNumber":{"type":"integer","description":"Page number, >= 1 (default 1)."},"pageSize":{"type":"integer","description":"Page size, 1–100 (default 25)."},"sort":{"type":"string","description":"Sort field; prefix with - for descending."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.search","description":"Search the company database by firmographic filters (industry, revenue, employee count, geography, tech stack). Returns basic company info and stable companyId values. Free.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Search criteria under `data`, e.g. { companyName, industry, employeeCount, revenue, location, technologies }. Resolve fields via lookup.search_fields (entity=company, fieldType=input)."},"pageNumber":{"type":"integer"},"pageSize":{"type":"integer"},"sort":{"type":"string"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"intent.search","description":"Search for companies showing buyer-intent signals across 1–50 intent topics. Returns ranked companies with intent signal scores. Free.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Criteria under `data`, must include topics: [\"cybersecurity\", \"cloud migration\"] plus optional filters."},"pageNumber":{"type":"integer"},"pageSize":{"type":"integer"},"sort":{"type":"string"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scoops.search","description":"Search real-time business-intelligence signals (Scoops: hiring, expansion, tech changes) across ZoomInfo companies. Free; each scoop counts against the record limit.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Scoop filter criteria under `data`."},"pageNumber":{"type":"integer"},"pageSize":{"type":"integer"},"sort":{"type":"string","description":"e.g. scoopId | originalPublishedDate; default -originalPublishedDate."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"news.search","description":"Search news articles across ZoomInfo companies. All filters optional but at least one must be set. Free; each article counts as one record. No sort param.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"News filter criteria under `data`, e.g. { companyId, keywords }."},"pageNumber":{"type":"integer"},"pageSize":{"type":"integer"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contact.enrich","description":"Enrich up to 25 contacts with full detail (email, phone, jobTitle, 300+ fields). Best practice: contact.search first, then pass contactId. CONSUMES 1 bulk-data credit per matched record returned (waived if under management). `data` carries matchPersonInput + outputFields (+ optional requiredFields).","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Enrich body under `data`, e.g. { matchPersonInput: [{ contactId } | { firstName, lastName, companyName, emailAddress }], outputFields: [\"id\",\"email\",\"phone\",\"jobTitle\"], requiredFields: [] }."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"company.enrich","description":"Enrich up to 25 companies with 300+ data points (firmographics, technographics). Best practice: company.search first, then pass companyId. CONSUMES 1 bulk-data credit per matched record. `data` carries matchCompanyInput + outputFields.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Enrich body under `data`, e.g. { matchCompanyInput: [{ companyId } | { companyName, website }], outputFields: [\"id\",\"name\",\"website\",\"industry\",\"employeeCount\",\"revenue\"], requiredFields: [] }."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"intent.enrich","description":"Fetch intent signals for a specific known company (companyId, companyName, or companyWebsite) across 1–50 topics. CONSUMES bulk-data credits per enriched company.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Body under `data`, e.g. { companyId, topics: [...] }."},"pageNumber":{"type":"integer"},"pageSize":{"type":"integer"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"scoops.enrich","description":"Fetch Scoops for a specific known company (at least one company identifier). CONSUMES 1 credit per enriched company; each returned scoop counts against the record limit.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Body under `data`, e.g. { companyId }."},"pageNumber":{"type":"integer"},"pageSize":{"type":"integer"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"news.enrich","description":"Fetch categorized news coverage for a specific known company (at least one company identifier). CONSUMES bulk-data credits per enriched company.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Body under `data`, e.g. { companyId }."},"pageNumber":{"type":"integer"},"pageSize":{"type":"integer"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lookup.data","description":"Retrieve enumerated valid values for a filter field (industries, regions, job functions, management levels, technologies, intent topics). Use to build valid search bodies. Free.","parameters":{"type":"object","properties":{"fieldName":{"type":"string","description":"The filter field to enumerate, e.g. industry, managementLevel."},"category":{"type":"string"},"parentCategory":{"type":"string"},"subCategory":{"type":"string"},"vendor":{"type":"string"}},"required":["fieldName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lookup.search_fields","description":"Discover the valid input and output field names for a search/enrich entity. REQUIRED to build correct search/enrich bodies and enrich outputFields. Free.","parameters":{"type":"object","properties":{"entity":{"type":"string","description":"company | contact | scoop | news | intent."},"fieldType":{"type":"string","description":"input | output."}},"required":["entity","fieldType"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"usage.get","description":"Return the current user’s API usage and limits (credits consumed, request counts, entitlements). Free.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"zuora","displayName":"Zuora","description":"Cloud-based subscription management platform. Query accounts, products, and rate plans; create invoices.","auth":{"kind":"oauth2","grantType":"client_credentials","tokenUrl":"{apiBaseUrl}/oauth/token","scopes":[],"clientIdEnv":"ZUORA_OAUTH_CLIENT_ID","clientSecretEnv":"ZUORA_OAUTH_CLIENT_SECRET","tokenClientAuthMethod":"client_secret_post","pkce":"unsupported","urlTemplateMetadata":{"apiBaseUrl":{"kind":"base-url","allowedBaseUrls":["https://rest.test.zuora.com","https://rest.sandbox.na.zuora.com","https://rest.apisandbox.zuora.com","https://rest.na.zuora.com","https://rest.zuora.com","https://rest.test.eu.zuora.com","https://rest.sandbox.eu.zuora.com","https://rest.eu.zuora.com","https://rest.test.ap.zuora.com","https://rest.ap.zuora.com"]}}},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"accounts.find","description":"Find a Zuora account by account ID or name.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Account ID to retrieve."}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.find","description":"Find a Zuora product by product ID.","parameters":{"type":"object","properties":{"productId":{"type":"string","description":"Product ID to retrieve."}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.rate_plans.find","description":"Find a rate plan for a product by product ID and rate plan ID.","parameters":{"type":"object","properties":{"productId":{"type":"string","description":"Product ID."},"ratePlanId":{"type":"string","description":"Rate plan ID to retrieve."}},"required":["productId","ratePlanId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"invoices.create","description":"Create an invoice for a subscription in Zuora.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Account ID for the invoice."},"subscriptionId":{"type":"string","description":"Subscription ID for the invoice."},"invoiceItems":{"type":"array","description":"Array of invoice items.","items":{"type":"object"}}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.create","description":"Create a subscription in Zuora for an account against one or more rate plans.","parameters":{"type":"object","properties":{"accountKey":{"type":"string","description":"Account ID or account number to subscribe."},"contractEffectiveDate":{"type":"string","description":"Effective date (YYYY-MM-DD) for the contract."},"termType":{"type":"string","enum":["TERMED","EVERGREEN"],"description":"Subscription term type."},"subscribeToRatePlans":{"type":"array","description":"Rate plans to subscribe the account to.","items":{"type":"object"}}},"required":["accountKey","contractEffectiveDate","subscribeToRatePlans"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.cancel","description":"Cancel an existing Zuora subscription by subscription key.","parameters":{"type":"object","properties":{"subscriptionKey":{"type":"string","description":"Subscription ID or number to cancel."},"cancellationPolicy":{"type":"string","enum":["EndOfCurrentTerm","EndOfLastInvoicePeriod","SpecificDate"],"description":"When the cancellation takes effect."},"cancellationEffectiveDate":{"type":"string","description":"Effective cancellation date (YYYY-MM-DD); required when cancellationPolicy is SpecificDate."}},"required":["subscriptionKey","cancellationPolicy"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.update","description":"Amend a Zuora subscription (add/remove/update rate plans, change term, etc.).","parameters":{"type":"object","properties":{"subscriptionKey":{"type":"string","description":"Subscription ID or number to amend."},"add":{"type":"array","description":"Rate plan additions.","items":{"type":"object"}},"remove":{"type":"array","description":"Rate plan removals.","items":{"type":"object"}},"update":{"type":"array","description":"Rate plan updates.","items":{"type":"object"}},"termInfo":{"type":"object","description":"Optional term change instructions."}},"required":["subscriptionKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payments.create","description":"Record a payment against one or more invoices in Zuora.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Account the payment belongs to."},"amount":{"type":"number","description":"Payment amount."},"currency":{"type":"string","description":"Three-letter ISO 4217 currency code."},"effectiveDate":{"type":"string","description":"Payment effective date (YYYY-MM-DD)."},"paymentMethodId":{"type":"string","description":"Payment method ID to charge."},"invoices":{"type":"array","description":"Invoices to apply the payment to.","items":{"type":"object"}}},"required":["accountId","amount","currency","effectiveDate","paymentMethodId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]}] +[{"kind":"activecampaign","displayName":"ActiveCampaign","description":"Manage ActiveCampaign accounts, contacts, lists, and tags in the marketing automation + CRM platform.","auth":{"kind":"api-key","hint":"ActiveCampaign API key from Settings → Developer. The connection must also store the per-account apiUrl (e.g. https://youraccount.api-us1.com)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"accounts.create","description":"Create an ActiveCampaign account (organization) record.","parameters":{"type":"object","properties":{"account":{"type":"object","properties":{"name":{"type":"string"},"accountUrl":{"type":"string"},"fields":{"type":"array","items":{"type":"object","properties":{"customFieldId":{"type":"integer"},"fieldValue":{"type":"string"}},"required":["customFieldId","fieldValue"]}}},"required":["name"]}},"required":["account"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"accounts.update","description":"Update an existing ActiveCampaign account by id.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"account":{"type":"object","properties":{"name":{"type":"string"},"accountUrl":{"type":"string"},"fields":{"type":"array","items":{"type":"object","properties":{"customFieldId":{"type":"integer"},"fieldValue":{"type":"string"}},"required":["customFieldId","fieldValue"]}}}}},"required":["accountId","account"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.list.subscription","description":"Subscribe or unsubscribe a contact from a list. status=1 subscribes, status=2 unsubscribes.","parameters":{"type":"object","properties":{"contact":{"type":"integer"},"list":{"type":"integer"},"status":{"type":"integer","enum":[1,2]}},"required":["contact","list","status"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.create","description":"Create a contact in ActiveCampaign.","parameters":{"type":"object","properties":{"contact":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"phone":{"type":"string"},"fieldValues":{"type":"array","items":{"type":"object","properties":{"field":{"type":"integer"},"value":{"type":"string"}},"required":["field","value"]}}},"required":["email"]}},"required":["contact"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update an existing contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"contact":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"phone":{"type":"string"},"fieldValues":{"type":"array","items":{"type":"object","properties":{"field":{"type":"integer"},"value":{"type":"string"}},"required":["field","value"]}}}}},"required":["contactId","contact"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"accounts.contacts.associate","description":"Associate a contact with an account, optionally setting a job title.","parameters":{"type":"object","properties":{"contact":{"type":"integer"},"account":{"type":"integer"},"jobTitle":{"type":"string"}},"required":["contact","account"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.tags.add","description":"Add a tag to a contact.","parameters":{"type":"object","properties":{"contact":{"type":"integer"},"tag":{"type":"integer"}},"required":["contact","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.get","description":"Read a single contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.search","description":"Search contacts by email or filter parameters.","parameters":{"type":"object","properties":{"email":{"type":"string"},"search":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.get","description":"Read a single account by id.","parameters":{"type":"object","properties":{"accountId":{"type":"string"}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.search","description":"List or search accounts.","parameters":{"type":"object","properties":{"search":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"actualbudget","displayName":"Actual Budget","description":"Query budget data, categories, and accounts. Import transactions.","auth":{"kind":"api-key","hint":"Actual Budget server URL, password, and sync ID."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"budget.get","description":"Get budget for a specific month and year.","parameters":{"type":"object","properties":{"month":{"type":"string"},"year":{"type":"string"}},"required":["month","year"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"categories.list","description":"List all transaction categories.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.list","description":"List all accounts.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transactions.import","description":"Import a single transaction into an account.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"payeeName":{"type":"string"},"amount":{"type":"number"},"date":{"type":"string"},"category":{"type":"string"},"notes":{"type":"string"},"cleared":{"type":"boolean"},"importedId":{"type":"string"}},"required":["accountId","date"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.batch-import","description":"Import multiple transactions at once.","parameters":{"type":"object","properties":{"transactions":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"date":{"type":"string"},"payeeName":{"type":"string"},"amount":{"type":"number"},"category":{"type":"string"},"notes":{"type":"string"}},"required":["accountId","date"]}}},"required":["transactions"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.create","description":"Append a single transaction to the configured budget.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"date":{"type":"string"},"payeeName":{"type":"string"},"amount":{"type":"number"},"category":{"type":"string"},"notes":{"type":"string"},"cleared":{"type":"boolean"}},"required":["accountId","date","amount"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.update","description":"Update amount/payee/category on an existing transaction.","parameters":{"type":"object","properties":{"transactionId":{"type":"string"},"amount":{"type":"number"},"payeeName":{"type":"string"},"category":{"type":"string"},"notes":{"type":"string"},"cleared":{"type":"boolean"}},"required":["transactionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.delete","description":"Remove a transaction by id.","parameters":{"type":"object","properties":{"transactionId":{"type":"string"}},"required":["transactionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"categories.create","description":"Create a new budget category.","parameters":{"type":"object","properties":{"name":{"type":"string"},"groupId":{"type":"string"},"isIncome":{"type":"boolean"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"acuity-scheduling","displayName":"Acuity Scheduling","description":"Read availability and manage Acuity Scheduling appointments, calendars, appointment types, and clients.","auth":{"kind":"oauth2","authorizationUrl":"https://acuityscheduling.com/oauth2/authorize","tokenUrl":"https://acuityscheduling.com/oauth2/token","scopes":["api-v1"],"clientIdEnv":"ACUITY_OAUTH_CLIENT_ID","clientSecretEnv":"ACUITY_OAUTH_CLIENT_SECRET"},"category":"calendar","defaultConsistencyModel":"authoritative","capabilities":[{"name":"appointments.list","description":"List appointments with date, calendar, type, client, and cancellation filters.","parameters":{"type":"object","properties":{"minDate":{"type":"string","description":"YYYY-MM-DD lower date bound."},"maxDate":{"type":"string","description":"YYYY-MM-DD upper date bound."},"calendarID":{"type":"integer"},"appointmentTypeID":{"type":"integer"},"canceled":{"type":"boolean"},"firstName":{"type":"string"},"lastName":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"addonID":{"type":"integer"},"excludeForms":{"type":"boolean"},"max":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"appointments.get","description":"Read one appointment by id.","parameters":{"type":"object","properties":{"appointmentId":{"type":"integer","minimum":1,"description":"Acuity appointment id."}},"required":["appointmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"appointments.create","description":"Book a new appointment for a client.","parameters":{"type":"object","properties":{"appointmentTypeID":{"type":"integer"},"datetime":{"type":"string","description":"Provider-formatted appointment start time."},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"calendarID":{"type":"integer"},"phone":{"type":"string"},"timezone":{"type":"string"},"certificate":{"type":"string"},"notes":{"type":"string"},"fields":{"type":"array","items":{"type":"object"}},"addonIDs":{"type":"array","items":{"type":"integer"}},"labels":{"type":"array","maxItems":1,"items":{"type":"object"}},"smsOptIn":{"type":"boolean"},"noEmail":{"type":"boolean"},"admin":{"type":"boolean","description":"Book as an administrator, bypassing availability checks."}},"required":["appointmentTypeID","datetime","firstName","lastName","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"appointments.reschedule","description":"Move an appointment to a new date, time, or calendar.","parameters":{"type":"object","properties":{"appointmentId":{"type":"integer","minimum":1,"description":"Acuity appointment id."},"datetime":{"type":"string"},"calendarID":{"type":"integer"},"timezone":{"type":"string"},"admin":{"type":"boolean","description":"Reschedule as an administrator."},"noEmail":{"type":"boolean","description":"Suppress rescheduling email and SMS."}},"required":["appointmentId","datetime"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"appointments.cancel","description":"Cancel an appointment and optionally mark it as a no-show.","parameters":{"type":"object","properties":{"appointmentId":{"type":"integer","minimum":1,"description":"Acuity appointment id."},"cancelNote":{"type":"string","description":"Message sent with cancellation notifications."},"noShow":{"type":"boolean"},"admin":{"type":"boolean","description":"Cancel as an administrator."},"noEmail":{"type":"boolean","description":"Suppress cancellation email and SMS."}},"required":["appointmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"appointment-types.list","description":"List appointment types and their durations, prices, and availability settings.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calendars.list","description":"List booking calendars and their owners/locations.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"availability.dates","description":"List dates with availability for an appointment type in a month.","parameters":{"type":"object","properties":{"month":{"type":"string","description":"Month in YYYY-MM format."},"appointmentTypeID":{"type":"integer"},"calendarID":{"type":"integer"},"timezone":{"type":"string"}},"required":["month","appointmentTypeID"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"availability.times","description":"List bookable times on one date for an appointment type.","parameters":{"type":"object","properties":{"date":{"type":"string","description":"Date in YYYY-MM-DD format."},"appointmentTypeID":{"type":"integer"},"calendarID":{"type":"integer"},"timezone":{"type":"string"},"ignoreAppointment":{"type":"integer"}},"required":["date","appointmentTypeID"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"clients.list","description":"List clients with optional search and pagination.","parameters":{"type":"object","properties":{"search":{"type":"string"},"offset":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"blocks.list","description":"List blocked-off calendar time with optional date/calendar filters.","parameters":{"type":"object","properties":{"minDate":{"type":"string"},"maxDate":{"type":"string"},"calendarID":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"acumbamail","displayName":"Acumbamail","description":"Manage Acumbamail subscriber lists, subscribers, and email templates.","auth":{"kind":"api-key","hint":"Acumbamail API auth token from account settings."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"subscriber.add_update","description":"Add a subscriber to a list, or update merge fields on an existing subscriber if update_subscriber is enabled.","parameters":{"type":"object","properties":{"list_id":{"type":"string"},"merge_fields":{"type":"object"},"double_option":{"type":"boolean"},"update_subscriber":{"type":"boolean"}},"required":["list_id","merge_fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.create","description":"Create a new subscriber list with sender identity and company contact info.","parameters":{"type":"object","properties":{"name":{"type":"string"},"sender_email":{"type":"string"},"company":{"type":"string"},"country":{"type":"string"},"city":{"type":"string"},"address":{"type":"string"},"phone":{"type":"string"}},"required":["name","sender_email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriber.unsubscribe","description":"Unsubscribe a subscriber from a specific list without removing them from the account.","parameters":{"type":"object","properties":{"list_id":{"type":"string"},"email":{"type":"string"}},"required":["list_id","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"lists.delete","description":"Permanently delete a subscriber list and all of its subscribers.","parameters":{"type":"object","properties":{"list_id":{"type":"string"}},"required":["list_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"templates.duplicate","description":"Duplicate an existing email template under a new name.","parameters":{"type":"object","properties":{"template_id":{"type":"string"},"template_name":{"type":"string"}},"required":["template_id","template_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriber.search","description":"Look up a subscriber on a given list by email address.","parameters":{"type":"object","properties":{"list_id":{"type":"string"},"subscriber":{"type":"string"}},"required":["list_id","subscriber"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriber.remove","description":"Hard-delete a subscriber from a list (distinct from unsubscribe — removes the record).","parameters":{"type":"object","properties":{"list_id":{"type":"string"},"email":{"type":"string"}},"required":["list_id","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"lists.query","description":"List all subscriber lists on the account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"adobe-creative-cloud","displayName":"Adobe Creative Cloud","description":"Read and organize Adobe Lightroom catalogs, albums, and assets in a Creative Cloud account. Standard OAuth2 (Adobe IMS authorization-code grant) against the Lightroom Services API at lr.adobe.io.","auth":{"kind":"oauth2","authorizationUrl":"https://ims-na1.adobelogin.com/ims/authorize/v2","tokenUrl":"https://ims-na1.adobelogin.com/ims/token/v3","scopes":["openid","profile","email","offline_access","lr_partner_apis","lr_partner_rendition_apis"],"clientIdEnv":"ADOBE_CREATIVE_CLOUD_OAUTH_CLIENT_ID","clientSecretEnv":"ADOBE_CREATIVE_CLOUD_OAUTH_CLIENT_SECRET"},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"ims.userinfo","description":"Read the authenticated Adobe ID profile (sub, name, email, account_type) from Adobe IMS. Useful as a non-Lightroom self-test that exercises the access token without needing a catalog.","parameters":{"type":"object","properties":{}},"requiredScopes":["openid","profile","email"],"class":"read"},{"name":"account.get","description":"Read Lightroom account metadata for the authenticated user (subscription tier, storage quota, default catalog id).","parameters":{"type":"object","properties":{}},"requiredScopes":["lr_partner_apis"],"class":"read"},{"name":"catalogs.list","description":"Enumerate the Lightroom catalogs visible to the authenticated user. Most accounts have exactly one catalog; team plans surface multiple.","parameters":{"type":"object","properties":{}},"requiredScopes":["lr_partner_apis"],"class":"read"},{"name":"catalogs.get","description":"Read one Lightroom catalog by id (returns catalog name, created, updated, asset count, and capability flags).","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID (from catalogs.list)."}},"required":["catalog_id"]},"requiredScopes":["lr_partner_apis"],"class":"read"},{"name":"albums.list","description":"List albums under a catalog. Returns a `links.next` href when paginated; pass `name_after` to resume.","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID."},"subtype":{"type":"string","enum":["collection","collection_set","project"],"description":"Filter by album subtype."},"name_after":{"type":"string","description":"Pagination cursor returned in `links.next` from a prior page."},"limit":{"type":"integer","minimum":1,"maximum":500,"description":"Page size; Lightroom caps at 500."}},"required":["catalog_id"]},"requiredScopes":["lr_partner_apis"],"class":"read"},{"name":"albums.get","description":"Read one album by id within a catalog (album name, subtype, parent_id, cover asset).","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID."},"album_id":{"type":"string","description":"Album UUID."}},"required":["catalog_id","album_id"]},"requiredScopes":["lr_partner_apis"],"class":"read"},{"name":"albums.create","description":"Create an album under a catalog. The caller supplies the album UUID (Lightroom uses PUT with a client-chosen id), so re-issuing the same call is a deterministic replay.","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID."},"album_id":{"type":"string","description":"Caller-supplied album UUID. Must be a v4 UUID; Lightroom dedupes by (catalog_id, album_id)."},"subtype":{"type":"string","enum":["collection","collection_set","project"],"description":"Album subtype; defaults to \"collection\"."},"payload":{"type":"object","description":"AlbumPayload — { name, parent: { id } | null, cover: { id } | null, ... }."}},"required":["catalog_id","album_id","payload"]},"requiredScopes":["lr_partner_apis"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"albums.update","description":"Update an album (rename, reparent, change cover). Lightroom honors `If-Match` against the album ETag; the declarative layer flags this as etag-if-match so the action guard reads-before-writes.","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID."},"album_id":{"type":"string","description":"Album UUID."},"payload":{"type":"object","description":"AlbumUpdatePayload — partial set of mutable fields (name, parent, cover)."}},"required":["catalog_id","album_id","payload"]},"requiredScopes":["lr_partner_apis"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"albums.delete","description":"Delete an album. Lightroom soft-deletes the album record but does NOT delete the contained assets (they remain in the catalog under \"All Photos\").","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID."},"album_id":{"type":"string","description":"Album UUID."}},"required":["catalog_id","album_id"]},"requiredScopes":["lr_partner_apis"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"assets.list","description":"List assets in a catalog. Filters by subtype (image | video), capture date range, and a cursor for incremental enumeration.","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID."},"subtype":{"type":"string","enum":["image","video"],"description":"Filter by asset subtype."},"captured_after":{"type":"string","description":"ISO8601 lower bound on capture timestamp."},"captured_before":{"type":"string","description":"ISO8601 upper bound on capture timestamp."},"name_after":{"type":"string","description":"Pagination cursor returned in `links.next` from a prior page."},"limit":{"type":"integer","minimum":1,"maximum":500,"description":"Page size; Lightroom caps at 500."}},"required":["catalog_id"]},"requiredScopes":["lr_partner_apis"],"class":"read"},{"name":"assets.get","description":"Read one asset by id within a catalog. Returns the asset payload (capture metadata, develop settings, rendition links).","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID."},"asset_id":{"type":"string","description":"Asset UUID."}},"required":["catalog_id","asset_id"]},"requiredScopes":["lr_partner_apis"],"class":"read"},{"name":"file.upload","description":"Upload a file (create a Lightroom asset). The caller supplies the asset UUID; Lightroom dedupes by (catalog_id, asset_id) so replays are deterministic.","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID."},"asset_id":{"type":"string","description":"Caller-supplied asset UUID (v4); Lightroom dedupes by (catalog_id, asset_id)."},"payload":{"type":"object","description":"AssetPayload — { subtype: \"image\"|\"video\", payload: { ... }, ... }."}},"required":["catalog_id","asset_id","payload"]},"requiredScopes":["lr_partner_apis"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"file.delete","description":"Delete a file (Lightroom asset) by id. Lightroom marks the asset as deleted; rendition references are GC-collected asynchronously.","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID."},"asset_id":{"type":"string","description":"Asset UUID."}},"required":["catalog_id","asset_id"]},"requiredScopes":["lr_partner_apis"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"folder.create","description":"Create a folder (Lightroom collection_set album). The caller supplies the folder UUID; PUT with the same UUID is a deterministic replay.","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID."},"album_id":{"type":"string","description":"Caller-supplied folder/album UUID (v4); Lightroom dedupes by (catalog_id, album_id)."},"payload":{"type":"object","description":"AlbumPayload — { name, parent: { id } | null, subtype: \"collection_set\" }."}},"required":["catalog_id","album_id","payload"]},"requiredScopes":["lr_partner_apis"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assets.list_in_album","description":"List the assets attached to a specific album within a catalog. Use the `links.next` cursor to page.","parameters":{"type":"object","properties":{"catalog_id":{"type":"string","description":"Lightroom catalog UUID."},"album_id":{"type":"string","description":"Album UUID."},"name_after":{"type":"string","description":"Pagination cursor returned in `links.next` from a prior page."},"limit":{"type":"integer","minimum":1,"maximum":500,"description":"Page size; Lightroom caps at 500."}},"required":["catalog_id","album_id"]},"requiredScopes":["lr_partner_apis"],"class":"read"}]},{"kind":"adobe-sign","displayName":"Adobe Acrobat Sign","description":"Create, send, inspect, cancel, and remind on Adobe Acrobat Sign agreements, with library-document and webhook management.","auth":{"kind":"oauth2","authorizationUrl":"https://secure.na1.adobesign.com/public/oauth/v2","tokenUrl":"https://api.na1.adobesign.com/oauth/v2/token","scopes":["user_read:self","agreement_read:account","agreement_write:account","agreement_send:account","library_read:account","webhook_read:account","webhook_write:account"],"clientIdEnv":"ADOBE_SIGN_OAUTH_CLIENT_ID","clientSecretEnv":"ADOBE_SIGN_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"agreements.list","description":"List agreements visible to the authenticated Acrobat Sign account.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"},"query":{"type":"string"}}},"requiredScopes":["agreement_read:account"],"class":"read"},{"name":"agreements.get","description":"Read an agreement and its current signature status.","parameters":{"type":"object","properties":{"agreementId":{"type":"string"}},"required":["agreementId"]},"requiredScopes":["agreement_read:account"],"class":"read"},{"name":"agreements.create","description":"Create and optionally send an agreement. The request body follows Adobe Sign v6 (fileInfos, participantSetsInfo, name, signatureType, state).","parameters":{"type":"object","properties":{"fileInfos":{"type":"array","items":{"type":"object"}},"participantSetsInfo":{"type":"array","items":{"type":"object"}},"name":{"type":"string"},"signatureType":{"type":"string","enum":["ESIGN","WRITTEN"]},"state":{"type":"string","enum":["DRAFT","AUTHORING","IN_PROCESS"]},"message":{"type":"string"},"expirationTime":{"type":"string"}},"required":["fileInfos","participantSetsInfo","name","signatureType","state"]},"requiredScopes":["agreement_write:account","agreement_send:account"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"agreements.cancel","description":"Cancel an in-progress agreement and record an optional comment.","parameters":{"type":"object","properties":{"agreementId":{"type":"string"},"comment":{"type":"string"},"notifySigner":{"type":"boolean"}},"required":["agreementId"]},"requiredScopes":["agreement_write:account"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"agreements.remind","description":"Send an immediate reminder to pending agreement participants.","parameters":{"type":"object","properties":{"agreementId":{"type":"string"},"note":{"type":"string"}},"required":["agreementId"]},"requiredScopes":["agreement_write:account"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"libraryDocuments.list","description":"List reusable Acrobat Sign library documents and templates.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer"},"cursor":{"type":"string"}}},"requiredScopes":["library_read:account"],"class":"read"},{"name":"webhooks.list","description":"List Acrobat Sign webhook subscriptions.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer"},"cursor":{"type":"string"}}},"requiredScopes":["webhook_read:account"],"class":"read"},{"name":"webhooks.create","description":"Create an Acrobat Sign webhook subscription.","parameters":{"type":"object","properties":{"name":{"type":"string"},"scope":{"type":"string"},"state":{"type":"string","enum":["ACTIVE","INACTIVE"]},"webhookSubscriptionEvents":{"type":"array","items":{"type":"string"}},"webhookUrlInfo":{"type":"object"},"applicationDisplayName":{"type":"string"}},"required":["name","scope","state","webhookSubscriptionEvents","webhookUrlInfo"]},"requiredScopes":["webhook_write:account"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Delete an Acrobat Sign webhook subscription.","parameters":{"type":"object","properties":{"webhookId":{"type":"string"}},"required":["webhookId"]},"requiredScopes":["webhook_write:account"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"adp","displayName":"ADP","description":"Read HR and payroll data from ADP Workforce Now: workers, worker demographics, pay statements, and pay distributions. Requires mutual-TLS client certificates (see adapter notes) in addition to OAuth2.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.adp.com/auth/oauth/v2/authorize","tokenUrl":"https://accounts.adp.com/auth/oauth/v2/token","scopes":["hr/workerInformationManagement/read","payroll/payStatementManagement/read"],"clientIdEnv":"ADP_OAUTH_CLIENT_ID","clientSecretEnv":"ADP_OAUTH_CLIENT_SECRET"},"category":"hr","defaultConsistencyModel":"authoritative","capabilities":[{"name":"worker.list","description":"Collection of all workers for the authenticated client. OData paging via $top/$skip (default 50, max 100); total at meta.totalNumber. The associateOID on each worker is the key for per-worker endpoints. SSN/birth date are masked.","parameters":{"type":"object","properties":{"top":{"type":"integer","description":"OData $top page size (default 50, max 100)."},"skip":{"type":"integer","description":"OData $skip offset for pagination."},"filter":{"type":"string","description":"OData $filter expression."},"select":{"type":"string","description":"OData $select field projection."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"worker.get","description":"A single worker by Associate OID (aoid). SSN/birth date are masked unless unmasking is requested.","parameters":{"type":"object","properties":{"aoid":{"type":"string","description":"Associate OID from worker.list."},"select":{"type":"string","description":"OData $select field projection."}},"required":["aoid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"worker.demographics.list","description":"Worker collection WITHOUT PII/SPI (no SSN, no full birth date) — a lighter payload than worker.list. OData paging supported.","parameters":{"type":"object","properties":{"top":{"type":"integer"},"skip":{"type":"integer"},"filter":{"type":"string"},"select":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"worker.demographics.get","description":"Demographic data for one worker by Associate OID, without PII/SPI.","parameters":{"type":"object","properties":{"aoid":{"type":"string"},"select":{"type":"string"}},"required":["aoid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"paystatements.list","description":"Pay statements for one worker: payDate, net/gross pay amounts, total hours, and a statement image URI. Use numberoflastpaydates to cap results.","parameters":{"type":"object","properties":{"aoid":{"type":"string","description":"Associate OID from worker.list."},"numberoflastpaydates":{"type":"integer","description":"Limit to the N most recent pay dates."}},"required":["aoid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"paystatements.get","description":"Full detail of one pay statement: pay period, net/gross/YTD amounts, earnings, deductions, and memos. The pay-statement id is resolved from paystatements.list.","parameters":{"type":"object","properties":{"aoid":{"type":"string"},"payStatementId":{"type":"string","description":"Pay statement id from paystatements.list."}},"required":["aoid","payStatementId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"paydistributions.get","description":"Direct-deposit distribution setup for one worker: accounts, routing numbers, distribution amounts, and remaining-balance flags.","parameters":{"type":"object","properties":{"aoid":{"type":"string"}},"required":["aoid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"affinity","displayName":"Affinity","description":"Synchronize Affinity people, organizations, opportunities, lists, notes, interactions, and field values.","auth":{"kind":"api-key","hint":"Affinity API key from Settings > API. Availability depends on the workspace plan and key owner permissions."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"people.list","description":"List or search people.","parameters":{"type":"object","properties":{"term":{"type":"string","description":"Search person names and identifiers."},"page_size":{"type":"integer","minimum":1,"maximum":500},"page_token":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"people.get","description":"Read one person, including current organizations and opportunities.","parameters":{"type":"object","properties":{"personId":{"type":"integer"}},"required":["personId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"people.create","description":"Create a person.","parameters":{"type":"object","additionalProperties":true,"properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"people.update","description":"Update a person.","parameters":{"type":"object","properties":{"personId":{"type":"integer"}},"required":["personId"],"additionalProperties":true},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"people.delete","description":"Delete a person.","parameters":{"type":"object","properties":{"personId":{"type":"integer"}},"required":["personId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"organizations.list","description":"List or search organizations.","parameters":{"type":"object","properties":{"term":{"type":"string","description":"Search organization names and identifiers."},"page_size":{"type":"integer","minimum":1,"maximum":500},"page_token":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"organizations.get","description":"Read one organization.","parameters":{"type":"object","properties":{"organizationId":{"type":"integer"}},"required":["organizationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"organizations.create","description":"Create an organization.","parameters":{"type":"object","additionalProperties":true,"properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"organizations.update","description":"Update an organization.","parameters":{"type":"object","properties":{"organizationId":{"type":"integer"}},"required":["organizationId"],"additionalProperties":true},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"organizations.delete","description":"Delete an organization.","parameters":{"type":"object","properties":{"organizationId":{"type":"integer"}},"required":["organizationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.list","description":"List or search opportunities.","parameters":{"type":"object","properties":{"term":{"type":"string","description":"Search opportunity names and identifiers."},"page_size":{"type":"integer","minimum":1,"maximum":500},"page_token":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"opportunities.get","description":"Read one opportunity.","parameters":{"type":"object","properties":{"opportunityId":{"type":"integer"}},"required":["opportunityId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"opportunities.create","description":"Create an opportunity.","parameters":{"type":"object","additionalProperties":true,"properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.update","description":"Update an opportunity.","parameters":{"type":"object","properties":{"opportunityId":{"type":"integer"}},"required":["opportunityId"],"additionalProperties":true},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"opportunities.delete","description":"Delete an opportunity.","parameters":{"type":"object","properties":{"opportunityId":{"type":"integer"}},"required":["opportunityId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.list","description":"List CRM lists.","parameters":{"type":"object","properties":{"term":{"type":"string","description":"Search list names and identifiers."},"page_size":{"type":"integer","minimum":1,"maximum":500},"page_token":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.get","description":"Read one CRM list and its field definitions.","parameters":{"type":"object","properties":{"listId":{"type":"integer"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"list-entries.list","description":"List entries in an Affinity list.","parameters":{"type":"object","properties":{"listId":{"type":"integer"},"page_size":{"type":"integer","minimum":1,"maximum":500},"page_token":{"type":"string"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"list-entries.create","description":"Add an entity to an Affinity list.","parameters":{"type":"object","properties":{"listId":{"type":"integer"},"entity_id":{"type":"integer"}},"required":["listId","entity_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"list-entries.delete","description":"Remove a list entry.","parameters":{"type":"object","properties":{"listEntryId":{"type":"integer"}},"required":["listEntryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"field-values.list","description":"Read mapped custom-field values for one person, organization, opportunity, or list entry.","parameters":{"type":"object","properties":{"person_id":{"type":"integer"},"organization_id":{"type":"integer"},"opportunity_id":{"type":"integer"},"list_entry_id":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"field-values.create","description":"Create a custom-field value.","parameters":{"type":"object","additionalProperties":true,"properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"field-values.update","description":"Update a custom-field value.","parameters":{"type":"object","properties":{"fieldValueId":{"type":"integer"}},"required":["fieldValueId"],"additionalProperties":true},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"field-values.delete","description":"Delete a custom-field value.","parameters":{"type":"object","properties":{"fieldValueId":{"type":"integer"}},"required":["fieldValueId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"field-value-changes.list","description":"Read custom-field change history for synchronization and evidence.","parameters":{"type":"object","properties":{"field_id":{"type":"integer"},"action_type":{"type":"integer"},"page_size":{"type":"integer","minimum":1,"maximum":500},"page_token":{"type":"string"}},"required":["field_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"interactions.list","description":"List email, meeting, call, and chat interactions for a person or organization.","parameters":{"type":"object","properties":{"person_id":{"type":"integer"},"organization_id":{"type":"integer"},"type":{"type":"integer"},"start_time":{"type":"string"},"end_time":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":500},"page_token":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"notes.list","description":"List notes linked to people, organizations, or opportunities.","parameters":{"type":"object","properties":{"person_id":{"type":"integer"},"organization_id":{"type":"integer"},"opportunity_id":{"type":"integer"},"page_size":{"type":"integer","minimum":1,"maximum":500},"page_token":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"notes.create","description":"Create a note linked to CRM records.","parameters":{"type":"object","additionalProperties":true,"properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.update","description":"Update a note.","parameters":{"type":"object","properties":{"noteId":{"type":"integer"}},"required":["noteId"],"additionalProperties":true},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"notes.delete","description":"Delete a note.","parameters":{"type":"object","properties":{"noteId":{"type":"integer"}},"required":["noteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"afforai","displayName":"Afforai","description":"Ask Afforai chatbots questions over a private document corpus and receive synthesized answers with optional web-augmented retrieval.","auth":{"kind":"api-key","hint":"Afforai API key (workspace settings → API). Sent as a bearer token on every request."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"ask.chatbot","description":"Send a user message to a configured Afforai chatbot and receive a synthesized answer drawn from the chatbot’s document set. Optionally enable deep-search and Google-augmented retrieval.","parameters":{"type":"object","properties":{"sessionID":{"type":"string","description":"Chatbot ID copied from the Afforai workspace (Actions → Settings on the chatbot card)."},"history":{"type":"array","description":"Prior conversation turns. Each entry is { role: \"user\" | \"assistant\", content: string }. Pass [] for a fresh session.","items":{"type":"object","properties":{"role":{"type":"string","enum":["user","assistant"]},"content":{"type":"string"}},"required":["role","content"]}},"role":{"type":"string","enum":["user","assistant"],"description":"Role of the new message being sent. Almost always \"user\"."},"content":{"type":"string","description":"Body of the new message to send to the chatbot."},"powerful":{"type":"boolean","description":"When true, Afforai performs a deeper retrieval pass over the chatbot’s document set at the cost of higher per-call billing and latency."},"google":{"type":"boolean","description":"When true, the chatbot is allowed to consult Google search results in addition to the uploaded documents."}},"required":["sessionID","history","role","content","powerful","google"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"agentx","displayName":"AgentX","description":"Send messages to AgentX conversations, search agents, and inspect conversation/message history.","auth":{"kind":"api-key","hint":"AgentX API key (Settings → API Keys)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"conversations.createWithSingleAgent","description":"Create a new conversation with a single agent and send the first message.","parameters":{"type":"object","properties":{"agentId":{"type":"string","description":"The agent that will own the conversation."},"message":{"type":"string","description":"First message sent to the agent."},"agentMode":{"type":"string","description":"How the agent should respond (e.g. chat, autonomous)."},"context":{"type":"integer","description":"Number of previous messages to include as memory context (0 = max)."},"conversationName":{"type":"string","description":"Optional human-readable conversation title."}},"required":["agentId","message","agentMode"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.sendMessage","description":"Send a message to an existing AgentX conversation.","parameters":{"type":"object","properties":{"conversationId":{"type":"string","description":"Target conversation ID."},"message":{"type":"string","description":"Message body to send."},"agentMode":{"type":"string","description":"How the agent should respond on this turn."},"context":{"type":"integer","description":"Number of previous messages to include as memory context."}},"required":["conversationId","message","agentMode"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.find","description":"Search messages by conversation, free-text search term, or exact message ID.","parameters":{"type":"object","properties":{"conversationId":{"type":"string","description":"Restrict the search to a single conversation."},"searchTerm":{"type":"string","description":"Text to search for in message content. Omit if searching by ID."},"messageId":{"type":"string","description":"Exact message ID lookup (overrides searchTerm)."},"limit":{"type":"integer","description":"Maximum messages to return."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"agents.search","description":"Search the workspace agent registry by name or exact agent ID.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Partial name match against the agent display name."},"agentId":{"type":"string","description":"Exact agent ID."},"limit":{"type":"integer","description":"Maximum agents to return."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversations.find","description":"Find conversations by exact ID, name/title, or conversation type.","parameters":{"type":"object","properties":{"conversationId":{"type":"string","description":"Exact conversation ID."},"conversationName":{"type":"string","description":"Name, title, or ID-substring match."},"type":{"type":"string","description":"Conversation type filter (e.g. single-agent, multi-agent)."},"limit":{"type":"integer","description":"Maximum conversations to return."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"agents.list.recent","description":"List recently created agents — used by the newAgent polling trigger upstream.","parameters":{"type":"object","properties":{"since":{"type":"string","description":"ISO-8601 timestamp; only return agents created after this point."},"limit":{"type":"integer","description":"Maximum agents to return."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversations.list.recent","description":"List recently created conversations — used by the newConversation polling trigger upstream.","parameters":{"type":"object","properties":{"since":{"type":"string","description":"ISO-8601 timestamp; only return conversations created after this point."},"limit":{"type":"integer","description":"Maximum conversations to return."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"aianswer","displayName":"AI Answer","description":"Manage AI Answer agents and phone calls for voice interactions.","auth":{"kind":"api-key","hint":"API key for AI Answer."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"agents.list","description":"Get a list of available agents.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.create","description":"Create a new phone call.","parameters":{"type":"object","properties":{"agentID":{"type":"string"},"phoneNumber":{"type":"string"},"callID":{"type":"string"},"details":{"type":"object"}},"required":["agentID","phoneNumber","callID"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.get","description":"Get details of a specific call.","parameters":{"type":"object","properties":{"callID":{"type":"string"}},"required":["callID"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.schedule","description":"Schedule a phone call with an agent.","parameters":{"type":"object","properties":{"agentID":{"type":"string"},"phoneNumber":{"type":"string"},"callID":{"type":"string"},"executionTime":{"type":"string"},"timezone":{"type":"string"},"prospectDetails":{"type":"object"}},"required":["agentID","phoneNumber","callID","executionTime","timezone"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.transcript","description":"Get the transcript of a completed call.","parameters":{"type":"object","properties":{"callID":{"type":"string"}},"required":["callID"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"aidbase","displayName":"Aidbase","description":"Ingest knowledge sources, manage FAQs, generate chatbot replies, and trigger training jobs in an Aidbase support workspace.","auth":{"kind":"api-key","hint":"Aidbase workspace API key. Generate one from the Aidbase dashboard → Settings → API."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"knowledge.add_video","description":"Add a YouTube video as a knowledge source. The transcript is fetched and indexed asynchronously; the response carries the source id, not a ready-state.","parameters":{"type":"object","properties":{"video_url":{"type":"string","description":"Public YouTube URL of the video to ingest."},"categories":{"type":"array","description":"Optional category names. Unknown names are created.","items":{"type":"string"}}},"required":["video_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"knowledge.add_website","description":"Crawl and index a website as a knowledge source. The crawl runs asynchronously; poll the returned source id for completion.","parameters":{"type":"object","properties":{"website_url":{"type":"string","description":"Root URL to crawl (e.g. https://www.example.com)."},"categories":{"type":"array","items":{"type":"string"}}},"required":["website_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"knowledge.add_faq_item","description":"Append a Q/A pair to an existing FAQ knowledge base. Returns the created item id.","parameters":{"type":"object","properties":{"faq_id":{"type":"string","description":"Target FAQ container id (from knowledge.create_faq)."},"question":{"type":"string"},"answer":{"type":"string"},"source_url":{"type":"string","description":"Optional URL pointing to the source of the information."},"categories":{"type":"array","items":{"type":"string"}}},"required":["faq_id","question","answer"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"knowledge.create_faq","description":"Create a new FAQ knowledge-base container. Items are added with knowledge.add_faq_item.","parameters":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"categories":{"type":"array","items":{"type":"string"}}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"chatbot.create_reply","description":"Send a user message to the Aidbase chatbot and receive a generated reply. Pass session_id to continue an existing conversation; omit it to start a new one.","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The user message to send to the chatbot."},"session_id":{"type":"string","description":"Optional session id to maintain conversation context across calls."}},"required":["message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"training.start","description":"Kick off a training run that re-indexes the workspace knowledge base. Returns a training job id the caller can poll for completion.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"aiprise","displayName":"AiPrise","description":"KYC, KYB, and fraud-prevention platform — start identity and business verifications, retrieve results, manage user and business profiles, and override decisions.","auth":{"kind":"api-key","hint":"AiPrise workspace API key. Generate one from the AiPrise dashboard → Settings → API Keys."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"identity.verification.start","description":"Run a user verification profile — kicks off an identity verification session against the named template. Returns a session_id the caller polls or webhooks against.","parameters":{"type":"object","properties":{"template_id":{"type":"string","description":"Verification template id from the AiPrise dashboard."},"first_name":{"type":"string"},"middle_name":{"type":"string"},"last_name":{"type":"string"},"second_last_name":{"type":"string"},"full_name":{"type":"string"},"date_of_birth":{"type":"string","description":"YYYY-MM-DD."},"email_address":{"type":"string"},"phone_number":{"type":"string"},"client_reference_id":{"type":"string"},"client_reference_data":{"type":"object"},"callback_url":{"type":"string"},"events_callback_url":{"type":"string"}},"required":["template_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"identity.verification.url","description":"Generate a hosted verification URL for a previously-created session. The end user is redirected here to complete the flow.","parameters":{"type":"object","properties":{"template_id":{"type":"string"},"redirect_uri":{"type":"string","description":"Where the user is sent after finishing the hosted flow."},"client_reference_id":{"type":"string"},"client_reference_data":{"type":"object"}},"required":["template_id","redirect_uri"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"identity.verification.result","description":"Fetch the latest decision and check breakdown for a verification session.","parameters":{"type":"object","properties":{"session_id":{"type":"string","description":"AiPrise verification session id."}},"required":["session_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"identity.verification.input","description":"Fetch the structured user-supplied input that was captured during a verification session (names, DOB, document fields).","parameters":{"type":"object","properties":{"session_id":{"type":"string"}},"required":["session_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"identity.verification.update_result","description":"Override the AiPrise decision on a verification session. Use to approve, decline, or push back to manual review after analyst review.","parameters":{"type":"object","properties":{"verification_session_id":{"type":"string"},"result":{"type":"string","enum":["Approved","Declined","Pending"],"description":"New decision. Approved passes the subject, Declined rejects, Pending returns to manual review."}},"required":["verification_session_id","result"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"identity.user_info.get","description":"Fetch additional analyst-only signals AiPrise gathered about the subject (device, IP, behavioural) for a verification session.","parameters":{"type":"object","properties":{"session_id":{"type":"string"}},"required":["session_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"business.verification.start","description":"Start a business verification (KYB) against an existing business profile. Returns a session_id used to fetch results.","parameters":{"type":"object","properties":{"template_id":{"type":"string"},"business_profile_id":{"type":"string"},"client_reference_id":{"type":"string"},"client_reference_data":{"type":"object"},"callback_url":{"type":"string"},"events_callback_url":{"type":"string"}},"required":["template_id","business_profile_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"business.verification.result","description":"Fetch the AML / sanctions / corporate-registry result for a business verification session.","parameters":{"type":"object","properties":{"session_id":{"type":"string"}},"required":["session_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"business.verification.input","description":"Fetch the structured business-profile inputs captured for a business verification session.","parameters":{"type":"object","properties":{"session_id":{"type":"string"}},"required":["session_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"document.check.run","description":"Run a standalone document check against a previously-uploaded file. Returns the extracted fields and a pass / fail verdict.","parameters":{"type":"object","properties":{"file_uuid":{"type":"string","description":"UUID returned from the AiPrise file upload endpoint."},"document_input_title":{"type":"string"},"client_reference_id":{"type":"string"},"client_reference_data":{"type":"object"}},"required":["file_uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"business.profile.create","description":"Create a business profile that subsequent KYB verifications and searches can reference.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Legal business name (preferred) or trade name."},"alternate_name":{"type":"string"},"tax_identification_number":{"type":"string"},"website":{"type":"string"},"formation_date":{"type":"string","description":"YYYY-MM-DD."},"country_code":{"type":"string","description":"ISO 3166-1 alpha-2."},"state_code":{"type":"string"},"business_entity_id":{"type":"string"},"addresses":{"type":"array","description":"Structured address objects (preferred over flat street/city fields when both are available).","items":{"type":"object"}},"address_street_1":{"type":"string"},"address_street_2":{"type":"string"},"address_city":{"type":"string"},"address_state":{"type":"string"},"address_zip_code":{"type":"string"},"address_country":{"type":"string"},"phone_numbers":{"type":"array","items":{"type":"object"}},"email_addresses":{"type":"array","items":{"type":"object"}},"additional_information":{"type":"array","items":{"type":"object"}},"client_reference_id":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"business.profile.get","description":"Fetch a business profile by id.","parameters":{"type":"object","properties":{"business_profile_id":{"type":"string"}},"required":["business_profile_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"business.profile.documents","description":"List documents (incorporation, ownership, financials) attached to a business profile.","parameters":{"type":"object","properties":{"business_profile_id":{"type":"string"}},"required":["business_profile_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"business.search","description":"Search the AiPrise corporate-registry index for businesses by name, country, or tax id.","parameters":{"type":"object","properties":{"name":{"type":"string"},"country_code":{"type":"string"},"tax_identification_number":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"user.profile.create","description":"Create a reusable user profile that subsequent KYC verifications can reference.","parameters":{"type":"object","properties":{"first_name":{"type":"string"},"middle_name":{"type":"string"},"last_name":{"type":"string"},"second_last_name":{"type":"string"},"full_name":{"type":"string"},"date_of_birth":{"type":"string","description":"YYYY-MM-DD."},"email_address":{"type":"string"},"phone_number":{"type":"string"},"address_street_1":{"type":"string"},"address_street_2":{"type":"string"},"address_city":{"type":"string"},"address_state":{"type":"string"},"address_zip_code":{"type":"string"},"address_country":{"type":"string"},"client_reference_id":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"user.profile.get","description":"Fetch a user profile by id.","parameters":{"type":"object","properties":{"user_profile_id":{"type":"string"}},"required":["user_profile_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"air-ops","displayName":"AirOps","description":"Trigger AirOps workflows (sync or async) and read execution results.","auth":{"kind":"api-key","hint":"AirOps API key — Workspace Settings → API Keys in your AirOps account."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"run.workflow","description":"Execute an AirOps workflow synchronously and return the result.","parameters":{"type":"object","properties":{"app":{"type":"string","description":"The AirOps workflow (app) UUID to execute."},"inputs":{"type":"object","description":"Input values for the workflow."},"inputs_schema":{"type":"object","description":"Schema defining the workflow inputs (advanced)."},"definition":{"type":"object","description":"Custom workflow definition steps (advanced)."}},"required":["app"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"run.workflow.async","description":"Queue an AirOps workflow for asynchronous execution and return the execution UUID.","parameters":{"type":"object","properties":{"app":{"type":"string","description":"The AirOps workflow (app) UUID to execute."},"inputs":{"type":"object","description":"Input values for the workflow."},"inputs_schema":{"type":"object","description":"Schema defining the workflow inputs (advanced)."},"definition":{"type":"object","description":"Custom workflow definition steps (advanced)."}},"required":["app"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.execution","description":"Retrieve a previously queued AirOps workflow execution by its UUID.","parameters":{"type":"object","properties":{"app":{"type":"string","description":"The AirOps workflow (app) UUID."},"execution_uuid":{"type":"string","description":"The UUID of the execution to retrieve."}},"required":["app","execution_uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cancel.execution","description":"Cancel a running Airops workflow execution.","parameters":{"type":"object","properties":{"app":{"type":"string","description":"The AirOps workflow (app) UUID."},"execution_uuid":{"type":"string","description":"The UUID of the execution to cancel."}},"required":["app","execution_uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflow.publish","description":"Promote a workflow draft to published.","parameters":{"type":"object","properties":{"app":{"type":"string","description":"The AirOps workflow (app) UUID."}},"required":["app"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflow.update","description":"Patch workflow definition fields.","parameters":{"type":"object","properties":{"app":{"type":"string","description":"The AirOps workflow (app) UUID."},"name":{"type":"string","description":"Workflow display name."},"description":{"type":"string","description":"Workflow description."},"inputs_schema":{"type":"object","description":"Schema defining the workflow inputs."},"definition":{"type":"object","description":"Workflow definition steps."}},"required":["app"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"aircall","displayName":"Aircall","description":"Read Aircall calls and contacts and apply lightweight write operations (comments, tags, contact CRUD).","auth":{"kind":"api-key","hint":"Base64-encoded Aircall API ID and API token (`base64(apiId:apiToken)`)."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.find","description":"List or search Aircall calls, optionally filtered by direction or phone number.","parameters":{"type":"object","properties":{"direction":{"type":"string"},"phone_number":{"type":"string"},"from":{"type":"integer"},"to":{"type":"integer"},"per_page":{"type":"integer"},"page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.get","description":"Fetch a single Aircall call by id.","parameters":{"type":"object","properties":{"callId":{"type":"string"}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.comment","description":"Attach a comment to an Aircall call.","parameters":{"type":"object","properties":{"callId":{"type":"string"},"content":{"type":"string"}},"required":["callId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.tag","description":"Apply one or more tags to an Aircall call.","parameters":{"type":"object","properties":{"callId":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}},"required":["callId","tags"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.find","description":"Search Aircall contacts by phone number or email.","parameters":{"type":"object","properties":{"phone_number":{"type":"string"},"email":{"type":"string"},"per_page":{"type":"integer"},"page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create an Aircall contact with phone numbers and optional metadata.","parameters":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"company_name":{"type":"string"},"information":{"type":"string"},"phone_numbers":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"]}},"emails":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"]}}},"required":["phone_numbers"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update an existing Aircall contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"company_name":{"type":"string"},"information":{"type":"string"},"phone_numbers":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"]}},"emails":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"]}}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.delete","description":"Delete a contact from the Aircall directory.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.transfer","description":"Transfer an active call to another user or number.","parameters":{"type":"object","properties":{"callId":{"type":"string"},"to":{"type":"string","description":"Aircall user id or external E.164 phone number to transfer the call to."}},"required":["callId","to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.archive","description":"Archive a completed call record.","parameters":{"type":"object","properties":{"callId":{"type":"string"}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"numbers.assign","description":"Assign a phone number to a user or team.","parameters":{"type":"object","properties":{"numberId":{"type":"string"},"user_id":{"type":"string","description":"Aircall user id to assign the number to."},"team_id":{"type":"string","description":"Aircall team id to assign the number to."}},"required":["numberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"airparser","displayName":"Airparser","description":"Extract structured data from emails, PDFs, or documents with Airparser.","auth":{"kind":"api-key","hint":"Airparser API key."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"documents.upload","description":"Upload a document for parsing.","parameters":{"type":"object","properties":{"file":{"type":"string","description":"Document file content or URL."},"fileName":{"type":"string","description":"Name of the document file."},"meta":{"type":"object","description":"Optional metadata to associate with the document."}},"required":["file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.extract","description":"Extract structured data from a document.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"ID of the uploaded document."},"markdown":{"type":"string","description":"Template or schema for extraction in markdown format."}},"required":["documentId","markdown"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.get","description":"Retrieve document parsing status and results.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"ID of the document to retrieve."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.delete","description":"Delete a parsed document.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"ID of the document to delete."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.reprocess","description":"Reprocess an existing document with the latest template.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"ID of the document to reprocess."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"inbox.create","description":"Create a new parsing inbox.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Display name for the inbox."},"description":{"type":"string","description":"Optional inbox description."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"airtable","displayName":"Airtable","description":"Query and update Airtable records for lightweight operational databases.","auth":{"kind":"api-key","hint":"Airtable personal access token."},"category":"spreadsheet","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.list","description":"List records in a table.","parameters":{"type":"object","properties":{"baseId":{"type":"string"},"tableName":{"type":"string"},"maxRecords":{"type":"integer","minimum":1,"maximum":100},"filterByFormula":{"type":"string"}},"required":["baseId","tableName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.get","description":"Read a single Airtable record.","parameters":{"type":"object","properties":{"baseId":{"type":"string"},"tableName":{"type":"string"},"recordId":{"type":"string"}},"required":["baseId","tableName","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.create","description":"Create an Airtable record.","parameters":{"type":"object","properties":{"baseId":{"type":"string"},"tableName":{"type":"string"},"fields":{"type":"object"}},"required":["baseId","tableName","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Update an Airtable record.","parameters":{"type":"object","properties":{"baseId":{"type":"string"},"tableName":{"type":"string"},"recordId":{"type":"string"},"fields":{"type":"object"}},"required":["baseId","tableName","recordId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.delete","description":"Delete a record from a table.","parameters":{"type":"object","properties":{"baseId":{"type":"string"},"tableName":{"type":"string"},"recordId":{"type":"string"}},"required":["baseId","tableName","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.upsert","description":"Insert or update records keyed by a merge field. Airtable performsUpsert mode keyed on fieldsToMergeOn.","parameters":{"type":"object","properties":{"baseId":{"type":"string"},"tableName":{"type":"string"},"records":{"type":"array","description":"List of { fields: { ... } } objects (max 10 per call).","items":{"type":"object"}},"fieldsToMergeOn":{"type":"array","description":"Field names used to match existing records for upsert.","items":{"type":"string"}},"typecast":{"type":"boolean"}},"required":["baseId","tableName","records","fieldsToMergeOn"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.batchCreate","description":"Create up to 10 records in a single call.","parameters":{"type":"object","properties":{"baseId":{"type":"string"},"tableName":{"type":"string"},"records":{"type":"array","description":"List of { fields: { ... } } objects (max 10 per call).","items":{"type":"object"}},"typecast":{"type":"boolean"}},"required":["baseId","tableName","records"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"airtop","displayName":"Airtop","description":"Drive cloud browser sessions: create/terminate sessions, open windows, scrape and interact with pages.","auth":{"kind":"api-key","hint":"Airtop API key (Bearer)."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"sessions.create","description":"Create a new cloud browser session.","parameters":{"type":"object","properties":{"configuration":{"type":"object"}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sessions.terminate","description":"Terminate an existing browser session.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"}},"required":["sessionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"windows.create","description":"Open a new browser window inside a session at the given URL.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"},"url":{"type":"string"},"screenResolution":{"type":"string"}},"required":["sessionId","url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"windows.screenshot","description":"Take a screenshot of a browser window.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"},"windowId":{"type":"string"}},"required":["sessionId","windowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"windows.pageQuery","description":"Run a natural-language page query against a window.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"},"windowId":{"type":"string"},"prompt":{"type":"string"},"followPaginationLinks":{"type":"boolean"},"configuration":{"type":"object"}},"required":["sessionId","windowId","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"windows.smartScrape","description":"Smart-scrape structured content from the current page.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"},"windowId":{"type":"string"},"prompt":{"type":"string"},"configuration":{"type":"object"}},"required":["sessionId","windowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"windows.paginatedExtraction","description":"Extract structured records across paginated pages.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"},"windowId":{"type":"string"},"prompt":{"type":"string"},"outputSchema":{"type":"object"},"paginationMode":{"type":"string"}},"required":["sessionId","windowId","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"windows.click","description":"Click an element described in natural language.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"},"windowId":{"type":"string"},"elementDescription":{"type":"string"},"clickType":{"type":"string"},"waitForNavigation":{"type":"boolean"}},"required":["sessionId","windowId","elementDescription"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"windows.type","description":"Type text into an element described in natural language.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"},"windowId":{"type":"string"},"elementDescription":{"type":"string"},"text":{"type":"string"},"submit":{"type":"boolean"}},"required":["sessionId","windowId","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"windows.hover","description":"Hover an element described in natural language.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"},"windowId":{"type":"string"},"elementDescription":{"type":"string"}},"required":["sessionId","windowId","elementDescription"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sessions.uploadFile","description":"Upload a file to a browser session for later use.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"},"fileName":{"type":"string"},"fileContent":{"type":"string"}},"required":["sessionId","fileName","fileContent"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"alai","displayName":"Alai","description":"Generate, export, and manage AI-produced presentations on Alai from text prompts.","auth":{"kind":"api-key","hint":"Alai API key (see your Alai account settings). Sent as `Authorization: Bearer <key>`."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"generate.presentation","description":"Generate a new AI presentation from input text. Returns a generation job id; poll get.generation for status.","parameters":{"type":"object","properties":{"inputText":{"type":"string","description":"Text content to generate a presentation from."},"title":{"type":"string","description":"Optional title; Alai will generate one if omitted."},"themeId":{"type":"string","description":"Presentation theme id."},"slideRange":{"type":"string","description":"Target slide count bucket (auto | 1 | 2-5 | 6-10 | 11-15 | 16-20 | 21-25 | 26-50)."},"tone":{"type":"string","description":"Tone of voice for generated copy."},"contentMode":{"type":"string","description":"How to interpret inputText (e.g. summarize vs rewrite)."},"amountMode":{"type":"string","description":"Text density per slide."},"includeAiImages":{"type":"boolean"},"imageStyle":{"type":"string"},"waitForCompletion":{"type":"boolean"},"maxWaitTime":{"type":"number","description":"Seconds; default 300 on Alai side."},"additionalInstructions":{"type":"string"}},"required":["inputText"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.generation","description":"Fetch status + result for a previously started generation job.","parameters":{"type":"object","properties":{"generationId":{"type":"string","description":"Id returned by generate.presentation."}},"required":["generationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"export.presentation","description":"Export an existing Alai presentation to one or more file formats (pdf, pptx, …). Returns a job id + download URLs.","parameters":{"type":"object","properties":{"presentationId":{"type":"string"},"exportFormats":{"type":"array","items":{"type":"string"},"description":"List of formats, e.g. [\"pdf\", \"pptx\"]."},"waitForCompletion":{"type":"boolean"},"maxWaitTime":{"type":"number"}},"required":["presentationId","exportFormats"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"add.slide","description":"Insert a new slide into an existing presentation at a given position.","parameters":{"type":"object","properties":{"presentationId":{"type":"string"},"slide_context":{"type":"string","description":"Topic/content for the new slide."},"slide_order":{"type":"string","description":"Position to insert the slide (e.g. \"end\", or a 1-based index)."},"additionalInstructions":{"type":"string"},"includeAiImages":{"type":"boolean"},"imageStyle":{"type":"string"}},"required":["presentationId","slide_context"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"delete.presentation","description":"Permanently delete an Alai presentation. Destructive — not reversible.","parameters":{"type":"object","properties":{"presentationId":{"type":"string"}},"required":["presentationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"alt-text-ai","displayName":"AltText.ai","description":"Generate SEO-friendly alt text for images via the AltText.ai vision API.","auth":{"kind":"api-key","hint":"AltText.ai API key (Account → API Access). Sent as X-API-Key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"images.generateAltText","description":"Generate alt text for a single image. Accepts a URL or base64-encoded raw bytes plus optional keyword guidance.","parameters":{"type":"object","properties":{"image":{"type":"string","description":"Public image URL OR base64-encoded raw image bytes. Required."},"keywords":{"type":"array","items":{"type":"string"},"description":"Keywords or phrases the generated alt text should consider including."},"negativeKeywords":{"type":"array","items":{"type":"string"},"description":"Keywords or phrases the generated alt text must not include."},"keywordSource":{"type":"string","description":"Free-form text used as a source for relevant keywords (e.g. the page body)."}},"required":["image"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"images.batchGenerateAltText","description":"Generate alt text for a batch of images. Accepts an array of image entries; each entry mirrors the single-image action input.","parameters":{"type":"object","properties":{"images":{"type":"array","description":"Array of { image, keywords?, negative_keywords?, keyword_source? } entries. Required.","items":{"type":"object"}}},"required":["images"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"images.deleteResult","description":"Delete a stored alt-text result by its per-request id.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"AltText.ai per-request id returned from generate."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"alttextify","displayName":"AltTextify","description":"Generate SEO-optimized alt text for images via the AltTextify API.","auth":{"kind":"api-key","hint":"AltTextify API key (X-API-Key header)."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"generate.alt.text","description":"Generate alt text for an image encoded as a data URL or raw base64 payload.","parameters":{"type":"object","properties":{"image":{"type":"string","description":"Image payload as a data URL (e.g. data:image/jpeg;base64,...) or raw base64 string."},"lang":{"type":"string","description":"Language code for the generated alt text (e.g. en, es, fr)."},"keywords":{"type":"array","items":{"type":"string"},"description":"Keywords/phrases to bias the generated alt text toward."},"negative_keywords":{"type":"array","items":{"type":"string"},"description":"Keywords/phrases to exclude from the generated alt text."},"async":{"type":"boolean","description":"When true, returns a job handle instead of the alt text directly."}},"required":["image"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"batch.generate.alt.text","description":"Generate alt text for a list of images in a single call.","parameters":{"type":"object","properties":{"images":{"type":"array","description":"Array of image entries. Each entry mirrors the single generate.alt.text body fields.","items":{"type":"object"}},"lang":{"type":"string"},"async":{"type":"boolean"}},"required":["images"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"result.delete","description":"Delete a stored alt-text generation by its id.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"AltTextify generation id."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"amazon-bedrock","displayName":"Amazon Bedrock","description":"Invoke AWS Bedrock foundation models for text generation, image analysis, image generation, and embeddings; list available foundation models.","auth":{"kind":"api-key","hint":"AWS credentials as JSON: {\"accessKeyId\":\"AKIA…\",\"secretAccessKey\":\"…\",\"region\":\"us-east-1\"}. Optional \"sessionToken\" and \"endpoint\". Requests are signed with AWS Signature V4; the region selects the bedrock-runtime.<region>.amazonaws.com endpoint."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"models.list","description":"List foundation models available in the configured AWS region.","parameters":{"type":"object","properties":{"byProvider":{"type":"string","description":"Filter to a specific provider (e.g. anthropic, amazon, meta)."},"byOutputModality":{"type":"string","description":"Filter by output modality (TEXT, IMAGE, EMBEDDING)."},"byInferenceType":{"type":"string","description":"Filter by inference type (ON_DEMAND, PROVISIONED)."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"models.get","description":"Describe a single foundation model.","parameters":{"type":"object","properties":{"modelIdentifier":{"type":"string","description":"Model identifier or ARN (e.g. anthropic.claude-3-sonnet-20240229-v1:0)."}},"required":["modelIdentifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"model.invoke","description":"Invoke a foundation model with a raw provider-native request body. Used for send.prompt, generate.image, generate.embeddings, and generate.content.from.image flows; the body schema is the model provider native schema (Anthropic messages, Titan image gen, Titan/Cohere embeddings, etc.).","parameters":{"type":"object","properties":{"modelId":{"type":"string","description":"Bedrock model id (e.g. anthropic.claude-3-sonnet-20240229-v1:0, amazon.titan-image-generator-v1, amazon.titan-embed-text-v2:0)."},"body":{"type":"object","description":"Provider-native request body (passed through as JSON)."},"accept":{"type":"string","description":"Response media type. Defaults to application/json; image generation returns application/json with base64-encoded artifacts."},"contentType":{"type":"string","description":"Request media type. Defaults to application/json."}},"required":["modelId","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"model.converse","description":"Multi-turn conversation against a foundation model using the unified Bedrock Converse API (model-agnostic messages array, system prompt, inference config, tool config).","parameters":{"type":"object","properties":{"modelId":{"type":"string","description":"Bedrock model id supporting Converse."},"messages":{"type":"array","description":"Conversation turns. Each item: { role: \"user\" | \"assistant\", content: [{ text } | { image } | { toolUse } | { toolResult }] }."},"system":{"type":"array","description":"Optional system prompt blocks: [{ text }]."},"inferenceConfig":{"type":"object","description":"Optional inference settings (maxTokens, temperature, topP, stopSequences)."},"toolConfig":{"type":"object","description":"Optional tool-use configuration (tools, toolChoice)."},"additionalModelRequestFields":{"type":"object","description":"Provider-specific fields passed through verbatim (e.g. Anthropic top_k)."}},"required":["modelId","messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"model.invoke.stream","description":"Invoke a foundation model with streaming response (server-sent event stream of model output chunks). Body and modelId match model.invoke; the response is an event stream rather than a single JSON document.","parameters":{"type":"object","properties":{"modelId":{"type":"string"},"body":{"type":"object","description":"Provider-native request body."},"accept":{"type":"string","description":"Defaults to application/vnd.amazon.eventstream."},"contentType":{"type":"string","description":"Defaults to application/json."}},"required":["modelId","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"amazon-eventbridge","displayName":"Amazon EventBridge","description":"Publish events and manage Amazon EventBridge event buses, rules, and rule targets.","auth":{"kind":"api-key","hint":"AWS credentials as JSON: {\"accessKeyId\":\"AKIA…\",\"secretAccessKey\":\"…\",\"region\":\"us-east-1\"}. An optional \"sessionToken\" supports temporary STS credentials."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"events.publish","description":"Publish up to 10 events to EventBridge event buses.","parameters":{"type":"object","properties":{"entries":{"type":"array","description":"Event entries. Each entry may contain Time, Source, Resources, DetailType, Detail, EventBusName, and TraceHeader."},"endpointId":{"type":"string","description":"Global endpoint identifier used for cross-region routing."}},"required":["entries"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"event-buses.list","description":"List event buses in the configured AWS region.","parameters":{"type":"object","properties":{"namePrefix":{"type":"string","description":"Filter event bus names by prefix."},"nextToken":{"type":"string"},"limit":{"type":"integer","description":"Maximum results to return (1-100)."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"event-buses.create","description":"Create a custom EventBridge event bus.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Event bus name."},"eventSourceName":{"type":"string","description":"Partner event source name to associate with the bus."},"description":{"type":"string"},"kmsKeyIdentifier":{"type":"string","description":"KMS key identifier used to encrypt events on this bus."},"deadLetterConfig":{"type":"object","description":"Dead-letter queue configuration, for example { Arn }."},"tags":{"type":"array","description":"AWS tags as an array of { Key, Value } objects."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"event-buses.delete","description":"Delete a custom EventBridge event bus.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Event bus name."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"rules.list","description":"List EventBridge rules, optionally filtered by event bus or name prefix.","parameters":{"type":"object","properties":{"eventBusName":{"type":"string"},"namePrefix":{"type":"string"},"nextToken":{"type":"string"},"limit":{"type":"integer","description":"Maximum results to return (1-100)."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rules.get","description":"Get one EventBridge rule by name and event bus.","parameters":{"type":"object","properties":{"name":{"type":"string"},"eventBusName":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rules.put","description":"Create or replace an EventBridge rule.","parameters":{"type":"object","properties":{"name":{"type":"string"},"eventBusName":{"type":"string"},"eventPattern":{"type":"string","description":"Event pattern as a JSON string."},"scheduleExpression":{"type":"string","description":"Rate or cron expression."},"state":{"type":"string","enum":["ENABLED","DISABLED","ENABLED_WITH_ALL_CLOUDTRAIL_MANAGEMENT_EVENTS"]},"description":{"type":"string"},"roleArn":{"type":"string"},"tags":{"type":"array","description":"AWS tags as { Key, Value } objects."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"rules.delete","description":"Delete an EventBridge rule after its targets have been removed.","parameters":{"type":"object","properties":{"name":{"type":"string"},"eventBusName":{"type":"string"},"force":{"type":"boolean","description":"Force deletion of a managed rule."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"targets.list","description":"List the targets attached to an EventBridge rule.","parameters":{"type":"object","properties":{"rule":{"type":"string"},"eventBusName":{"type":"string"},"nextToken":{"type":"string"},"limit":{"type":"integer","description":"Maximum results to return (1-100)."}},"required":["rule"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"targets.put","description":"Add or update up to 10 targets on an EventBridge rule.","parameters":{"type":"object","properties":{"rule":{"type":"string"},"eventBusName":{"type":"string"},"targets":{"type":"array","description":"Target definitions. Each target requires Id and Arn."}},"required":["rule","targets"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"targets.remove","description":"Remove target IDs from an EventBridge rule.","parameters":{"type":"object","properties":{"rule":{"type":"string"},"eventBusName":{"type":"string"},"ids":{"type":"array","description":"Target IDs to remove (up to 10)."},"force":{"type":"boolean","description":"Force removal from a managed rule."}},"required":["rule","ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"amazon-s3","displayName":"Amazon S3","description":"Scalable storage in the cloud. Read, upload, delete, and manage files in S3 buckets.","auth":{"kind":"api-key","hint":"AWS credentials as JSON: {\"accessKeyId\":\"AKIA…\",\"secretAccessKey\":\"…\",\"region\":\"us-east-1\"} for an IAM principal with S3 permissions. Optional \"sessionToken\" and \"endpoint\" (S3-compatible stores). Requests are signed with AWS Signature V4; the region selects the s3.<region>.amazonaws.com endpoint."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"files.list","description":"List files in an S3 bucket folder.","parameters":{"type":"object","properties":{"prefix":{"type":"string","description":"Folder path to filter results (e.g., docs/)"},"maxKeys":{"type":"integer","description":"Maximum number of files to return (1–1000)"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.read","description":"Read a file from S3.","parameters":{"type":"object","properties":{"key":{"type":"string","description":"The full path to the file in S3"}},"required":["key"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.upload","description":"Upload a file to S3.","parameters":{"type":"object","properties":{"key":{"type":"string","description":"The file path and name in S3"},"contentType":{"type":"string","description":"MIME type of the file"}},"required":["key"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.delete","description":"Delete a file from S3.","parameters":{"type":"object","properties":{"key":{"type":"string","description":"The full path to the file to delete"}},"required":["key"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"files.generateSignedUrl","description":"Generate a signed URL for temporary access to a file.","parameters":{"type":"object","properties":{"key":{"type":"string","description":"The file path in S3"},"expiresIn":{"type":"integer","description":"URL validity duration in minutes"}},"required":["key","expiresIn"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.moveFile","description":"Move a file to a different location in S3.","parameters":{"type":"object","properties":{"sourceKey":{"type":"string","description":"Current file path"},"destinationKey":{"type":"string","description":"New file path"}},"required":["sourceKey","destinationKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"files.copyFile","description":"Server-side copy of an object to a new key. Source is left in place.","parameters":{"type":"object","properties":{"sourceKey":{"type":"string","description":"Existing object identifier as {bucket}/{key}."},"destinationKey":{"type":"string","description":"New object key (relative to the destination bucket)."}},"required":["sourceKey","destinationKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.setMetadata","description":"Replace object metadata in place via the S3 copy-self pattern (x-amz-metadata-directive: REPLACE).","parameters":{"type":"object","properties":{"key":{"type":"string","description":"Object key whose metadata should be replaced."},"contentType":{"type":"string","description":"New Content-Type for the object."},"metadata":{"type":"string","description":"Serialized x-amz-meta-* JSON forwarded as the x-amz-meta-user header (caller-controlled)."}},"required":["key"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.createBucket","description":"Create a new bucket in the configured region. Request is a PUT against the bucket name path.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name to create."},"region":{"type":"string","description":"AWS region for the bucket (sent via x-amz-bucket-region)."}},"required":["bucket"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"amazon-secrets-manager","displayName":"AWS Secrets Manager","description":"Create, read, update, find, and delete secrets in AWS Secrets Manager, or generate a random password.","auth":{"kind":"api-key","hint":"AWS credentials as JSON: {\"accessKeyId\":\"AKIA…\",\"secretAccessKey\":\"…\",\"region\":\"us-east-1\"}. Optional \"sessionToken\" and \"endpoint\". Requests are signed with AWS Signature V4; the region selects the secretsmanager.<region>.amazonaws.com endpoint."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"secrets.get","description":"Retrieve the value of a secret by name or ARN.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Secret name or ARN."},"versionId":{"type":"string","description":"Specific version id (optional)."},"versionStage":{"type":"string","description":"Staging label (defaults to AWSCURRENT)."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"secrets.find","description":"List or filter secrets by name, tag, or description.","parameters":{"type":"object","properties":{"filterKey":{"type":"string","description":"Field to filter by (name, description, tag-key, tag-value, all)."},"filterValue":{"type":"string","description":"Filter value."},"maxResults":{"type":"integer","description":"Max results (1-100)."},"sortBy":{"type":"string","description":"Sort by name or last accessed."},"sortOrder":{"type":"string","description":"asc or desc."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"secrets.password.random","description":"Generate a random password (does not store it). Used as input to secrets.create / secrets.update.","parameters":{"type":"object","properties":{"passwordLength":{"type":"integer"},"excludeCharacters":{"type":"string"},"excludeNumbers":{"type":"boolean"},"excludePunctuation":{"type":"boolean"},"excludeUppercase":{"type":"boolean"},"excludeLowercase":{"type":"boolean"},"includeSpace":{"type":"boolean"},"requireEachIncludedType":{"type":"boolean"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"secrets.create","description":"Create a new secret with a name, value, and optional tags.","parameters":{"type":"object","properties":{"name":{"type":"string"},"secretValue":{"type":"string"},"description":{"type":"string"},"tags":{"type":"array","description":"List of { Key, Value } tag objects.","items":{"type":"object"}},"clientRequestToken":{"type":"string","description":"Idempotency token (defaults to invocation idempotency key)."}},"required":["name","secretValue"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"secrets.update","description":"Update the value of an existing secret. Creates a new AWSCURRENT version.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Secret name or ARN."},"secretValue":{"type":"string"},"description":{"type":"string"},"clientRequestToken":{"type":"string"}},"required":["name","secretValue"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"secrets.delete","description":"Schedule a secret for deletion. Defaults to a 30-day recovery window; pass forceDeleteWithoutRecovery to skip it.","parameters":{"type":"object","properties":{"name":{"type":"string"},"recoveryWindowInDays":{"type":"integer","description":"7-30. Ignored when forceDeleteWithoutRecovery is true."},"forceDeleteWithoutRecovery":{"type":"boolean"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"secrets.rotate","description":"Trigger immediate rotation of a secret.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Secret name or ARN."},"rotationLambdaArn":{"type":"string","description":"ARN of the Lambda rotation function (optional if already configured)."},"rotationRules":{"type":"object","description":"Optional RotationRules object (AutomaticallyAfterDays, Duration, ScheduleExpression)."},"rotateImmediately":{"type":"boolean","description":"When true, rotates the secret immediately in addition to scheduling."},"clientRequestToken":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"secrets.restore","description":"Cancel a scheduled deletion of a secret and reinstate it.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Secret name or ARN."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"secrets.tag","description":"Attach tags to a secret.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Secret name or ARN."},"tags":{"type":"array","description":"List of { Key, Value } tag objects to attach.","items":{"type":"object"}}},"required":["name","tags"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"amazon-ses","displayName":"Amazon SES","description":"Send transactional and templated email and manage SES email templates via the Amazon SES v2 REST API.","auth":{"kind":"api-key","hint":"AWS credentials as JSON: {\"accessKeyId\":\"AKIA…\",\"secretAccessKey\":\"…\",\"region\":\"us-east-1\"} (the key needs ses:SendEmail / ses:SendTemplatedEmail / template-management permissions). Optional \"sessionToken\" and \"endpoint\". Requests are signed with AWS Signature V4; the region selects the email.<region>.amazonaws.com (SES v2) endpoint."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"send.email","description":"Send a transactional email via SES SendEmail (simple content).","parameters":{"type":"object","properties":{"fromEmailAddress":{"type":"string"},"toAddresses":{"type":"array","items":{"type":"string"}},"ccAddresses":{"type":"array","items":{"type":"string"}},"bccAddresses":{"type":"array","items":{"type":"string"}},"replyToAddresses":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"htmlBody":{"type":"string"},"textBody":{"type":"string"},"returnPath":{"type":"string"},"configurationSetName":{"type":"string"},"emailTags":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string"},"Value":{"type":"string"}},"required":["Name","Value"]}},"sourceArn":{"type":"string"},"returnPathArn":{"type":"string"}},"required":["fromEmailAddress","toAddresses","subject"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"send.templated.email","description":"Send an email rendered from an SES email template with merge data.","parameters":{"type":"object","properties":{"fromEmailAddress":{"type":"string"},"toAddresses":{"type":"array","items":{"type":"string"}},"ccAddresses":{"type":"array","items":{"type":"string"}},"bccAddresses":{"type":"array","items":{"type":"string"}},"replyToAddresses":{"type":"array","items":{"type":"string"}},"templateName":{"type":"string"},"templateData":{"type":"object"},"configurationSetName":{"type":"string"},"emailTags":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string"},"Value":{"type":"string"}},"required":["Name","Value"]}},"sourceArn":{"type":"string"},"returnPathArn":{"type":"string"}},"required":["fromEmailAddress","toAddresses","templateName","templateData"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.email.template","description":"Create a reusable SES email template (subject + HTML + text parts).","parameters":{"type":"object","properties":{"templateName":{"type":"string"},"subjectPart":{"type":"string"},"htmlPart":{"type":"string"},"textPart":{"type":"string"}},"required":["templateName","subjectPart"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.email.template","description":"Update an existing SES email template by name.","parameters":{"type":"object","properties":{"templateName":{"type":"string"},"subjectPart":{"type":"string"},"htmlPart":{"type":"string"},"textPart":{"type":"string"}},"required":["templateName","subjectPart"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.custom.verification.email.template","description":"Create a custom verification email template used by SendCustomVerificationEmail.","parameters":{"type":"object","properties":{"templateName":{"type":"string"},"fromEmailAddress":{"type":"string"},"templateSubject":{"type":"string"},"templateContent":{"type":"string"},"successRedirectionURL":{"type":"string"},"failureRedirectionURL":{"type":"string"}},"required":["templateName","fromEmailAddress","templateSubject","templateContent","successRedirectionURL","failureRedirectionURL"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.custom.verification.email.template","description":"Update a custom verification email template by name.","parameters":{"type":"object","properties":{"templateName":{"type":"string"},"fromEmailAddress":{"type":"string"},"templateSubject":{"type":"string"},"templateContent":{"type":"string"},"successRedirectionURL":{"type":"string"},"failureRedirectionURL":{"type":"string"}},"required":["templateName","fromEmailAddress","templateSubject","templateContent","successRedirectionURL","failureRedirectionURL"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"send.custom.verification.email","description":"Send a custom verification email to an address using a previously created template.","parameters":{"type":"object","properties":{"emailAddress":{"type":"string"},"templateName":{"type":"string"},"configurationSetName":{"type":"string"}},"required":["emailAddress","templateName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"amazon-sns","displayName":"Amazon SNS","description":"Publish messages to Amazon Simple Notification Service topics, manage topics, and manage subscriptions.","auth":{"kind":"api-key","hint":"AWS credentials as JSON: {\"accessKeyId\":\"AKIA…\",\"secretAccessKey\":\"…\",\"region\":\"us-east-1\"}. Optional \"sessionToken\" and \"endpoint\". Requests are signed with AWS Signature V4; the region selects the sns.<region>.amazonaws.com endpoint."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"topics.list","description":"List Amazon SNS topics in the caller account. Paginated via NextToken.","parameters":{"type":"object","properties":{"nextToken":{"type":"string","description":"Continuation token returned by a prior ListTopics call."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"topics.get-attributes","description":"Get the attributes of an SNS topic (delivery policy, owner, subscription counts, etc.).","parameters":{"type":"object","properties":{"topicArn":{"type":"string","description":"ARN of the topic."}},"required":["topicArn"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.list","description":"List subscriptions, optionally filtered to a single topic.","parameters":{"type":"object","properties":{"topicArn":{"type":"string","description":"If set, list only subscriptions for this topic ARN."},"nextToken":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"send.message","description":"Publish a message to an SNS topic. The message is fanned out to all topic subscribers.","parameters":{"type":"object","properties":{"topicArn":{"type":"string","description":"ARN of the destination SNS topic."},"message":{"type":"string","description":"Message payload delivered to subscribers."},"subject":{"type":"string","description":"Optional subject line used by email-protocol subscribers (max 100 ASCII chars)."},"messageStructure":{"type":"string","description":"Set to \"json\" to deliver protocol-specific payloads (e.g. APNS vs email)."},"messageGroupId":{"type":"string","description":"FIFO topic message group id. Required for FIFO topics."},"messageDeduplicationId":{"type":"string","description":"FIFO topic deduplication id. Defaults to the invocation idempotency key for FIFO topics."}},"required":["topicArn","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"topics.create","description":"Create an SNS topic. Idempotent: calling with the same Name returns the existing topic ARN.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Topic name (1-256 chars, alnum/_/-, FIFO topics end with .fifo)."},"displayName":{"type":"string","description":"Human-readable name used in SMS subscriber notifications."},"fifoTopic":{"type":"boolean","description":"Set to true to create a FIFO topic (name must end with .fifo)."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"topics.delete","description":"Delete an SNS topic and all of its subscriptions.","parameters":{"type":"object","properties":{"topicArn":{"type":"string"}},"required":["topicArn"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.subscribe","description":"Subscribe an endpoint (email, https, sqs, lambda, sms, application) to an SNS topic.","parameters":{"type":"object","properties":{"topicArn":{"type":"string"},"protocol":{"type":"string","description":"http, https, email, email-json, sms, sqs, application, lambda, firehose."},"endpoint":{"type":"string","description":"URL / email address / ARN / phone number whose format depends on protocol."},"returnSubscriptionArn":{"type":"boolean","description":"Return the SubscriptionArn even when confirmation is still pending. Defaults to false."}},"required":["topicArn","protocol","endpoint"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.unsubscribe","description":"Delete an SNS subscription.","parameters":{"type":"object","properties":{"subscriptionArn":{"type":"string"}},"required":["subscriptionArn"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"amazon-sqs","displayName":"Amazon SQS","description":"Send, receive, and delete messages on AWS SQS queues, and discover queue URLs and attributes.","auth":{"kind":"api-key","hint":"AWS credentials as JSON: {\"accessKeyId\":\"AKIA…\",\"secretAccessKey\":\"…\",\"region\":\"us-east-1\"}. Optional \"sessionToken\" (STS temp creds) and \"endpoint\" (override host). Requests are signed with AWS Signature V4; the region selects the sqs.<region>.amazonaws.com endpoint."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"queues.list","description":"List SQS queue URLs visible to the caller in the configured region.","parameters":{"type":"object","properties":{"queueNamePrefix":{"type":"string","description":"Only return queues whose name starts with this prefix."},"maxResults":{"type":"integer","description":"Maximum number of queue URLs to return (1-1000)."},"nextToken":{"type":"string","description":"Pagination token from a previous ListQueues response."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"queues.getUrl","description":"Resolve a queue name to its URL (the canonical identifier used by every other SQS call).","parameters":{"type":"object","properties":{"queueName":{"type":"string","description":"Queue name (without the AWS account prefix)."},"queueOwnerAWSAccountId":{"type":"string","description":"AWS account id of the queue owner if not the caller."}},"required":["queueName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"queues.getAttributes","description":"Get queue attributes (e.g. ApproximateNumberOfMessages, VisibilityTimeout, RedrivePolicy).","parameters":{"type":"object","properties":{"queueUrl":{"type":"string","description":"Fully qualified SQS queue URL."},"attributeNames":{"type":"array","description":"Attribute names to fetch (e.g. [\"All\"], [\"ApproximateNumberOfMessages\"])."}},"required":["queueUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.send","description":"Send a message to an SQS queue. Maps to the activepieces send.message action. For FIFO queues, MessageGroupId is required and MessageDeduplicationId enables native deduplication.","parameters":{"type":"object","properties":{"queueUrl":{"type":"string","description":"Fully qualified SQS queue URL."},"messageBody":{"type":"string","description":"Message payload (string; opaque to SQS)."},"delaySeconds":{"type":"integer","description":"Delay before the message becomes visible (0-900 seconds)."},"messageAttributes":{"type":"object","description":"Structured attributes (name -> { DataType, StringValue | BinaryValue })."},"messageSystemAttributes":{"type":"object","description":"System attributes (e.g. AWSTraceHeader)."},"messageGroupId":{"type":"string","description":"FIFO queue ordering group; required for FIFO queues."},"messageDeduplicationId":{"type":"string","description":"FIFO queue dedup token; suppresses redelivery of the same id within the 5-minute window."}},"required":["queueUrl","messageBody"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.sendBatch","description":"Send up to 10 messages in one call. Each Entry needs a unique Id within the batch.","parameters":{"type":"object","properties":{"queueUrl":{"type":"string"},"entries":{"type":"array","description":"Array of { Id, MessageBody, DelaySeconds?, MessageAttributes?, MessageGroupId?, MessageDeduplicationId? }."}},"required":["queueUrl","entries"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.receive","description":"Receive up to MaxNumberOfMessages messages from a queue. Returns ReceiptHandles required for messages.delete. Long polling (WaitTimeSeconds > 0) reduces empty receives.","parameters":{"type":"object","properties":{"queueUrl":{"type":"string"},"maxNumberOfMessages":{"type":"integer","description":"Maximum messages to return (1-10)."},"waitTimeSeconds":{"type":"integer","description":"Long-poll duration (0-20 seconds)."},"visibilityTimeout":{"type":"integer","description":"Seconds the message stays invisible to other receivers."},"attributeNames":{"type":"array","description":"System attributes to include (e.g. [\"All\"])."},"messageAttributeNames":{"type":"array","description":"User attribute names to include (e.g. [\"All\"])."},"receiveRequestAttemptId":{"type":"string","description":"FIFO receive retry dedup token (5-minute window)."}},"required":["queueUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"messages.delete","description":"Permanently delete a message from a queue using the ReceiptHandle returned by messages.receive. Required to acknowledge processing; otherwise the message redelivers after VisibilityTimeout.","parameters":{"type":"object","properties":{"queueUrl":{"type":"string"},"receiptHandle":{"type":"string","description":"ReceiptHandle from the matching ReceiveMessage response."}},"required":["queueUrl","receiptHandle"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.deleteBatch","description":"Delete up to 10 messages in one call. Each Entry needs a unique Id within the batch.","parameters":{"type":"object","properties":{"queueUrl":{"type":"string"},"entries":{"type":"array","description":"Array of { Id, ReceiptHandle }."}},"required":["queueUrl","entries"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.changeVisibility","description":"Extend or shorten the visibility timeout of a received message. Use to keep a long-running handler from losing its lease.","parameters":{"type":"object","properties":{"queueUrl":{"type":"string"},"receiptHandle":{"type":"string"},"visibilityTimeout":{"type":"integer","description":"New visibility timeout in seconds (0-43200)."}},"required":["queueUrl","receiptHandle","visibilityTimeout"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"amazon-textract","displayName":"AWS Textract","description":"Extract text, forms, tables, signatures, and structured data (expense, identity) from documents using AWS Textract.","auth":{"kind":"api-key","hint":"AWS credentials as JSON: {\"accessKeyId\":\"AKIA…\",\"secretAccessKey\":\"…\",\"region\":\"us-east-1\"}. Optional \"sessionToken\" and \"endpoint\". Requests are signed with AWS Signature V4; the region selects the textract.<region>.amazonaws.com endpoint."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"document.analyze","description":"Analyze a document for forms, tables, signatures, layout, and queries (synchronous). Single-page JPEG/PNG up to 5 MB direct upload, or any size when sourced from S3.","parameters":{"type":"object","properties":{"Document":{"type":"object","description":"Document source. Either { Bytes: base64-encoded-image } for direct upload, or { S3Object: { Bucket, Name, Version? } } for an S3-hosted document."},"FeatureTypes":{"type":"array","description":"List of features to extract. Allowed values: TABLES, FORMS, SIGNATURES, LAYOUT, QUERIES."},"QueriesConfig":{"type":"object","description":"Optional plain-English questions to ask about the document. Shape: { Queries: [{ Text, Alias?, Pages? }] }. Requires FeatureTypes includes QUERIES."},"HumanLoopConfig":{"type":"object","description":"Optional Augmented AI (A2I) human review loop configuration."},"AdaptersConfig":{"type":"object","description":"Optional custom adapter configuration for fine-tuned extraction."}},"required":["Document","FeatureTypes"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"document.text.detect","description":"Detect lines and words of text in a document (synchronous OCR). Single-page JPEG/PNG up to 5 MB direct upload, or any size when sourced from S3.","parameters":{"type":"object","properties":{"Document":{"type":"object","description":"Document source. Either { Bytes: base64-encoded-image } or { S3Object: { Bucket, Name, Version? } }."}},"required":["Document"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"expense.analyze","description":"Extract receipt/invoice fields (vendor, total, line items, tax) from an expense document (synchronous).","parameters":{"type":"object","properties":{"Document":{"type":"object","description":"Document source. Either { Bytes: base64-encoded-image } or { S3Object: { Bucket, Name, Version? } }."}},"required":["Document"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"id.analyze","description":"Extract structured fields (name, date of birth, document number, address) from identity documents such as drivers licenses and passports.","parameters":{"type":"object","properties":{"DocumentPages":{"type":"array","description":"Array of 1–2 document pages, each of the form { Bytes } or { S3Object: { Bucket, Name, Version? } }."}},"required":["DocumentPages"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"document.analyze.async.start","description":"Start an asynchronous document analysis job for large or multi-page documents (PDF, TIFF). Returns a JobId for use with document.analyze.async.get.","parameters":{"type":"object","properties":{"DocumentLocation":{"type":"object","description":"S3 source: { S3Object: { Bucket, Name, Version? } }."},"FeatureTypes":{"type":"array","description":"List of features to extract. Allowed values: TABLES, FORMS, SIGNATURES, LAYOUT, QUERIES."},"ClientRequestToken":{"type":"string","description":"Idempotency token (1–64 chars). Repeated calls with the same token return the same JobId for up to 24 hours."},"JobTag":{"type":"string","description":"Optional identifier echoed in completion notifications."},"NotificationChannel":{"type":"object","description":"Optional SNS topic config: { SNSTopicArn, RoleArn }."},"OutputConfig":{"type":"object","description":"Optional S3 destination for raw analysis output: { S3Bucket, S3Prefix? }."},"KMSKeyId":{"type":"string","description":"Optional KMS key id for server-side encryption of output."},"QueriesConfig":{"type":"object","description":"Optional queries config (same shape as the synchronous Analyze call)."},"AdaptersConfig":{"type":"object","description":"Optional custom adapter configuration."}},"required":["DocumentLocation","FeatureTypes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"document.analyze.async.get","description":"Retrieve the results of an asynchronous document analysis job started with document.analyze.async.start. Pages results via NextToken for large outputs.","parameters":{"type":"object","properties":{"JobId":{"type":"string","description":"JobId returned by document.analyze.async.start."},"MaxResults":{"type":"number","description":"Maximum blocks per page (1–1000). Default 1000."},"NextToken":{"type":"string","description":"Pagination cursor returned by the previous call."}},"required":["JobId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"aminos","displayName":"Aminos One","description":"Provision end-users on an Aminos One panel.","auth":{"kind":"api-key","hint":"Aminos One API access token from the panel; the panel base URL is supplied via connection metadata."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.create","description":"Create an end-user on the Aminos One panel under the supplied plan. Mirrors the activepieces createUser action.","parameters":{"type":"object","properties":{"useremail":{"type":"string","description":"Username for the new Aminos user. Must be an e-mail address."},"userfriendlyname":{"type":"string","description":"Display name for the new Aminos user."},"userplanid":{"type":"integer","description":"Plan ID number from the plans defined in the Aminos One panel."}},"required":["useremail","userfriendlyname","userplanid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.update","description":"Update an existing Aminos One end-user by id.","parameters":{"type":"object","properties":{"userid":{"type":"string","description":"Identifier of the Aminos user to update."},"useremail":{"type":"string","description":"New email address for the user."},"userfriendlyname":{"type":"string","description":"New display name for the user."},"userplanid":{"type":"integer","description":"New plan id for the user."}},"required":["userid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.delete","description":"Delete an Aminos One end-user account by id.","parameters":{"type":"object","properties":{"userid":{"type":"string","description":"Identifier of the Aminos user to delete."}},"required":["userid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.list","description":"List end-users registered on the Aminos One panel.","parameters":{"type":"object","properties":{"page":{"type":"integer","description":"Page number to retrieve."},"limit":{"type":"integer","description":"Maximum number of users per page."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"ampeco","displayName":"AMPECO","description":"Manage AMPECO EV-charging infrastructure: charge points, EVSEs, sessions, tariffs, users, and webhook notification subscriptions.","auth":{"kind":"api-key","hint":"AMPECO Public API token (Bearer)."},"category":"webhook","defaultConsistencyModel":"authoritative","capabilities":[{"name":"charge.points.list","description":"List charge points across the operator network.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer"},"pageNumber":{"type":"integer"},"filter":{"type":"string","description":"AMPECO filter expression (filter[...])."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"charge.point.read","description":"Get a single charge point by ID.","parameters":{"type":"object","properties":{"chargePoint":{"type":"integer"}},"required":["chargePoint"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"charge.point.change.availability","description":"Change the operational availability of a charge point or one of its connectors (Operative/Inoperative).","parameters":{"type":"object","properties":{"chargePoint":{"type":"integer"},"evseNetworkId":{"type":"integer"},"type":{"type":"string","enum":["Operative","Inoperative"]}},"required":["chargePoint","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"charge.point.reset","description":"Issue a Soft or Hard reset to a charge point.","parameters":{"type":"object","properties":{"chargePoint":{"type":"integer"},"type":{"type":"string","enum":["Soft","Hard"]}},"required":["chargePoint","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"charge.point.start.charging.session","description":"Start a remote charging session on a given EVSE of a charge point.","parameters":{"type":"object","properties":{"chargePoint":{"type":"integer"},"evseNetworkId":{"type":"integer"},"userId":{"type":"integer"}},"required":["chargePoint","evseNetworkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"charge.point.stop.charging.session","description":"Stop a running charging session on a charge point EVSE.","parameters":{"type":"object","properties":{"chargePoint":{"type":"integer"},"evseNetworkId":{"type":"integer"}},"required":["chargePoint","evseNetworkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"evses.list","description":"List EVSE connectors.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer"},"pageNumber":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"evse.read","description":"Get a single EVSE by ID.","parameters":{"type":"object","properties":{"evse":{"type":"integer"}},"required":["evse"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sessions.list","description":"List charging sessions with optional date/user filters.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer"},"pageNumber":{"type":"integer"},"fromDate":{"type":"string","description":"ISO 8601"},"toDate":{"type":"string","description":"ISO 8601"},"userId":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"session.read","description":"Get a single charging session by ID.","parameters":{"type":"object","properties":{"session":{"type":"integer"}},"required":["session"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"locations.list","description":"List charging locations.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer"},"pageNumber":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"location.read","description":"Get a charging location by ID.","parameters":{"type":"object","properties":{"location":{"type":"integer"}},"required":["location"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"location.create","description":"Create a new charging location.","parameters":{"type":"object","properties":{"data":{"type":"object"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"location.update","description":"Update a charging location.","parameters":{"type":"object","properties":{"location":{"type":"integer"},"data":{"type":"object"}},"required":["location","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"location.delete","description":"Delete a charging location.","parameters":{"type":"object","properties":{"location":{"type":"integer"}},"required":["location"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tariffs.list","description":"List tariffs.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tariff.read","description":"Get a single tariff by ID.","parameters":{"type":"object","properties":{"tariff":{"type":"integer"}},"required":["tariff"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tariff.create","description":"Create a tariff.","parameters":{"type":"object","properties":{"data":{"type":"object"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tariff.update","description":"Update a tariff.","parameters":{"type":"object","properties":{"tariff":{"type":"integer"},"data":{"type":"object"}},"required":["tariff","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tariff.delete","description":"Delete a tariff.","parameters":{"type":"object","properties":{"tariff":{"type":"integer"}},"required":["tariff"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"users.list","description":"List end-user accounts.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer"},"pageNumber":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"user.read","description":"Get an end-user account by ID.","parameters":{"type":"object","properties":{"user":{"type":"integer"}},"required":["user"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"user.create","description":"Create a new end-user account.","parameters":{"type":"object","properties":{"data":{"type":"object"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"user.update","description":"Update an end-user account.","parameters":{"type":"object","properties":{"user":{"type":"integer"},"data":{"type":"object"}},"required":["user","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"user.delete","description":"Delete an end-user account.","parameters":{"type":"object","properties":{"user":{"type":"integer"}},"required":["user"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"notifications.list","description":"List webhook notification subscriptions.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"notifications.subscribe","description":"Subscribe a webhook URL to one or more AMPECO event types.","parameters":{"type":"object","properties":{"url":{"type":"string"},"events":{"type":"array","items":{"type":"string"}},"secret":{"type":"string"}},"required":["url","events"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notifications.unsubscribe","description":"Remove a webhook notification subscription by ID.","parameters":{"type":"object","properties":{"subscription":{"type":"integer"}},"required":["subscription"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"amplemarket","displayName":"Amplemarket","description":"Sales intelligence and outbound platform: search and enrich people and companies, validate emails, and add leads to sequences.","auth":{"kind":"api-key","hint":"Generate an API key in the Amplemarket dashboard (Settings -> API). Sent as the Authorization: Bearer header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"people.search","description":"Search for people by job function, company, industry and other filters.","parameters":{"type":"object","properties":{"page":{"type":"integer","description":"Page number."},"page_size":{"type":"integer","description":"Results per page."},"job_functions":{"type":"array","items":{"type":"string"},"description":"Job functions to filter by."},"industries":{"type":"array","items":{"type":"string"},"description":"Industries to filter by."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"people.find","description":"Enrich a single person by LinkedIn URL, email, or full name plus company. Consumes credits when contact data is revealed.","parameters":{"type":"object","properties":{"linkedin_url":{"type":"string","description":"LinkedIn profile URL."},"email":{"type":"string","description":"Known email address."},"full_name":{"type":"string","description":"Person's full name."},"company_name":{"type":"string","description":"Company name (use with full_name)."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"companies.find","description":"Enrich a single company by LinkedIn URL, domain, or name.","parameters":{"type":"object","properties":{"linkedin_url":{"type":"string","description":"Company LinkedIn URL."},"domain":{"type":"string","description":"Company domain."},"name":{"type":"string","description":"Company name."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"email.validate","description":"Start a batch email validation job. Consumes one email credit per validated address.","parameters":{"type":"object","properties":{"emails":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string"}}},"description":"List of email objects to validate."}},"required":["emails"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"sequence.add_leads","description":"Add one or more leads to an existing Amplemarket sequence.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Sequence ID."},"leads":{"type":"array","items":{"type":"object"},"description":"Array of lead objects to enroll."}},"required":["id","leads"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"amplitude","displayName":"Amplitude","description":"Query project analytics and manage chart annotations with Amplitude project API credentials.","auth":{"kind":"api-key","hint":"JSON credential bundle: {\"apiKey\":\"...\",\"secretKey\":\"...\"} from Project Settings → General. Set metadata.apiBaseUrl to https://analytics.eu.amplitude.com only for an EU-resident project; the default is https://amplitude.com."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"events.list","description":"List visible project events with current-week totals, uniques, and daily-active-user share.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"events.segment","description":"Query event totals, uniques, percentages, averages, or formulas over a date range.","parameters":{"type":"object","properties":{"event":{"type":"string","description":"JSON event definition, for example {\"event_type\":\"_active\"}."},"secondEvent":{"type":"string","description":"Optional second JSON event definition."},"metric":{"type":"string","enum":["uniques","totals","pct_dau","average","histogram","sums","value_avg","formula"]},"activeUserType":{"type":"string","enum":["any","active"]},"start":{"type":"string","pattern":"^[0-9]{8}$","description":"Inclusive date in YYYYMMDD format."},"end":{"type":"string","pattern":"^[0-9]{8}$","description":"Inclusive date in YYYYMMDD format."},"interval":{"type":"integer","enum":[-300000,-3600000,1,7,30]},"segment":{"type":"string","description":"JSON array of Amplitude segment definitions."},"groupBy":{"type":"string"},"secondGroupBy":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":1000},"formula":{"type":"string"},"rollingWindow":{"type":"integer","minimum":1},"rollingAverage":{"type":"integer","minimum":1}},"required":["event","start","end"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.counts","description":"Get active or new user counts over a date range.","parameters":{"type":"object","properties":{"start":{"type":"string","pattern":"^[0-9]{8}$","description":"Inclusive date in YYYYMMDD format."},"end":{"type":"string","pattern":"^[0-9]{8}$","description":"Inclusive date in YYYYMMDD format."},"mode":{"type":"string","enum":["active","new"]},"interval":{"type":"integer","enum":[1,7,30]},"segment":{"type":"string","description":"JSON array of Amplitude segment definitions."},"groupBy":{"type":"string"}},"required":["start","end"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sessions.average-length","description":"Get average session length in seconds for each day in a date range.","parameters":{"type":"object","properties":{"start":{"type":"string","pattern":"^[0-9]{8}$","description":"Inclusive date in YYYYMMDD format."},"end":{"type":"string","pattern":"^[0-9]{8}$","description":"Inclusive date in YYYYMMDD format."}},"required":["start","end"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.search","description":"Search for a user by Amplitude ID, device ID, user ID, or user ID prefix.","parameters":{"type":"object","properties":{"user":{"type":"string","minLength":1}},"required":["user"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.activity","description":"Read one user summary and a bounded window of recent or earliest events.","parameters":{"type":"object","properties":{"user":{"type":"string","minLength":1,"description":"Amplitude user ID."},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":0,"maximum":1000},"direction":{"type":"string","enum":["earliest","latest"]}},"required":["user"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"charts.results","description":"Export results from one saved Amplitude chart by chart ID.","parameters":{"type":"object","properties":{"chartId":{"type":"string","minLength":1}},"required":["chartId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"annotations.list","description":"List project chart annotations with optional category, chart, and date filters.","parameters":{"type":"object","properties":{"category":{"type":"string"},"chartId":{"type":"string"},"start":{"type":"string","description":"ISO 8601 timestamp with a time-zone offset."},"end":{"type":"string","description":"ISO 8601 timestamp with a time-zone offset."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"annotations.get","description":"Read one chart annotation by ID.","parameters":{"type":"object","properties":{"annotationId":{"type":"integer","minimum":1,"description":"Amplitude annotation ID."}},"required":["annotationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"annotations.create","description":"Create a project-wide or chart-specific annotation.","parameters":{"type":"object","properties":{"annotation":{"type":"object","properties":{"label":{"type":"string","minLength":1},"start":{"type":"string","description":"ISO 8601 timestamp with a time-zone offset."},"category":{"type":"string"},"chart_id":{"type":["string","null"]},"details":{"type":"string"},"end":{"type":["string","null"],"description":"ISO 8601 timestamp with a time-zone offset."}},"required":["label","start"],"additionalProperties":false}},"required":["annotation"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"annotations.update","description":"Partially update one annotation.","parameters":{"type":"object","properties":{"annotationId":{"type":"integer","minimum":1,"description":"Amplitude annotation ID."},"changes":{"type":"object","properties":{"label":{"type":"string","minLength":1},"start":{"type":"string","description":"ISO 8601 timestamp with a time-zone offset."},"category":{"type":"string"},"chart_id":{"type":["string","null"]},"details":{"type":"string"},"end":{"type":["string","null"],"description":"ISO 8601 timestamp with a time-zone offset."}},"required":[],"additionalProperties":false}},"required":["annotationId","changes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"annotations.delete","description":"Permanently delete one annotation.","parameters":{"type":"object","properties":{"annotationId":{"type":"integer","minimum":1,"description":"Amplitude annotation ID."}},"required":["annotationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"annotation-categories.list","description":"List annotation categories or filter by exact category name.","parameters":{"type":"object","properties":{"category":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"annotation-categories.get","description":"Read one annotation category by ID.","parameters":{"type":"object","properties":{"categoryId":{"type":"integer","minimum":1,"description":"Amplitude annotation category ID."}},"required":["categoryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"annotation-categories.create","description":"Create an annotation category.","parameters":{"type":"object","properties":{"category":{"type":"string","minLength":1}},"required":["category"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"annotation-categories.update","description":"Rename one annotation category.","parameters":{"type":"object","properties":{"categoryId":{"type":"integer","minimum":1,"description":"Amplitude annotation category ID."},"category":{"type":"string","minLength":1}},"required":["categoryId","category"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"annotation-categories.delete","description":"Permanently delete one annotation category.","parameters":{"type":"object","properties":{"categoryId":{"type":"integer","minimum":1,"description":"Amplitude annotation category ID."}},"required":["categoryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"anthropic","displayName":"Anthropic","description":"Generate completions with Claude models, run batch jobs, count tokens, and inspect uploaded files via the Anthropic Messages API.","auth":{"kind":"api-key","hint":"Anthropic workspace API key (starts with sk-ant-…). Create one at https://console.anthropic.com/settings/keys."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"messages.create","description":"Create a single message completion against a Claude model. Pass the full Messages-API body (model, max_tokens, messages, optional system, tools, stream).","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Anthropic model id, e.g. claude-opus-4-5-20251101 or claude-sonnet-4-5."},"max_tokens":{"type":"integer","minimum":1},"messages":{"type":"array","description":"Ordered conversation turns (role + content array).","items":{"type":"object"}},"system":{"description":"Optional system prompt — string or content-block array."},"temperature":{"type":"number","minimum":0,"maximum":1},"top_p":{"type":"number","minimum":0,"maximum":1},"top_k":{"type":"integer","minimum":0},"stop_sequences":{"type":"array","items":{"type":"string"}},"stream":{"type":"boolean"},"tools":{"type":"array","items":{"type":"object"}},"tool_choice":{"type":"object"},"metadata":{"type":"object"},"thinking":{"type":"object"}},"required":["model","max_tokens","messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"messages.count_tokens","description":"Return the input token count Anthropic would charge for a given message body, without running generation.","parameters":{"type":"object","properties":{"model":{"type":"string"},"messages":{"type":"array","items":{"type":"object"}},"system":{},"tools":{"type":"array","items":{"type":"object"}},"tool_choice":{"type":"object"}},"required":["model","messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"models.list","description":"List Claude models available to the calling workspace.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":1000},"after_id":{"type":"string"},"before_id":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"models.get","description":"Fetch metadata for a specific Claude model (display name, max output tokens, deprecation date).","parameters":{"type":"object","properties":{"model_id":{"type":"string"}},"required":["model_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"batches.create","description":"Submit a Message Batches job: an array of request objects each carrying its own custom_id and Messages-API params. Returns a batch handle the caller polls.","parameters":{"type":"object","properties":{"requests":{"type":"array","description":"Up to 100k requests; each item is { custom_id, params } where params matches /v1/messages.","items":{"type":"object"}}},"required":["requests"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"batches.list","description":"List recent message batches.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":1000},"after_id":{"type":"string"},"before_id":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"batches.get","description":"Retrieve the status of a previously-submitted message batch (in_progress, canceling, ended).","parameters":{"type":"object","properties":{"batch_id":{"type":"string"}},"required":["batch_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"batches.results","description":"Stream the JSONL results of an ended batch. The connector returns the raw response body — the caller is responsible for line-splitting.","parameters":{"type":"object","properties":{"batch_id":{"type":"string"}},"required":["batch_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"batches.cancel","description":"Request cancellation of an in-progress batch. In-flight requests may still complete.","parameters":{"type":"object","properties":{"batch_id":{"type":"string"}},"required":["batch_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"batches.delete","description":"Delete a batch (only allowed once the batch has ended).","parameters":{"type":"object","properties":{"batch_id":{"type":"string"}},"required":["batch_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.list","description":"List files previously uploaded for use with the Files API (file IDs referenced by document content blocks). Requires the files beta header at the server level.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":1000},"after_id":{"type":"string"},"before_id":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.get","description":"Fetch metadata for an uploaded file (size, mime type, created_at).","parameters":{"type":"object","properties":{"file_id":{"type":"string"}},"required":["file_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.delete","description":"Delete an uploaded file. File IDs already embedded in saved conversations remain dangling.","parameters":{"type":"object","properties":{"file_id":{"type":"string"}},"required":["file_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"anyhook-websocket","displayName":"AnyHook Websocket","description":"Subscribe and listen to websocket events through AnyHook proxy server for real-time communication.","auth":{"kind":"api-key","hint":"AnyHook server URL and websocket endpoint."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"websocket.subscribe","description":"Subscribe to websocket events from AnyHook endpoint.","parameters":{"type":"object","properties":{"websocketUrl":{"type":"string","description":"Websocket endpoint URL to connect to"},"subscriptionMessage":{"type":"object","description":"Message to send to subscribe to events"},"headers":{"type":"object","description":"Optional custom headers for the connection"}},"required":["websocketUrl","subscriptionMessage"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"apify","displayName":"Apify","description":"Manage Apify datasets, actors, and tasks. Get dataset items, run actors/tasks, scrape URLs, and access key-value store records.","auth":{"kind":"api-key","hint":"Apify API key from settings, API & Integrations section."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"datasets.items.get","description":"Get items from an Apify dataset.","parameters":{"type":"object","properties":{"datasetId":{"type":"string","description":"The ID of the dataset."},"offset":{"type":"integer","description":"Number of items to skip at the start."},"limit":{"type":"integer","description":"Maximum number of results to return."}},"required":["datasetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"keyvalue-stores.records.get","description":"Get a record from an Apify key-value store.","parameters":{"type":"object","properties":{"storeId":{"type":"string","description":"The ID of the key-value store."},"recordKey":{"type":"string","description":"The key of the record to retrieve."}},"required":["storeId","recordKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"actors.run","description":"Run an Apify actor.","parameters":{"type":"object","properties":{"actorId":{"type":"string","description":"The ID or name of the actor to run."},"input":{"type":"object","description":"Input data for the actor."}},"required":["actorId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.run","description":"Run an Apify task.","parameters":{"type":"object","properties":{"taskId":{"type":"string","description":"The ID of the task to run."},"input":{"type":"object","description":"Input data for the task."}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"web-scrape.url","description":"Scrape a single URL using Apify web scraper.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"URL to scrape. Must start with http:// or https://."},"crawlerType":{"type":"string","description":"Type of crawler to use (e.g., cheerio, playwright)."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"actor.abort","description":"Abort a running Apify actor run.","parameters":{"type":"object","properties":{"runId":{"type":"string","description":"Identifier of the actor run to abort."},"gracefully":{"type":"boolean","description":"Whether to abort gracefully (send SIGINT) instead of forcibly killing the run."}},"required":["runId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"actor.run.resurrect","description":"Resurrect a finished Apify actor run.","parameters":{"type":"object","properties":{"runId":{"type":"string","description":"Identifier of the finished run to resurrect."},"build":{"type":"string","description":"Tag or number of the actor build to use."},"timeout":{"type":"integer","description":"New timeout in seconds for the resurrected run."},"memory":{"type":"integer","description":"New memory limit (in MB) for the resurrected run."}},"required":["runId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"dataset.create","description":"Create a new named Apify dataset.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Name of the dataset to create."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"dataset.delete","description":"Delete an Apify dataset.","parameters":{"type":"object","properties":{"datasetId":{"type":"string","description":"Identifier of the dataset to delete."}},"required":["datasetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"apitable","displayName":"AITable","description":"Read and write records in AITable (APITable) datasheets via the Fusion REST API.","auth":{"kind":"api-key","hint":"AITable API token (Bearer) plus the instance URL of the AITable deployment."},"category":"spreadsheet","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.find","description":"List or filter records in an AITable datasheet.","parameters":{"type":"object","properties":{"datasheetId":{"type":"string"},"recordIds":{"type":"array","items":{"type":"string"}},"fieldNames":{"type":"array","items":{"type":"string"}},"filter":{"type":"string"},"maxRecords":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1,"maximum":1000},"pageNum":{"type":"integer","minimum":1}},"required":["datasheetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.create","description":"Create one or more records in an AITable datasheet.","parameters":{"type":"object","properties":{"datasheetId":{"type":"string"},"records":{"type":"array","items":{"type":"object","properties":{"fields":{"type":"object"}},"required":["fields"]}},"fieldKey":{"type":"string","enum":["name","id"]}},"required":["datasheetId","records"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Update one or more records in an AITable datasheet.","parameters":{"type":"object","properties":{"datasheetId":{"type":"string"},"recordId":{"type":"string"},"fields":{"type":"object"},"fieldKey":{"type":"string","enum":["name","id"]}},"required":["datasheetId","recordId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.delete","description":"Delete one or more records from an AITable datasheet.","parameters":{"type":"object","properties":{"datasheetId":{"type":"string","description":"Datasheet to delete records from."},"recordIds":{"type":"array","items":{"type":"string"},"description":"Identifiers of records to delete."}},"required":["datasheetId","recordIds"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"fields.create","description":"Add a field (column) to an AITable datasheet.","parameters":{"type":"object","properties":{"datasheetId":{"type":"string","description":"Datasheet to add the field to."},"name":{"type":"string","description":"Name of the new field."},"type":{"type":"string","description":"Type identifier for the field (e.g., SingleText, Number, SingleSelect)."},"property":{"type":"object","description":"Type-specific property configuration for the field."}},"required":["datasheetId","name","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"datasheets.create","description":"Create a new datasheet in an AITable space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string","description":"Space to create the datasheet in."},"name":{"type":"string","description":"Name of the new datasheet."},"folderId":{"type":"string","description":"Optional parent folder."},"preNodeId":{"type":"string","description":"Optional previous-sibling node id for ordering."},"description":{"type":"string","description":"Optional datasheet description."},"fields":{"type":"array","items":{"type":"object"},"description":"Optional initial field definitions."}},"required":["spaceId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"apitemplate-io","displayName":"APITemplate.io","description":"Generate PDFs and images from APITemplate.io templates or raw HTML/URLs, list generated objects, and manage account artifacts.","auth":{"kind":"api-key","hint":"APITemplate.io API key issued from the dashboard."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.get","description":"Get APITemplate.io account information, including plan and usage counters.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"objects.list","description":"List generated PDF/image objects, optionally filtered by template, transaction reference, or date range.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":300},"offset":{"type":"integer","minimum":0},"templateId":{"type":"string"},"transactionRef":{"type":"string"},"dateFrom":{"type":"string","description":"YYYY-MM-DD"},"dateTo":{"type":"string","description":"YYYY-MM-DD"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"image.create","description":"Render an image from an APITemplate.io image template by template ID, supplying an overrides payload.","parameters":{"type":"object","properties":{"templateId":{"type":"string"},"data":{"type":"object","description":"Template overrides payload, e.g. { \"overrides\": [ { \"name\": \"field\", \"text\": \"value\" } ] }."},"meta":{"type":"string","description":"External reference ID echoed back on the response."}},"required":["templateId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pdf.create","description":"Render a PDF from an APITemplate.io PDF template by template ID, supplying an overrides payload.","parameters":{"type":"object","properties":{"templateId":{"type":"string"},"data":{"type":"object","description":"Template overrides payload consumed by the PDF template."},"expiration":{"type":"integer","minimum":0,"maximum":10080,"description":"0 = permanent, 1-10080 minutes (7 days max) otherwise."},"meta":{"type":"string"},"generationDelay":{"type":"integer","description":"Delay in milliseconds before PDF generation."}},"required":["templateId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pdf.createFromHtml","description":"Render a PDF from raw HTML (and optional CSS) without an APITemplate.io template, with full page layout controls.","parameters":{"type":"object","properties":{"html":{"type":"string","description":"HTML body to render."},"css":{"type":"string","description":"Optional CSS applied to the HTML body."},"expiration":{"type":"integer","minimum":0,"maximum":10080},"meta":{"type":"string"},"pageSize":{"type":"string","description":"e.g. A4, Letter, Legal."},"orientation":{"type":"string","enum":["portrait","landscape"]},"marginTop":{"type":"number"},"marginBottom":{"type":"number"},"marginLeft":{"type":"number"},"marginRight":{"type":"number"},"printBackground":{"type":"boolean"},"displayHeaderFooter":{"type":"boolean"},"customHeader":{"type":"string"},"customFooter":{"type":"string"},"headerFontSize":{"type":"string"},"scale":{"type":"number","minimum":0.1,"maximum":2},"waitForTimeout":{"type":"integer"}},"required":["html"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pdf.createFromUrl","description":"Render a PDF by loading a remote URL in a headless browser, with viewport, scroll, and selector controls.","parameters":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"expiration":{"type":"integer","minimum":0,"maximum":10080},"meta":{"type":"string"},"pageSize":{"type":"string"},"orientation":{"type":"string","enum":["portrait","landscape"]},"marginTop":{"type":"number"},"marginBottom":{"type":"number"},"marginLeft":{"type":"number"},"marginRight":{"type":"number"},"printBackground":{"type":"boolean"},"scale":{"type":"number","minimum":0.1,"maximum":2},"waitForTimeout":{"type":"integer"},"waitForSelector":{"type":"string"},"viewportWidth":{"type":"integer"},"viewportHeight":{"type":"integer"},"fullPage":{"type":"boolean"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"object.delete","description":"Permanently delete a previously generated PDF or image object by transaction reference.","parameters":{"type":"object","properties":{"transactionRef":{"type":"string"}},"required":["transactionRef"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"apollo","displayName":"Apollo","description":"AI sales platform for prospecting, lead gen, and deal automation. Match and enrich people and companies, search organizations, news, and people.","auth":{"kind":"api-key","hint":"Apollo API key from Settings → Integrations → API. Sent as the X-Api-Key header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"match.person","description":"Match a person by email (and optional context) to an Apollo person record, returning enriched contact data.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the person to match."},"first_name":{"type":"string"},"last_name":{"type":"string"},"name":{"type":"string"},"organization_name":{"type":"string"},"domain":{"type":"string","description":"Company domain of the person."},"linkedin_url":{"type":"string"},"reveal_personal_emails":{"type":"boolean"},"reveal_phone_number":{"type":"boolean"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"enrich.company","description":"Enrich an organization record by domain, returning Apollo company data.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Company domain (e.g. apollo.io)."}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"news.articles.search","description":"Search news articles tied to organizations, with optional category and published-date filters.","parameters":{"type":"object","properties":{"organization_ids":{"type":"array","items":{"type":"string"},"description":"Apollo organization IDs to include."},"categories":{"type":"array","items":{"type":"string"},"description":"News categories to filter by (e.g. hires, investment, contract)."},"published_at_min":{"type":"string","description":"Lower bound of the date range (YYYY-MM-DD)."},"published_at_max":{"type":"string","description":"Upper bound of the date range (YYYY-MM-DD)."},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}},"required":["organization_ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"organization.job.postings","description":"List currently active job postings for a single Apollo organization.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"The Apollo organization ID to fetch job postings for."},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}},"required":["organization_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"organization.search","description":"Search Apollo organizations by name, domain, location, employee-count range, or industry tag.","parameters":{"type":"object","properties":{"q_organization_name":{"type":"string"},"q_organization_domains":{"type":"array","items":{"type":"string"},"description":"Filter by organization domains."},"organization_locations":{"type":"array","items":{"type":"string"}},"organization_not_locations":{"type":"array","items":{"type":"string"}},"organization_num_employees_ranges":{"type":"array","items":{"type":"string"},"description":"Employee-count ranges (e.g. \"1,10\", \"11,50\")."},"organization_industry_tag_ids":{"type":"array","items":{"type":"string"}},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sequences.add_contacts","description":"Add one or more contacts to an Apollo emailer campaign (sequence). Optionally specify the sender mailbox to enroll under via send_email_from_email_address.","parameters":{"type":"object","properties":{"campaign_id":{"type":"string","description":"Apollo emailer_campaign (sequence) id to enroll contacts into."},"contact_ids":{"type":"array","items":{"type":"string"},"description":"Apollo contact ids to add to the sequence."},"send_email_from_email_address":{"type":"string","description":"Optional sender mailbox address (must already be connected to Apollo) to send the sequence from."}},"required":["campaign_id","contact_ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"people.search","description":"Search Apollo people records by keyword, title, seniority, location, or organization filter.","parameters":{"type":"object","properties":{"q_keywords":{"type":"string","description":"Free-text keywords for people search."},"person_titles":{"type":"array","items":{"type":"string"}},"person_locations":{"type":"array","items":{"type":"string"}},"person_seniorities":{"type":"array","items":{"type":"string"},"description":"Seniority levels (e.g. owner, founder, c_suite, vp, director, manager)."},"organization_ids":{"type":"array","items":{"type":"string"}},"q_organization_domains":{"type":"array","items":{"type":"string"}},"organization_num_employees_ranges":{"type":"array","items":{"type":"string"}},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"appfollow","displayName":"AppFollow","description":"Manage and improve app reviews and ratings via AppFollow.","auth":{"kind":"api-key","hint":"AppFollow API key (sent as Bearer token)."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"reply.to.review","description":"Reply to an app store review.","parameters":{"type":"object","properties":{"ext_id":{"type":"string","description":"Application external id in AppFollow."},"review_id":{"type":"string","description":"Review id to reply to."},"fromDate":{"type":"string","description":"Start date for the reviews to reply to (YYYY-MM-DD)."},"toDate":{"type":"string","description":"End date for the reviews to reply to (YYYY-MM-DD)."},"answer_text":{"type":"string","description":"Text of the reply to the review."}},"required":["ext_id","review_id","fromDate","answer_text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"add.user","description":"Add a user to the AppFollow workspace.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Name of the user to be added."},"email":{"type":"string","description":"Email of the user to be added."},"role":{"type":"string","description":"Role of the user to be added."}},"required":["name","email","role"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"reviews.list","description":"List reviews for an application within a date range (powers the new.review trigger).","parameters":{"type":"object","properties":{"ext_id":{"type":"string","description":"Application external id in AppFollow."},"from":{"type":"string","description":"Start date (YYYY-MM-DD)."},"to":{"type":"string","description":"End date (YYYY-MM-DD)."},"page":{"type":"integer"}},"required":["ext_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tags.list","description":"List review tags for an application (powers the new.tag trigger).","parameters":{"type":"object","properties":{"ext_id":{"type":"string","description":"Application external id in AppFollow."}},"required":["ext_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reply.update","description":"Edit a previously posted reply to an app store review.","parameters":{"type":"object","properties":{"ext_id":{"type":"string","description":"Application external id in AppFollow."},"review_id":{"type":"string","description":"Review id whose reply will be updated."},"answer_text":{"type":"string","description":"New reply text."}},"required":["ext_id","review_id","answer_text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"reply.delete","description":"Delete a posted reply to an app store review.","parameters":{"type":"object","properties":{"ext_id":{"type":"string","description":"Application external id in AppFollow."},"review_id":{"type":"string","description":"Review id whose reply will be deleted."}},"required":["ext_id","review_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.assign","description":"Attach a tag to a review.","parameters":{"type":"object","properties":{"ext_id":{"type":"string","description":"Application external id in AppFollow."},"review_id":{"type":"string","description":"Review id to tag."},"tag":{"type":"string","description":"Tag value to attach."}},"required":["ext_id","review_id","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"asana","displayName":"Asana","description":"Search projects/tasks and create or update Asana tasks.","auth":{"kind":"one_of","preferred":"oauth2","options":[{"kind":"oauth2","authorizationUrl":"https://app.asana.com/-/oauth_authorize","tokenUrl":"https://app.asana.com/-/oauth_token","scopes":["default"],"clientIdEnv":"ASANA_OAUTH_CLIENT_ID","clientSecretEnv":"ASANA_OAUTH_CLIENT_SECRET"},{"kind":"api-key","hint":"Asana personal access token."}]},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"projects.search","description":"List or search projects in a workspace.","parameters":{"type":"object","properties":{"workspace":{"type":"string"},"archived":{"type":"boolean"},"limit":{"type":"integer"}},"required":["workspace"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.search","description":"Search tasks in a workspace.","parameters":{"type":"object","properties":{"workspace":{"type":"string"},"text":{"type":"string"},"limit":{"type":"integer"}},"required":["workspace"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.create","description":"Create an Asana task.","parameters":{"type":"object","properties":{"data":{"type":"object"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update an Asana task.","parameters":{"type":"object","properties":{"taskGid":{"type":"string"},"data":{"type":"object"}},"required":["taskGid","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.addComment","description":"Add a comment story to an Asana task. Comments are exposed as Asana stories with type=comment.","parameters":{"type":"object","properties":{"taskGid":{"type":"string","description":"Asana task gid."},"text":{"type":"string","description":"Comment body as plain text."}},"required":["taskGid","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.complete","description":"Mark an Asana task as completed. Idempotent: setting completed=true twice converges on the same state.","parameters":{"type":"object","properties":{"taskGid":{"type":"string","description":"Asana task gid."}},"required":["taskGid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"ashby","displayName":"Ashby","description":"Read and mutate Ashby ATS candidates, jobs, applications, offers, feedback, and interview schedules.","auth":{"kind":"api-key","hint":"Ashby API key. Sent as the username in HTTP Basic auth with an empty password (base64-encode \"<apiKey>:\" for the Authorization header)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"candidates.list","description":"List candidates with optional cursor pagination and updatedAt filtering.","parameters":{"type":"object","properties":{"cursor":{"type":"string"},"syncToken":{"type":"string"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"candidates.info","description":"Fetch a single candidate by id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"candidates.search","description":"Search candidates by email or name.","parameters":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"candidates.create","description":"Create an Ashby candidate.","parameters":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"phoneNumber":{"type":"string"},"linkedInUrl":{"type":"string"},"githubUrl":{"type":"string"},"website":{"type":"string"},"location":{"type":"object"},"createdAt":{"type":"string"},"sourceId":{"type":"string"},"credentedSourceTypeId":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"candidates.update","description":"Update an existing candidate.","parameters":{"type":"object","properties":{"candidateId":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"phoneNumber":{"type":"string"},"linkedInUrl":{"type":"string"},"githubUrl":{"type":"string"},"website":{"type":"string"},"location":{"type":"object"}},"required":["candidateId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"candidates.addTag","description":"Attach a tag to a candidate.","parameters":{"type":"object","properties":{"candidateId":{"type":"string"},"tagId":{"type":"string"}},"required":["candidateId","tagId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"jobs.list","description":"List open and closed jobs.","parameters":{"type":"object","properties":{"cursor":{"type":"string"},"syncToken":{"type":"string"},"limit":{"type":"integer"},"status":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobs.info","description":"Fetch a single job by id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"applications.list","description":"List applications.","parameters":{"type":"object","properties":{"cursor":{"type":"string"},"syncToken":{"type":"string"},"limit":{"type":"integer"},"status":{"type":"string"},"jobId":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"applications.info","description":"Fetch a single application.","parameters":{"type":"object","properties":{"applicationId":{"type":"string"}},"required":["applicationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"applications.create","description":"Create a new application linking a candidate to a job.","parameters":{"type":"object","properties":{"candidateId":{"type":"string"},"jobId":{"type":"string"},"interviewPlanId":{"type":"string"},"interviewStageId":{"type":"string"},"sourceId":{"type":"string"},"credentedSourceTypeId":{"type":"string"},"createdAt":{"type":"string"}},"required":["candidateId","jobId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"applications.changeStage","description":"Advance or move an application to a new interview stage.","parameters":{"type":"object","properties":{"applicationId":{"type":"string"},"interviewStageId":{"type":"string"},"archiveReasonId":{"type":"string"}},"required":["applicationId","interviewStageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"offers.list","description":"List offers, optionally filtered by application.","parameters":{"type":"object","properties":{"applicationId":{"type":"string"},"cursor":{"type":"string"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"offers.info","description":"Fetch a single offer with version history.","parameters":{"type":"object","properties":{"offerId":{"type":"string"}},"required":["offerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"feedback.list","description":"List submitted interview feedback for an application.","parameters":{"type":"object","properties":{"applicationId":{"type":"string"},"cursor":{"type":"string"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"interviews.scheduleList","description":"List scheduled interviews.","parameters":{"type":"object","properties":{"applicationId":{"type":"string"},"cursor":{"type":"string"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"ask-handle","displayName":"AskHandle","description":"Manage leads, rooms, and messages with AskHandle.","auth":{"kind":"api-key","hint":"AskHandle API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"messages.create","description":"Create a message in AskHandle.","parameters":{"type":"object","properties":{"body":{"type":"string"},"room_id":{"type":"string"}},"required":["body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.create","description":"Create a lead in AskHandle.","parameters":{"type":"object","properties":{"nickname":{"type":"string"},"email":{"type":"string"},"phone_number":{"type":"string"},"device":{"type":"string"},"from_page_title":{"type":"string"},"referrer":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rooms.list","description":"List rooms in AskHandle.","parameters":{"type":"object","properties":{"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.list","description":"List leads in AskHandle.","parameters":{"type":"object","properties":{"start_date":{"type":"string"},"end_date":{"type":"string"},"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.update","description":"Update a draft AskHandle message.","parameters":{"type":"object","properties":{"message_id":{"type":"string","description":"Identifier of the message to update."},"body":{"type":"string","description":"New message body."}},"required":["message_id","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.delete","description":"Delete an AskHandle message.","parameters":{"type":"object","properties":{"message_id":{"type":"string","description":"Identifier of the message to delete."}},"required":["message_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update","description":"Patch attributes on an existing AskHandle lead.","parameters":{"type":"object","properties":{"lead_id":{"type":"string","description":"Identifier of the lead to patch."},"nickname":{"type":"string"},"email":{"type":"string"},"phone_number":{"type":"string"},"device":{"type":"string"},"from_page_title":{"type":"string"},"referrer":{"type":"string"}},"required":["lead_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.delete","description":"Delete an AskHandle lead.","parameters":{"type":"object","properties":{"lead_id":{"type":"string","description":"Identifier of the lead to delete."}},"required":["lead_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"asknews","displayName":"AskNews","description":"Search and retrieve enriched real-time and historical news articles, run news-aware chat completions, and manage AskNews newsletters and alerts.","auth":{"kind":"api-key","hint":"AskNews API key (client_id + client_secret minted in the AskNews console)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"search.news","description":"Search recent or historical news articles by natural-language query.","parameters":{"type":"object","properties":{"query":{"type":"string"},"nArticles":{"type":"integer"},"hoursBack":{"type":"integer"},"historical":{"type":"boolean"},"method":{"type":"string","enum":["nl","kw","both"]},"categories":{"type":"array","items":{"type":"string"}},"returnType":{"type":"string","enum":["string","dicts","both"]},"similarityScoreThreshold":{"type":"number"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"generate.news.knowledge.graph","description":"Build a knowledge graph from a news query, optionally rendering a visualization.","parameters":{"type":"object","properties":{"query":{"type":"string"},"nArticles":{"type":"integer"},"visualizeWith":{"type":"string"},"minClusterProbability":{"type":"number"},"geoDiambiguation":{"type":"boolean"},"queryMethod":{"type":"string","enum":["nl","kw","both"]},"hoursBack":{"type":"integer"},"historical":{"type":"boolean"},"categories":{"type":"array","items":{"type":"string"}}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.article.by.id","description":"Fetch one or more articles by their AskNews UUID.","parameters":{"type":"object","properties":{"articleIds":{"type":"array","items":{"type":"string"}},"returnType":{"type":"string","enum":["string","dicts","both"]}},"required":["articleIds"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"asknews.chat.completion","description":"Run a news-aware chat completion grounded in AskNews retrieval.","parameters":{"type":"object","properties":{"userMessage":{"type":"string"},"model":{"type":"string"},"temperature":{"type":"number"},"maxTokens":{"type":"integer"},"journalistMode":{"type":"boolean"},"inlineCitations":{"type":"string","enum":["none","numbered","markdown","hyperlinks"]},"appendReferences":{"type":"boolean"},"asknewsWatermark":{"type":"boolean"},"conversationalAwareness":{"type":"boolean"},"systemPrompt":{"type":"string"}},"required":["userMessage"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"search.stories","description":"Search AskNews stories (clusters of related articles) by query.","parameters":{"type":"object","properties":{"query":{"type":"string"},"categories":{"type":"array","items":{"type":"string"}},"expand_updates":{"type":"boolean"},"sort_by":{"type":"string","enum":["relevance","recency","coverage"]},"returnArticles":{"type":"boolean"},"hoursBack":{"type":"integer"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"create.anewsletter","description":"Create a new scheduled AskNews newsletter from a natural-language query.","parameters":{"type":"object","properties":{"name":{"type":"string"},"query":{"type":"string"},"cron":{"type":"string"},"sender":{"type":"string"},"subject":{"type":"string"},"logoUrl":{"type":"string"},"replyTo":{"type":"string"},"audienceId":{"type":"string"},"resendApiKey":{"type":"string"},"isPublic":{"type":"boolean"},"isActive":{"type":"boolean"},"expiresAt":{"type":"string"}},"required":["name","query","cron","sender"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.anewsletter","description":"Update an existing AskNews newsletter by ID.","parameters":{"type":"object","properties":{"newsletterId":{"type":"string"},"name":{"type":"string"},"query":{"type":"string"},"cron":{"type":"string"},"subject":{"type":"string"},"logoUrl":{"type":"string"},"replyTo":{"type":"string"},"isPublic":{"type":"boolean"},"isActive":{"type":"boolean"},"expiresAt":{"type":"string"}},"required":["newsletterId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"alert.for.query","description":"Register a scheduled alert that fires when a query matches new coverage.","parameters":{"type":"object","properties":{"query":{"type":"string"},"cron":{"type":"string"},"title":{"type":"string"},"alwaysTrigger":{"type":"boolean"},"repeat":{"type":"boolean"},"categories":{"type":"array","items":{"type":"string"}}},"required":["query","cron"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"assemblyai","displayName":"AssemblyAI","description":"Transcribe audio, run speech intelligence (speaker labels, sentiment, content safety, entity detection), export subtitles, and run LeMUR LLM tasks over finished transcripts.","auth":{"kind":"api-key","hint":"AssemblyAI workspace API key. Create one at https://www.assemblyai.com/app/account."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"transcripts.submit","description":"Queue a new transcription job. Pass `audio_url` (publicly reachable HTTPS) plus any AssemblyAI feature flags (speaker_labels, sentiment_analysis, content_safety, entity_detection, iab_categories, auto_chapters, summarization, language_code, etc.). Returns a transcript id the caller polls via transcripts.get.","parameters":{"type":"object","properties":{"audio_url":{"type":"string","description":"Publicly reachable HTTPS URL to the audio or video file."},"language_code":{"type":"string"},"language_detection":{"type":"boolean"},"punctuate":{"type":"boolean"},"format_text":{"type":"boolean"},"dual_channel":{"type":"boolean"},"speech_model":{"type":"string","description":"best | nano"},"speaker_labels":{"type":"boolean"},"speakers_expected":{"type":"integer","minimum":1},"sentiment_analysis":{"type":"boolean"},"content_safety":{"type":"boolean"},"iab_categories":{"type":"boolean"},"entity_detection":{"type":"boolean"},"auto_chapters":{"type":"boolean"},"summarization":{"type":"boolean"},"summary_model":{"type":"string"},"summary_type":{"type":"string"},"auto_highlights":{"type":"boolean"},"redact_pii":{"type":"boolean"},"redact_pii_audio":{"type":"boolean"},"redact_pii_policies":{"type":"array","items":{"type":"string"}},"redact_pii_sub":{"type":"string"},"filter_profanity":{"type":"boolean"},"disfluencies":{"type":"boolean"},"boost_param":{"type":"string"},"word_boost":{"type":"array","items":{"type":"string"}},"custom_spelling":{"type":"array","items":{"type":"object"}},"webhook_url":{"type":"string"},"webhook_auth_header_name":{"type":"string"},"webhook_auth_header_value":{"type":"string"}},"required":["audio_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"transcripts.get","description":"Fetch a transcript by id. The `status` field cycles queued → processing → completed | error; callers poll until it leaves processing.","parameters":{"type":"object","properties":{"transcript_id":{"type":"string"}},"required":["transcript_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transcripts.list","description":"List transcripts in the workspace, newest first. Pagination uses the `before_id` / `after_id` cursors AssemblyAI returns in `page_details`.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200},"status":{"type":"string","description":"Filter to queued | processing | completed | error."},"created_on":{"type":"string","description":"YYYY-MM-DD"},"before_id":{"type":"string"},"after_id":{"type":"string"},"throttled_only":{"type":"boolean"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transcripts.delete","description":"Delete a transcript and its derived artifacts. Useful for honouring data-retention requests; the underlying audio remains untouched.","parameters":{"type":"object","properties":{"transcript_id":{"type":"string"}},"required":["transcript_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transcripts.paragraphs","description":"Return paragraph-segmented view of a finished transcript with per-paragraph timestamps.","parameters":{"type":"object","properties":{"transcript_id":{"type":"string"}},"required":["transcript_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transcripts.sentences","description":"Return sentence-segmented view of a finished transcript with per-sentence timestamps.","parameters":{"type":"object","properties":{"transcript_id":{"type":"string"}},"required":["transcript_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transcripts.subtitles","description":"Export subtitles for a finished transcript. Format must be `srt` or `vtt`. `chars_per_caption` caps caption width.","parameters":{"type":"object","properties":{"transcript_id":{"type":"string"},"format":{"type":"string","description":"srt | vtt"},"chars_per_caption":{"type":"integer","minimum":1}},"required":["transcript_id","format"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transcripts.word_search","description":"Search a finished transcript for one or more words and return their match counts and timestamps.","parameters":{"type":"object","properties":{"transcript_id":{"type":"string"},"words":{"type":"array","description":"Keywords to search for in the transcript.","items":{"type":"string"}}},"required":["transcript_id","words"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transcripts.redacted_audio","description":"Fetch the URL of the PII-redacted audio file for a transcript submitted with `redact_pii_audio: true`. Returns `status` and `redacted_audio_url`.","parameters":{"type":"object","properties":{"transcript_id":{"type":"string"}},"required":["transcript_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lemur.summary","description":"Run LeMUR summary over one or more finished transcripts. Returns a summary string and the LeMUR request_id.","parameters":{"type":"object","properties":{"transcript_ids":{"type":"array","items":{"type":"string"}},"context":{"description":"Optional string or object describing the audio context."},"final_model":{"type":"string","description":"default | basic | anthropic/claude-3-5-sonnet | anthropic/claude-3-haiku | anthropic/claude-3-opus"},"max_output_size":{"type":"integer","minimum":1},"temperature":{"type":"number","minimum":0,"maximum":1},"answer_format":{"type":"string"}},"required":["transcript_ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"lemur.question_answer","description":"Ask LeMUR one or more structured questions about a set of finished transcripts. Each question carries its own `question`, optional `context`, and answer schema hints.","parameters":{"type":"object","properties":{"transcript_ids":{"type":"array","items":{"type":"string"}},"questions":{"type":"array","description":"List of { question, context?, answer_format?, answer_options? } objects.","items":{"type":"object"}},"context":{},"final_model":{"type":"string"},"max_output_size":{"type":"integer","minimum":1},"temperature":{"type":"number","minimum":0,"maximum":1}},"required":["transcript_ids","questions"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"lemur.action_items","description":"Extract action items from one or more finished transcripts via LeMUR.","parameters":{"type":"object","properties":{"transcript_ids":{"type":"array","items":{"type":"string"}},"context":{},"final_model":{"type":"string"},"max_output_size":{"type":"integer","minimum":1},"temperature":{"type":"number","minimum":0,"maximum":1},"answer_format":{"type":"string"}},"required":["transcript_ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"lemur.task","description":"Run a free-form LeMUR prompt over one or more finished transcripts. The `prompt` parameter is the natural-language instruction.","parameters":{"type":"object","properties":{"transcript_ids":{"type":"array","items":{"type":"string"}},"prompt":{"type":"string"},"context":{},"final_model":{"type":"string"},"max_output_size":{"type":"integer","minimum":1},"temperature":{"type":"number","minimum":0,"maximum":1}},"required":["transcript_ids","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"lemur.response","description":"Retrieve a previously-generated LeMUR response by its request_id.","parameters":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lemur.purge","description":"Purge a stored LeMUR request and its response, deleting the prompt + completion from AssemblyAI retention.","parameters":{"type":"object","properties":{"request_id":{"type":"string"}},"required":["request_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"attio","displayName":"Attio","description":"Query and mutate Attio records, lists, notes, and tasks in workspace objects.","auth":{"kind":"oauth2","authorizationUrl":"https://app.attio.com/authorize","tokenUrl":"https://app.attio.com/oauth/token","scopes":["record_permission:read-write","object_configuration:read","list_configuration:read","list_entry:read-write","note:read-write","task:read-write","comment:read-write","user_management:read"],"clientIdEnv":"ATTIO_OAUTH_CLIENT_ID","clientSecretEnv":"ATTIO_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.query","description":"Query records on an Attio object (e.g. people, companies, deals) with a filter body.","parameters":{"type":"object","properties":{"object":{"type":"string","description":"Object slug or id (e.g. \"people\", \"companies\", or a custom object id)."},"filter":{"type":"object","description":"Attio filter expression applied server-side."},"sorts":{"type":"array","items":{"type":"object"}},"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0}},"required":["object"]},"requiredScopes":["record_permission:read-write","object_configuration:read"],"class":"read"},{"name":"records.get","description":"Read a single Attio record by id.","parameters":{"type":"object","properties":{"object":{"type":"string"},"recordId":{"type":"string"}},"required":["object","recordId"]},"requiredScopes":["record_permission:read-write"],"class":"read"},{"name":"records.create","description":"Create a record on an Attio object. `values` is a map of attribute slug to value list.","parameters":{"type":"object","properties":{"object":{"type":"string"},"values":{"type":"object","description":"Attribute slug → value list, per Attio attribute schema."}},"required":["object","values"]},"requiredScopes":["record_permission:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.assert","description":"Upsert a record by matching attribute (PUT) — creates if absent, updates in place otherwise.","parameters":{"type":"object","properties":{"object":{"type":"string"},"matching_attribute":{"type":"string","description":"Attribute slug used as the dedupe key (e.g. \"email_addresses\")."},"values":{"type":"object"}},"required":["object","matching_attribute","values"]},"requiredScopes":["record_permission:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Partially update an Attio record. Provided attribute slugs overwrite existing values.","parameters":{"type":"object","properties":{"object":{"type":"string"},"recordId":{"type":"string"},"values":{"type":"object"}},"required":["object","recordId","values"]},"requiredScopes":["record_permission:read-write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.delete","description":"Permanently delete an Attio record.","parameters":{"type":"object","properties":{"object":{"type":"string"},"recordId":{"type":"string"}},"required":["object","recordId"]},"requiredScopes":["record_permission:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.entries.query","description":"Query entries on an Attio list (e.g. pipeline stages, target lists).","parameters":{"type":"object","properties":{"list":{"type":"string","description":"List slug or id."},"filter":{"type":"object"},"sorts":{"type":"array","items":{"type":"object"}},"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0}},"required":["list"]},"requiredScopes":["list_entry:read-write","list_configuration:read"],"class":"read"},{"name":"lists.entries.create","description":"Add a record to an Attio list with optional per-entry attribute values.","parameters":{"type":"object","properties":{"list":{"type":"string"},"parent_record_id":{"type":"string","description":"Record id to add to the list."},"parent_object":{"type":"string","description":"Object slug the record belongs to."},"entry_values":{"type":"object","description":"Per-entry attribute slug → value list (stage, owner, etc.)."}},"required":["list","parent_record_id","parent_object"]},"requiredScopes":["list_entry:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.create","description":"Create a note attached to an Attio record.","parameters":{"type":"object","properties":{"parent_object":{"type":"string","description":"Object slug the note attaches to."},"parent_record_id":{"type":"string"},"title":{"type":"string"},"format":{"type":"string","enum":["plaintext","markdown"]},"content":{"type":"string"}},"required":["parent_object","parent_record_id","content"]},"requiredScopes":["note:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.create","description":"Create a task, optionally linked to records and assignees.","parameters":{"type":"object","properties":{"content":{"type":"string"},"format":{"type":"string","enum":["plaintext"]},"deadline_at":{"type":"string","description":"ISO-8601 deadline."},"is_completed":{"type":"boolean"},"linked_records":{"type":"array","items":{"type":"object"}},"assignees":{"type":"array","items":{"type":"object"}}},"required":["content"]},"requiredScopes":["task:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"auth0","displayName":"Auth0","description":"Manage Auth0 tenants: users, roles, organizations, connections, clients, and grants via the Management API v2.","auth":{"kind":"oauth2","authorizationUrl":"https://auth0.auth0.com/authorize","tokenUrl":"https://auth0.auth0.com/oauth/token","scopes":["read:users","update:users","create:users","delete:users","read:roles","update:roles","create:roles","delete:roles","read:role_members","create:role_members","delete:role_members","read:organizations","create:organizations","update:organizations","delete:organizations","read:organization_members","create:organization_members","delete:organization_members","read:clients","update:clients","create:clients","delete:clients","read:connections","update:connections","create:connections","delete:connections","read:grants","delete:grants","read:logs"],"clientIdEnv":"AUTH0_OAUTH_CLIENT_ID","clientSecretEnv":"AUTH0_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.list","description":"List Auth0 users with optional Lucene query, pagination, and sort.","parameters":{"type":"object","properties":{"q":{"type":"string","description":"Lucene search query (e.g. email:\"a@b.com\")."},"page":{"type":"number"},"per_page":{"type":"number"},"sort":{"type":"string"},"search_engine":{"type":"string","enum":["v3"]}}},"requiredScopes":["read:users"],"class":"read"},{"name":"users.get","description":"Read a single Auth0 user by id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["read:users"],"class":"read"},{"name":"users.create","description":"Create a new user in a specified connection. Email or phone_number is required by Auth0 depending on connection type.","parameters":{"type":"object","properties":{"connection":{"type":"string"},"email":{"type":"string"},"phone_number":{"type":"string"},"password":{"type":"string"},"email_verified":{"type":"boolean"},"phone_verified":{"type":"boolean"},"user_metadata":{"type":"object"},"app_metadata":{"type":"object"},"given_name":{"type":"string"},"family_name":{"type":"string"},"name":{"type":"string"},"nickname":{"type":"string"},"username":{"type":"string"},"blocked":{"type":"boolean"}},"required":["connection"]},"requiredScopes":["create:users"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.update","description":"Patch fields on an existing user (metadata, blocked, email, etc.).","parameters":{"type":"object","properties":{"id":{"type":"string"},"patch":{"type":"object"}},"required":["id","patch"]},"requiredScopes":["update:users"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"users.delete","description":"Delete an Auth0 user.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["delete:users"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.roles.list","description":"List roles assigned to a user.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["read:users","read:roles"],"class":"read"},{"name":"users.roles.assign","description":"Assign one or more roles to a user.","parameters":{"type":"object","properties":{"id":{"type":"string"},"roles":{"type":"array","items":{"type":"string"}}},"required":["id","roles"]},"requiredScopes":["update:users","create:role_members"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.roles.remove","description":"Remove one or more roles from a user.","parameters":{"type":"object","properties":{"id":{"type":"string"},"roles":{"type":"array","items":{"type":"string"}}},"required":["id","roles"]},"requiredScopes":["update:users","delete:role_members"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"roles.list","description":"List roles in the tenant.","parameters":{"type":"object","properties":{"name_filter":{"type":"string"},"page":{"type":"number"},"per_page":{"type":"number"}}},"requiredScopes":["read:roles"],"class":"read"},{"name":"roles.get","description":"Read a single role by id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["read:roles"],"class":"read"},{"name":"roles.create","description":"Create a new role.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}},"required":["name"]},"requiredScopes":["create:roles"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"roles.update","description":"Patch a role.","parameters":{"type":"object","properties":{"id":{"type":"string"},"patch":{"type":"object"}},"required":["id","patch"]},"requiredScopes":["update:roles"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"roles.delete","description":"Delete a role.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["delete:roles"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"organizations.list","description":"List organizations in the tenant.","parameters":{"type":"object","properties":{"page":{"type":"number"},"per_page":{"type":"number"}}},"requiredScopes":["read:organizations"],"class":"read"},{"name":"organizations.get","description":"Read a single organization by id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["read:organizations"],"class":"read"},{"name":"organizations.create","description":"Create a new organization.","parameters":{"type":"object","properties":{"name":{"type":"string"},"display_name":{"type":"string"},"branding":{"type":"object"},"metadata":{"type":"object"},"enabled_connections":{"type":"array"}},"required":["name"]},"requiredScopes":["create:organizations"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"organizations.update","description":"Patch an organization.","parameters":{"type":"object","properties":{"id":{"type":"string"},"patch":{"type":"object"}},"required":["id","patch"]},"requiredScopes":["update:organizations"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"organizations.delete","description":"Delete an organization.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["delete:organizations"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"organizations.members.list","description":"List members of an organization.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["read:organization_members"],"class":"read"},{"name":"organizations.members.add","description":"Add members (by user_id) to an organization.","parameters":{"type":"object","properties":{"id":{"type":"string"},"members":{"type":"array","items":{"type":"string"}}},"required":["id","members"]},"requiredScopes":["create:organization_members"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"organizations.members.remove","description":"Remove members from an organization.","parameters":{"type":"object","properties":{"id":{"type":"string"},"members":{"type":"array","items":{"type":"string"}}},"required":["id","members"]},"requiredScopes":["delete:organization_members"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"connections.list","description":"List connections (database, social, enterprise) configured on the tenant.","parameters":{"type":"object","properties":{"strategy":{"type":"string"},"page":{"type":"number"},"per_page":{"type":"number"}}},"requiredScopes":["read:connections"],"class":"read"},{"name":"connections.get","description":"Read a single connection by id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["read:connections"],"class":"read"},{"name":"clients.list","description":"List applications (M2M, SPA, regular web, native) registered on the tenant.","parameters":{"type":"object","properties":{"app_type":{"type":"string"},"is_global":{"type":"boolean"},"page":{"type":"number"},"per_page":{"type":"number"}}},"requiredScopes":["read:clients"],"class":"read"},{"name":"clients.get","description":"Read a single client/application by id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["read:clients"],"class":"read"},{"name":"grants.list","description":"List user grants (consented scopes) for the tenant.","parameters":{"type":"object","properties":{"user_id":{"type":"string"},"client_id":{"type":"string"},"audience":{"type":"string"},"page":{"type":"number"},"per_page":{"type":"number"}}},"requiredScopes":["read:grants"],"class":"read"},{"name":"grants.revoke","description":"Revoke a grant (delete by id).","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["delete:grants"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"logs.search","description":"Search tenant logs with a Lucene query (failed logins, signups, admin actions, etc.).","parameters":{"type":"object","properties":{"q":{"type":"string"},"from":{"type":"string"},"take":{"type":"number"},"sort":{"type":"string"}}},"requiredScopes":["read:logs"],"class":"read"}]},{"kind":"autobound","displayName":"Autobound","description":"AI sales-intelligence API that enriches companies and contacts with buyer-intent signals for personalized outreach.","auth":{"kind":"api-key","hint":"API key from your Autobound account (Developer Hub). Sent as the X-API-KEY header. Base host is the Signals API at signals.autobound.ai."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.get","description":"Return account details and rate limits. Consumes no credits.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.enrich","description":"Enrich a company with intent and news signals by domain (billed per returned signal).","parameters":{"type":"object","properties":{"domain":{"type":"string"},"signal_types":{"type":"array","items":{"type":"string"}},"limit":{"type":"integer"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"company.search","description":"Search companies aggregated by entity, filtered by signal type and firmographics.","parameters":{"type":"object","properties":{"signal_types":{"type":"array","items":{"type":"string"}},"company_domains":{"type":"array","items":{"type":"string"}},"limit":{"type":"integer"}},"required":["signal_types"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contact.enrich","description":"Enrich a contact with personal signals by email or LinkedIn URL (billed per returned signal).","parameters":{"type":"object","properties":{"contact_email":{"type":"string"},"contact_linkedin_url":{"type":"string"},"signal_types":{"type":"array","items":{"type":"string"}},"limit":{"type":"integer"}},"required":["contact_email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"contact.search","description":"Search contacts aggregated by entity, filtered by signal type.","parameters":{"type":"object","properties":{"signal_types":{"type":"array","items":{"type":"string"}},"limit":{"type":"integer"}},"required":["signal_types"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"autocalls","displayName":"Autocalls","description":"Place outbound calls, send SMS, and manage Autocalls campaign leads.","auth":{"kind":"api-key","hint":"Autocalls API key — create one in app.autocalls.ai and send it as a bearer token."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"make.phone.call","description":"Call a customer phone number using a selected Autocalls assistant.","parameters":{"type":"object","properties":{"assistant":{"type":"string","description":"Assistant id from /api/user/assistants/outbound."},"phone_number":{"type":"string","description":"Customer phone number to dial."},"variables":{"type":"object","description":"Variables passed to the assistant prompt."}},"required":["assistant","phone_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"add.lead","description":"Add a lead (primary + optional secondary contacts) to an Autocalls campaign.","parameters":{"type":"object","properties":{"campaign":{"type":"string","description":"Campaign id from /api/user/campaigns."},"phone_number":{"type":"string"},"variables":{"type":"object"},"allow_dupplicate":{"type":"boolean","description":"Allow re-adding the same phone number."},"num_secondary_contacts":{"type":"integer"},"secondary_contacts":{"type":"array","items":{"type":"object","properties":{"phone_number":{"type":"string"},"variables":{"type":"object"}}}}},"required":["campaign","phone_number","variables","allow_dupplicate"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"send.sms","description":"Send an SMS from an Autocalls-owned phone number to a customer.","parameters":{"type":"object","properties":{"from":{"type":"string","description":"SMS-capable phone number id from /api/user/phone-numbers."},"to":{"type":"string","description":"Customer phone number."},"body":{"type":"string","description":"Message body (max 300 characters)."}},"required":["from","to","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"campaign.control","description":"Change the status of an Autocalls campaign (start, pause, resume, stop).","parameters":{"type":"object","properties":{"campaign":{"type":"string","description":"Campaign id from /api/user/campaigns."},"action":{"type":"string","description":"Status transition to apply to the campaign.","enum":["start","pause","resume","stop"]}},"required":["campaign","action"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"delete.lead","description":"Delete a lead from Autocalls by id.","parameters":{"type":"object","properties":{"lead":{"type":"string","description":"Lead id from /api/user/leads."}},"required":["lead"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"avalara","displayName":"Avalara AvaTax","description":"Calculate tax and manage AvaTax transaction documents, adjustments, commits, voids, and refunds.","auth":{"kind":"api-key","hint":"JSON credential bundle: {\"accountId\":\"...\",\"licenseKey\":\"...\"}. Use apiBaseUrl metadata for the sandbox host when needed."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"rates.by-address","description":"Estimate the total tax rate for one postal address.","parameters":{"type":"object","properties":{"line1":{"type":"string"},"city":{"type":"string"},"region":{"type":"string"},"postalCode":{"type":"string"},"country":{"type":"string"}},"required":["postalCode","country"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"definitions.tax-codes.list","description":"List Avalara system tax codes for product classification.","parameters":{"type":"object","properties":{"top":{"type":"integer","minimum":1,"maximum":1000},"skip":{"type":"integer","minimum":0},"filter":{"type":"string"},"orderBy":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transactions.create","description":"Create an AvaTax transaction document and calculate its tax.","parameters":{"type":"object","properties":{"model":{"type":"object","description":"Provider-native AvaTax v2 request model."}},"required":["model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.create-or-adjust","description":"Create a transaction or adjust the existing transaction with the same company/code/type.","parameters":{"type":"object","properties":{"model":{"type":"object","description":"Provider-native AvaTax v2 request model."}},"required":["model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.get","description":"Read one AvaTax transaction and its summary.","parameters":{"type":"object","properties":{"companyCode":{"type":"string","description":"Avalara company code."},"transactionCode":{"type":"string","description":"Merchant transaction code."},"documentType":{"type":"string"},"include":{"type":"string","description":"Related response objects to include."}},"required":["companyCode","transactionCode"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transactions.audit","description":"Read the audit trail for one AvaTax transaction.","parameters":{"type":"object","properties":{"companyCode":{"type":"string","description":"Avalara company code."},"transactionCode":{"type":"string","description":"Merchant transaction code."}},"required":["companyCode","transactionCode"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transactions.commit","description":"Commit a transaction for reporting and filing.","parameters":{"type":"object","properties":{"companyCode":{"type":"string","description":"Avalara company code."},"transactionCode":{"type":"string","description":"Merchant transaction code."},"documentType":{"type":"string"},"include":{"type":"string","description":"Related response objects to include."},"model":{"type":"object","description":"Provider-native AvaTax v2 request model."}},"required":["companyCode","transactionCode","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.void","description":"Void a transaction with an explicit AvaTax void reason.","parameters":{"type":"object","properties":{"companyCode":{"type":"string","description":"Avalara company code."},"transactionCode":{"type":"string","description":"Merchant transaction code."},"documentType":{"type":"string"},"include":{"type":"string","description":"Related response objects to include."},"model":{"type":"object","description":"Provider-native AvaTax v2 request model."}},"required":["companyCode","transactionCode","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.refund","description":"Create a full or partial refund transaction.","parameters":{"type":"object","properties":{"companyCode":{"type":"string","description":"Avalara company code."},"transactionCode":{"type":"string","description":"Merchant transaction code."},"documentType":{"type":"string"},"include":{"type":"string","description":"Related response objects to include."},"model":{"type":"object","description":"Provider-native AvaTax v2 request model."}},"required":["companyCode","transactionCode","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.lock","description":"Lock a transaction against further edits.","parameters":{"type":"object","properties":{"companyCode":{"type":"string","description":"Avalara company code."},"transactionCode":{"type":"string","description":"Merchant transaction code."},"documentType":{"type":"string"},"include":{"type":"string","description":"Related response objects to include."},"model":{"type":"object","description":"Provider-native AvaTax v2 request model."}},"required":["companyCode","transactionCode","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"companies.list","description":"List AvaTax companies accessible to the account.","parameters":{"type":"object","properties":{"top":{"type":"integer","minimum":1,"maximum":1000},"skip":{"type":"integer","minimum":0},"filter":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"avian","displayName":"Avian","description":"Run chat completions against Avian-hosted language models via the OpenAI-compatible /v1/chat/completions surface.","auth":{"kind":"api-key","hint":"Avian API key (see your Avian account dashboard). Sent as `Authorization: Bearer <key>`."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"ask.avian","description":"Generate a completion from an Avian-hosted model. Mirrors the OpenAI chat-completions request shape.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Avian model id (e.g. an Avian-hosted Llama or Mixtral variant)."},"messages":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["system","user","assistant","tool"]},"content":{"type":"string"},"name":{"type":"string"},"tool_call_id":{"type":"string"}},"required":["role","content"]},"description":"Chat history as an array of role/content messages. If absent, `prompt` is wrapped into a single user message."},"prompt":{"type":"string","description":"Convenience single-turn prompt; combined with `roles` into a `messages` array at request time."},"roles":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["system","user","assistant","tool"]},"content":{"type":"string"},"name":{"type":"string"},"tool_call_id":{"type":"string"}},"required":["role","content"]},"description":"Optional system/assistant priming messages prepended to `prompt`."},"temperature":{"type":"number","description":"Sampling temperature (0–2). Lower is more deterministic. Recommend altering this OR top_p but not both."},"topP":{"type":"number","description":"Nucleus-sampling cutoff (0–1). Considers tokens covering top_p of the probability mass."},"maxTokens":{"type":"integer","description":"Hard upper bound on tokens generated for this completion."},"frequencyPenalty":{"type":"number","description":"Frequency-penalty (-2.0 to 2.0). Discourages literal token repetition."},"presencePenalty":{"type":"number","description":"Presence-penalty (-2.0 to 2.0). Encourages topic variety."},"responseFormat":{"type":"string","enum":["text","json_object"],"description":"Constrain the output format. When `json_object`, the prompt MUST also instruct the model to emit JSON."},"memoryKey":{"type":"string","description":"Shared-history key — when set, Avian threads the conversation across runs that reuse the same key."},"stream":{"type":"boolean","description":"Stream tokens as server-sent events instead of returning a single response."}},"required":["model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"models.list","description":"List Avian-hosted models available to the current API key.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"avoma","displayName":"Avoma","description":"Push completed dialer calls into Avoma and retrieve meeting transcripts and recording URLs.","auth":{"kind":"api-key","hint":"Avoma API key sent as a Bearer token."},"category":"calendar","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.create","description":"Register a completed external-dialer call so Avoma can ingest its recording and create meeting intelligence.","parameters":{"type":"object","properties":{"external_id":{"type":"string"},"user_email":{"type":"string"},"source":{"type":"string"},"direction":{"type":"string"},"start_at":{"type":"string"},"end_at":{"type":"string"},"frm":{"type":"string"},"to":{"type":"string"},"frm_name":{"type":"string"},"to_name":{"type":"string"},"recording_url":{"type":"string"},"participants":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"crm_id":{"type":"string"},"crm_type":{"type":"string"},"crm_system":{"type":"string"}},"required":["name","email"]}},"answered":{"type":"boolean"},"is_voicemail":{"type":"boolean"},"additional_details":{"type":"string"}},"required":["external_id","user_email","source","direction","start_at","frm","to","recording_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"meetings.transcription.get","description":"Fetch a speaker-attributed Avoma transcription by transcription UUID.","parameters":{"type":"object","properties":{"transcription_uuid":{"type":"string"}},"required":["transcription_uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"meetings.recording.get","description":"Fetch time-limited audio and video recording URLs for an Avoma meeting UUID.","parameters":{"type":"object","properties":{"meeting_uuid":{"type":"string"}},"required":["meeting_uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"aws-cloudwatch","displayName":"AWS CloudWatch","description":"Read and publish CloudWatch metrics, manage metric alarms, and manage dashboards.","auth":{"kind":"api-key","hint":"AWS credentials as JSON: {\"accessKeyId\":\"AKIA…\",\"secretAccessKey\":\"…\",\"region\":\"us-east-1\"}. Optional \"sessionToken\" and \"endpoint\" support temporary credentials and local AWS-compatible endpoints."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"metrics.list","description":"List available CloudWatch metrics and their dimensions.","parameters":{"type":"object","properties":{"namespace":{"type":"string"},"metricName":{"type":"string"},"dimensions":{"type":"array","description":"AWS DimensionFilter objects."},"nextToken":{"type":"string"},"recentlyActive":{"type":"string","enum":["PT3H"]},"includeLinkedAccounts":{"type":"boolean"},"owningAccount":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"metrics.statistics.get","description":"Get statistics for one metric over a time range.","parameters":{"type":"object","properties":{"namespace":{"type":"string"},"metricName":{"type":"string"},"dimensions":{"type":"array","description":"AWS Dimension objects."},"startTime":{"type":"number","description":"Unix epoch seconds."},"endTime":{"type":"number","description":"Unix epoch seconds."},"period":{"type":"integer","description":"Aggregation period in seconds."},"statistics":{"type":"array","items":{"type":"string"}},"extendedStatistics":{"type":"array","items":{"type":"string"}},"unit":{"type":"string"}},"required":["namespace","metricName","startTime","endTime","period"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"metrics.data.get","description":"Run up to 500 metric-data or metric-math queries in one request.","parameters":{"type":"object","properties":{"metricDataQueries":{"type":"array","description":"AWS MetricDataQuery objects."},"startTime":{"type":"number","description":"Unix epoch seconds."},"endTime":{"type":"number","description":"Unix epoch seconds."},"nextToken":{"type":"string"},"scanBy":{"type":"string","enum":["TimestampDescending","TimestampAscending"]},"maxDatapoints":{"type":"integer"},"labelOptions":{"type":"object"}},"required":["metricDataQueries","startTime","endTime"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"alarms.list","description":"List metric and composite alarms with optional filters.","parameters":{"type":"object","properties":{"alarmNames":{"type":"array","items":{"type":"string"}},"alarmNamePrefix":{"type":"string"},"alarmTypes":{"type":"array","items":{"type":"string"}},"childrenOfAlarmName":{"type":"string"},"parentsOfAlarmName":{"type":"string"},"stateValue":{"type":"string","enum":["OK","ALARM","INSUFFICIENT_DATA"]},"actionPrefix":{"type":"string"},"maxRecords":{"type":"integer"},"nextToken":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"dashboards.list","description":"List CloudWatch dashboards in the account.","parameters":{"type":"object","properties":{"dashboardNamePrefix":{"type":"string"},"nextToken":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"dashboards.get","description":"Get one CloudWatch dashboard definition.","parameters":{"type":"object","properties":{"dashboardName":{"type":"string"}},"required":["dashboardName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"metrics.publish","description":"Publish custom metric data or entity metric data to CloudWatch.","parameters":{"type":"object","properties":{"namespace":{"type":"string"},"metricData":{"type":"array","description":"AWS MetricDatum objects."},"entityMetricData":{"type":"array","description":"AWS EntityMetricData objects."},"strictEntityValidation":{"type":"boolean"}},"required":["namespace"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"alarms.put","description":"Create or fully replace a CloudWatch metric alarm.","parameters":{"type":"object","properties":{"alarm":{"type":"object","description":"AWS PutMetricAlarm input without undeclared transport fields."}},"required":["alarm"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"alarms.delete","description":"Delete up to 100 CloudWatch alarms by name.","parameters":{"type":"object","properties":{"alarmNames":{"type":"array","items":{"type":"string"}}},"required":["alarmNames"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"dashboards.put","description":"Create or fully replace a CloudWatch dashboard.","parameters":{"type":"object","properties":{"dashboardName":{"type":"string"},"dashboardBody":{"type":"string","description":"CloudWatch dashboard JSON string."}},"required":["dashboardName","dashboardBody"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"dashboards.delete","description":"Delete up to 100 CloudWatch dashboards by name.","parameters":{"type":"object","properties":{"dashboardNames":{"type":"array","items":{"type":"string"}}},"required":["dashboardNames"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"aws-lambda","displayName":"AWS Lambda","description":"Inspect, invoke, create, update, version, alias, and delete AWS Lambda functions.","auth":{"kind":"api-key","hint":"AWS credentials as JSON: {\"accessKeyId\":\"AKIA…\",\"secretAccessKey\":\"…\",\"region\":\"us-east-1\"}. Optional \"sessionToken\" and \"endpoint\" support temporary credentials and local AWS-compatible endpoints."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"functions.list","description":"List Lambda functions in the configured AWS region.","parameters":{"type":"object","properties":{"marker":{"type":"string","description":"Pagination marker."},"maxItems":{"type":"integer","description":"Maximum functions to return (1-50)."},"functionVersion":{"type":"string","enum":["ALL"],"description":"Include published versions when set to ALL."},"masterRegion":{"type":"string","description":"Filter Lambda@Edge replicas by region."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"functions.get","description":"Get one function configuration and its temporary deployment-package URL.","parameters":{"type":"object","properties":{"functionName":{"type":"string","description":"Function name or ARN."},"qualifier":{"type":"string","description":"Version number or alias."}},"required":["functionName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"aliases.list","description":"List aliases for a Lambda function.","parameters":{"type":"object","properties":{"functionName":{"type":"string"},"functionVersion":{"type":"string"},"marker":{"type":"string"},"maxItems":{"type":"integer"}},"required":["functionName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"functions.invoke","description":"Invoke a Lambda function synchronously, asynchronously, or as a dry-run permission check.","parameters":{"type":"object","properties":{"functionName":{"type":"string","description":"Function name or ARN."},"qualifier":{"type":"string","description":"Version number or alias."},"invocationType":{"type":"string","enum":["RequestResponse","Event","DryRun"]},"logType":{"type":"string","enum":["None","Tail"]},"clientContext":{"type":"string","description":"Base64-encoded client context for synchronous invocation."},"payload":{"description":"JSON payload passed directly to the function."}},"required":["functionName","payload"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"functions.create","description":"Create a Lambda function from an S3 object, inline zip, or ECR image.","parameters":{"type":"object","properties":{"functionName":{"type":"string"},"role":{"type":"string","description":"Execution-role ARN."},"code":{"type":"object","description":"AWS FunctionCode shape: S3Bucket/S3Key/S3ObjectVersion, ZipFile, or ImageUri."},"runtime":{"type":"string"},"handler":{"type":"string"},"description":{"type":"string"},"timeout":{"type":"integer"},"memorySize":{"type":"integer"},"publish":{"type":"boolean"},"packageType":{"type":"string","enum":["Zip","Image"]},"architectures":{"type":"array","items":{"type":"string"}},"environment":{"type":"object","description":"AWS Environment shape."},"vpcConfig":{"type":"object","description":"AWS VpcConfig shape."},"layers":{"type":"array","items":{"type":"string"}},"tags":{"type":"object"},"ephemeralStorage":{"type":"object"},"loggingConfig":{"type":"object"}},"required":["functionName","role","code"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"functions.code.update","description":"Replace the unpublished code for a Lambda function.","parameters":{"type":"object","properties":{"functionName":{"type":"string"},"s3Bucket":{"type":"string"},"s3Key":{"type":"string"},"s3ObjectVersion":{"type":"string"},"imageUri":{"type":"string"},"zipFile":{"type":"string","description":"Base64-encoded zip bytes."},"publish":{"type":"boolean"},"dryRun":{"type":"boolean"},"revisionId":{"type":"string"},"architectures":{"type":"array","items":{"type":"string"}}},"required":["functionName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"functions.configuration.update","description":"Update the unpublished configuration for a Lambda function.","parameters":{"type":"object","properties":{"functionName":{"type":"string"},"role":{"type":"string"},"handler":{"type":"string"},"description":{"type":"string"},"timeout":{"type":"integer"},"memorySize":{"type":"integer"},"runtime":{"type":"string"},"environment":{"type":"object"},"layers":{"type":"array","items":{"type":"string"}},"vpcConfig":{"type":"object"},"revisionId":{"type":"string"},"ephemeralStorage":{"type":"object"},"loggingConfig":{"type":"object"}},"required":["functionName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"versions.publish","description":"Publish an immutable version from the current function code and configuration.","parameters":{"type":"object","properties":{"functionName":{"type":"string"},"codeSha256":{"type":"string"},"description":{"type":"string"},"revisionId":{"type":"string"}},"required":["functionName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"aliases.create","description":"Create an alias that points to a published function version.","parameters":{"type":"object","properties":{"functionName":{"type":"string"},"name":{"type":"string"},"functionVersion":{"type":"string"},"description":{"type":"string"},"routingConfig":{"type":"object"}},"required":["functionName","name","functionVersion"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"aliases.update","description":"Move or reconfigure an existing function alias.","parameters":{"type":"object","properties":{"functionName":{"type":"string"},"name":{"type":"string"},"functionVersion":{"type":"string"},"description":{"type":"string"},"routingConfig":{"type":"object"},"revisionId":{"type":"string"}},"required":["functionName","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"aliases.delete","description":"Delete a function alias without deleting the function version.","parameters":{"type":"object","properties":{"functionName":{"type":"string"},"name":{"type":"string"}},"required":["functionName","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"functions.delete","description":"Permanently delete a Lambda function or one published version.","parameters":{"type":"object","properties":{"functionName":{"type":"string"},"qualifier":{"type":"string","description":"Version to delete. Omit to delete all versions."}},"required":["functionName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"azure-ad","displayName":"Azure Active Directory","description":"Manage users, groups, and licenses in Microsoft Entra ID (Azure AD) via Microsoft Graph.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["offline_access","User.ReadWrite.All","Group.ReadWrite.All","GroupMember.ReadWrite.All","Directory.ReadWrite.All","User.ManageIdentities.All"],"clientIdEnv":"AZURE_AD_OAUTH_CLIENT_ID","clientSecretEnv":"AZURE_AD_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.list","description":"List directory users with optional $filter, $select, $top, and $search.","parameters":{"type":"object","properties":{"$filter":{"type":"string"},"$select":{"type":"string"},"$top":{"type":"integer"},"$search":{"type":"string"},"$orderby":{"type":"string"}}},"requiredScopes":["User.ReadWrite.All"],"class":"read"},{"name":"users.list.enabled","description":"List directory users whose accountEnabled flag is true.","parameters":{"type":"object","properties":{"$select":{"type":"string"},"$top":{"type":"integer"}}},"requiredScopes":["User.ReadWrite.All"],"class":"read"},{"name":"users.get","description":"Read a single user by id or userPrincipalName.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["User.ReadWrite.All"],"class":"read"},{"name":"users.create","description":"Create a new directory user. Requires accountEnabled, displayName, mailNickname, userPrincipalName, and passwordProfile.","parameters":{"type":"object","properties":{"accountEnabled":{"type":"boolean"},"displayName":{"type":"string"},"mailNickname":{"type":"string"},"userPrincipalName":{"type":"string"},"passwordProfile":{"type":"object"},"givenName":{"type":"string"},"surname":{"type":"string"},"jobTitle":{"type":"string"},"department":{"type":"string"},"usageLocation":{"type":"string"}},"required":["accountEnabled","displayName","mailNickname","userPrincipalName","passwordProfile"]},"requiredScopes":["User.ReadWrite.All"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.update","description":"Patch fields on an existing user.","parameters":{"type":"object","properties":{"id":{"type":"string"},"patch":{"type":"object"}},"required":["id","patch"]},"requiredScopes":["User.ReadWrite.All"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"users.delete","description":"Delete a directory user (moves to the deleted-items container for 30 days).","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["User.ReadWrite.All"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.revoke.sessions","description":"Invalidate all refresh tokens for a user, forcing reauthentication on every active session.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["User.ReadWrite.All"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.license.assign","description":"Add or remove license SKUs assigned to a user.","parameters":{"type":"object","properties":{"id":{"type":"string"},"addLicenses":{"type":"array","items":{"type":"object"}},"removeLicenses":{"type":"array","items":{"type":"string"}}},"required":["id"]},"requiredScopes":["User.ReadWrite.All","Directory.ReadWrite.All"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"groups.get","description":"Read a single group by id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["Group.ReadWrite.All"],"class":"read"},{"name":"groups.attributes.get","description":"Read custom security attributes assigned to a group.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["Group.ReadWrite.All","CustomSecAttributeAssignment.ReadWrite.All"],"class":"read"},{"name":"groups.attributes.reset","description":"Clear custom security attributes on a group by patching customSecurityAttributes to an empty object.","parameters":{"type":"object","properties":{"id":{"type":"string"},"customSecurityAttributes":{"type":"object"}},"required":["id","customSecurityAttributes"]},"requiredScopes":["Group.ReadWrite.All","CustomSecAttributeAssignment.ReadWrite.All"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"groups.create","description":"Create a new group. Microsoft 365 groups require groupTypes:[\"Unified\"]; security groups omit it.","parameters":{"type":"object","properties":{"displayName":{"type":"string"},"mailNickname":{"type":"string"},"description":{"type":"string"},"securityEnabled":{"type":"boolean"},"mailEnabled":{"type":"boolean"},"groupTypes":{"type":"array","items":{"type":"string"}},"owners":{"type":"array","items":{"type":"string"}},"members":{"type":"array","items":{"type":"string"}},"visibility":{"type":"string"}},"required":["displayName","mailNickname","securityEnabled","mailEnabled"]},"requiredScopes":["Group.ReadWrite.All"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"groups.delete","description":"Delete a group (Microsoft 365 groups move to a 30-day soft-delete container).","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":["Group.ReadWrite.All"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"groups.members.list","description":"List the direct members of a group.","parameters":{"type":"object","properties":{"id":{"type":"string"},"$select":{"type":"string"},"$top":{"type":"integer"}},"required":["id"]},"requiredScopes":["GroupMember.ReadWrite.All","Group.ReadWrite.All"],"class":"read"},{"name":"groups.members.add","description":"Add a directory object as a member of the group. The @odata.id payload references the user/group/service-principal by id.","parameters":{"type":"object","properties":{"id":{"type":"string"},"memberId":{"type":"string"}},"required":["id","memberId"]},"requiredScopes":["GroupMember.ReadWrite.All","Group.ReadWrite.All"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"azure-blob-storage","displayName":"Azure Blob Storage","description":"List and manage Azure Blob Storage containers, blobs, downloads, uploads, and index tags using a customer-owned storage connection string.","auth":{"kind":"api-key","hint":"Azure Storage connection string containing AccountName and either AccountKey or SharedAccessSignature. Store it only in the encrypted credential field. Public Azure cloud endpoints are supported; development-storage and arbitrary custom endpoints are rejected."},"category":"storage","defaultConsistencyModel":"authoritative","rateLimit":{"requests":500,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"containers.list","class":"read","description":"List storage containers with optional prefix and system/deleted filters.","parameters":{"type":"object","properties":{"prefix":{"type":"string"},"includeDeleted":{"type":"boolean"},"includeSystem":{"type":"boolean"},"marker":{"type":"string","description":"Opaque continuation marker from a previous response."},"maxResults":{"type":"integer","minimum":1,"maximum":5000}},"required":[]}},{"name":"containers.create","class":"mutation","description":"Create a private blob container.","parameters":{"type":"object","properties":{"containerName":{"type":"string","description":"DNS-compatible Azure container name."}},"required":["containerName"]},"cas":"none","externalEffect":true},{"name":"containers.delete","class":"mutation","description":"Delete a blob container and its contents.","parameters":{"type":"object","properties":{"containerName":{"type":"string"}},"required":["containerName"]},"cas":"none","externalEffect":true},{"name":"blobs.list","class":"read","description":"List blobs in a container with metadata and optional snapshots.","parameters":{"type":"object","properties":{"containerName":{"type":"string"},"prefix":{"type":"string"},"includeSnapshots":{"type":"boolean"},"marker":{"type":"string"},"maxResults":{"type":"integer","minimum":1,"maximum":5000}},"required":["containerName"]}},{"name":"blobs.findByTags","class":"read","description":"Find blobs in one container whose Azure index tags match all supplied values.","parameters":{"type":"object","properties":{"containerName":{"type":"string"},"tags":{"type":"object","minProperties":1,"maxProperties":10,"additionalProperties":{"type":"string"}},"marker":{"type":"string"},"maxResults":{"type":"integer","minimum":1,"maximum":5000}},"required":["containerName","tags"]}},{"name":"blobs.read","class":"read","description":"Download a bounded blob payload as base64 with its content type and ETag.","parameters":{"type":"object","properties":{"containerName":{"type":"string"},"blobName":{"type":"string"},"maxBytes":{"type":"integer","minimum":1,"maximum":10485760}},"required":["containerName","blobName"]}},{"name":"blobs.upload","class":"mutation","description":"Upload or replace a block blob from UTF-8 or base64 content.","parameters":{"type":"object","properties":{"containerName":{"type":"string"},"blobName":{"type":"string"},"content":{"type":"string","maxLength":14000000,"description":"UTF-8 text or base64-encoded bytes, up to 10 MiB after decoding."},"encoding":{"type":"string","enum":["utf-8","base64"],"default":"utf-8"},"contentType":{"type":"string"},"tags":{"type":"object","maxProperties":10,"additionalProperties":{"type":"string"}}},"required":["containerName","blobName","content"]},"cas":"none","externalEffect":true},{"name":"blobs.delete","class":"mutation","description":"Delete a blob and optionally its snapshots.","parameters":{"type":"object","properties":{"containerName":{"type":"string"},"blobName":{"type":"string"},"deleteSnapshots":{"type":"string","enum":["include","only"]}},"required":["containerName","blobName"]},"cas":"none","externalEffect":true},{"name":"blobs.tags.set","class":"mutation","description":"Replace blob index tags or merge them with the current tags.","parameters":{"type":"object","properties":{"containerName":{"type":"string"},"blobName":{"type":"string"},"tags":{"type":"object","minProperties":1,"maxProperties":10,"additionalProperties":{"type":"string"}},"keepExistingTags":{"type":"boolean"}},"required":["containerName","blobName","tags"]},"cas":"none","externalEffect":true}]},{"kind":"azure-communication-services","displayName":"Azure Communication Services","description":"Send transactional email through the Azure Communication Services Email REST API.","auth":{"kind":"api-key","hint":"Azure Communication Services connection string (AccessKey). Endpoint is read from the connection string host."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"send.email","description":"Send an email via the Azure Communication Services Email API (POST /emails:send).","parameters":{"type":"object","properties":{"senderAddress":{"type":"string"},"content":{"type":"object","properties":{"subject":{"type":"string"},"plainText":{"type":"string"},"html":{"type":"string"}},"required":["subject"]},"recipients":{"type":"object","properties":{"to":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"displayName":{"type":"string"}},"required":["address"]}},"cc":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"displayName":{"type":"string"}},"required":["address"]}},"bcc":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"displayName":{"type":"string"}},"required":["address"]}}},"required":["to"]},"replyTo":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"displayName":{"type":"string"}},"required":["address"]}},"attachments":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"contentType":{"type":"string"},"contentInBase64":{"type":"string"}},"required":["name","contentType","contentInBase64"]}},"headers":{"type":"object"},"userEngagementTrackingDisabled":{"type":"boolean"}},"required":["senderAddress","content","recipients"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"send.sms","description":"Send an SMS message through the Azure Communication Services SMS API (POST /sms?api-version=2021-03-07).","parameters":{"type":"object","properties":{"from":{"type":"string","description":"ACS-provisioned sender phone number (E.164)."},"smsRecipients":{"type":"array","items":{"type":"object","properties":{"to":{"type":"string"},"repeatabilityRequestId":{"type":"string"},"repeatabilityFirstSent":{"type":"string"}},"required":["to"]},"description":"Recipient list. Each entry carries an E.164 destination and optional repeatability fields."},"message":{"type":"string","description":"SMS body text. Plain text only; ACS handles GSM7/UCS2 segmentation."},"smsSendOptions":{"type":"object","properties":{"enableDeliveryReport":{"type":"boolean"},"tag":{"type":"string"}}}},"required":["from","smsRecipients","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chat.thread.create","description":"Create a chat thread for ACS Chat (POST /chat/threads?api-version=2021-09-07). Returns the thread id used by chat.message.send.","parameters":{"type":"object","properties":{"topic":{"type":"string","description":"Human-readable thread topic."},"participants":{"type":"array","items":{"type":"object","properties":{"id":{"type":"object","properties":{"communicationUser":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},"required":["communicationUser"]},"displayName":{"type":"string"}},"required":["id"]},"description":"Initial participants; each carries an ACS communication user identity."}},"required":["topic","participants"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chat.message.send","description":"Post a message to an existing ACS chat thread (POST /chat/threads/{threadId}/messages?api-version=2021-09-07). Pass the full ACS message body as `message`.","parameters":{"type":"object","properties":{"threadId":{"type":"string","description":"Chat thread id (returned by chat.thread.create)."},"message":{"type":"object","description":"ACS message body. Carries `content` (required), and optional `senderDisplayName`, `type` (text|html), and `metadata`.","properties":{"content":{"type":"string"},"senderDisplayName":{"type":"string"},"type":{"type":"string","enum":["text","html"]},"metadata":{"type":"object"}},"required":["content"]}},"required":["threadId","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"azure-event-grid","displayName":"Azure Event Grid","description":"Publish Event Grid and CloudEvents batches to customer topics and authenticate inbound subscription validation and event delivery.","auth":{"kind":"api-key","hint":"JSON containing endpoint, accessKey, and deliverySecret. endpoint is the Azure custom topic or domain /api/events URL. Configure deliverySecret as the static x-tangle-eventgrid-secret delivery header on each Event Grid subscription."},"category":"webhook","defaultConsistencyModel":"advisory","rateLimit":{"requests":600,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"events.publish","class":"mutation","description":"Publish a bounded batch using the native Azure Event Grid event schema.","parameters":{"type":"object","properties":{"events":{"type":"array","minItems":1,"maxItems":5000,"description":"Events require id, eventType, subject, eventTime, dataVersion, and data."}},"required":["events"]},"cas":"none","externalEffect":true},{"name":"cloudEvents.publish","class":"mutation","description":"Publish a bounded CloudEvents 1.0 batch.","parameters":{"type":"object","properties":{"events":{"type":"array","minItems":1,"maxItems":5000,"description":"CloudEvents require id, source, type, specversion=1.0, and data."}},"required":["events"]},"cas":"none","externalEffect":true}]},{"kind":"azure-openai","displayName":"Azure OpenAI","description":"Call Azure OpenAI Service deployments (chat completions, completions, embeddings, images, audio) on your tenant-owned resource endpoint with a per-resource api-key.","auth":{"kind":"api-key","hint":"Azure OpenAI resource key from the Azure Portal (Keys and Endpoint blade). The connection metadata must also carry the per-resource endpoint, e.g. https://<resource>.openai.azure.com."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"deployments.list","description":"List deployments (model bindings) on this Azure OpenAI resource.","parameters":{"type":"object","properties":{"apiVersion":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"deployments.get","description":"Retrieve a single deployment by name.","parameters":{"type":"object","properties":{"deployment":{"type":"string"},"apiVersion":{"type":"string"}},"required":["deployment"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"models.list","description":"List models available to this Azure OpenAI resource (independent of deployment).","parameters":{"type":"object","properties":{"apiVersion":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"chat.completions.create","description":"Create a chat completion against a named deployment. Mirrors the catalog `askGpt` action with the full Azure chat surface (tools, structured output, vision).","parameters":{"type":"object","properties":{"deployment":{"type":"string"},"apiVersion":{"type":"string"},"messages":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["system","user","assistant","tool","function","developer"]},"content":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"text":{"type":"string"},"image_url":{"type":"object","properties":{"url":{"type":"string"}}}},"required":["type"]}}]},"name":{"type":"string"},"tool_call_id":{"type":"string"}},"required":["role"]}},"temperature":{"type":"number","minimum":0,"maximum":2},"top_p":{"type":"number","minimum":0,"maximum":1},"n":{"type":"integer","minimum":1},"stop":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"max_tokens":{"type":"integer","minimum":1},"max_completion_tokens":{"type":"integer","minimum":1},"presence_penalty":{"type":"number","minimum":-2,"maximum":2},"frequency_penalty":{"type":"number","minimum":-2,"maximum":2},"logit_bias":{"type":"object"},"user":{"type":"string"},"seed":{"type":"integer"},"response_format":{"type":"object"},"tools":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["function"]},"function":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"parameters":{"type":"object"}},"required":["name"]}},"required":["type","function"]}},"tool_choice":{"oneOf":[{"type":"string"},{"type":"object"}]},"parallel_tool_calls":{"type":"boolean"},"stream":{"type":"boolean","const":false}},"required":["deployment","messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"completions.create","description":"Create a non-chat completion against a named deployment. Useful for fine-tuned base-model deployments and legacy text-completion workflows.","parameters":{"type":"object","properties":{"deployment":{"type":"string"},"apiVersion":{"type":"string"},"prompt":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"max_tokens":{"type":"integer","minimum":1},"temperature":{"type":"number","minimum":0,"maximum":2},"top_p":{"type":"number","minimum":0,"maximum":1},"n":{"type":"integer","minimum":1},"stop":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"presence_penalty":{"type":"number","minimum":-2,"maximum":2},"frequency_penalty":{"type":"number","minimum":-2,"maximum":2},"logit_bias":{"type":"object"},"user":{"type":"string"},"seed":{"type":"integer"},"stream":{"type":"boolean","const":false}},"required":["deployment","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"embeddings.create","description":"Generate embedding vectors for the given input(s) against an embeddings deployment.","parameters":{"type":"object","properties":{"deployment":{"type":"string"},"apiVersion":{"type":"string"},"input":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"array","items":{"type":"array","items":{"type":"integer"}}}]},"encoding_format":{"type":"string","enum":["float","base64"]},"dimensions":{"type":"integer","minimum":1},"user":{"type":"string"}},"required":["deployment","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"images.generate","description":"Generate an image from a prompt against a DALL·E / gpt-image deployment.","parameters":{"type":"object","properties":{"deployment":{"type":"string"},"apiVersion":{"type":"string"},"prompt":{"type":"string"},"n":{"type":"integer","minimum":1,"maximum":10},"size":{"type":"string"},"quality":{"type":"string"},"style":{"type":"string"},"response_format":{"type":"string","enum":["url","b64_json"]},"user":{"type":"string"}},"required":["deployment","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"audio.transcriptions.create","description":"Transcribe audio (whisper-style) against a transcription deployment.","parameters":{"type":"object","properties":{"deployment":{"type":"string"},"apiVersion":{"type":"string"},"file":{"type":"string","description":"Base64-encoded audio payload or upload reference."},"prompt":{"type":"string"},"response_format":{"type":"string","enum":["json","text","srt","verbose_json","vtt"]},"temperature":{"type":"number","minimum":0,"maximum":1},"language":{"type":"string"}},"required":["deployment","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"audio.translations.create","description":"Translate audio to English against a transcription deployment.","parameters":{"type":"object","properties":{"deployment":{"type":"string"},"apiVersion":{"type":"string"},"file":{"type":"string"},"prompt":{"type":"string"},"response_format":{"type":"string","enum":["json","text","srt","verbose_json","vtt"]},"temperature":{"type":"number","minimum":0,"maximum":1}},"required":["deployment","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"audio.speech.create","description":"Synthesize speech audio from text against a text-to-speech deployment.","parameters":{"type":"object","properties":{"deployment":{"type":"string"},"apiVersion":{"type":"string"},"input":{"type":"string"},"voice":{"type":"string"},"response_format":{"type":"string","enum":["mp3","opus","aac","flac","wav","pcm"]},"speed":{"type":"number","minimum":0.25,"maximum":4}},"required":["deployment","input","voice"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"azure-service-bus","displayName":"Azure Service Bus","description":"Send and receive Azure Service Bus queue and topic messages and discover queue, topic, and subscription entities with a customer-owned SAS connection string.","auth":{"kind":"api-key","hint":"Azure Service Bus connection string containing Endpoint, SharedAccessKeyName, and SharedAccessKey. EntityPath is supported and restricts this connection to that queue or topic."},"category":"webhook","defaultConsistencyModel":"advisory","rateLimit":{"requests":600,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"queues.list","class":"read","description":"List queues visible to a namespace-level Manage policy.","parameters":{"type":"object","properties":{"skip":{"type":"integer","minimum":0},"top":{"type":"integer","minimum":1,"maximum":1000}}}},{"name":"queues.get","class":"read","description":"Get one queue description and message counts.","parameters":{"type":"object","properties":{"queue":{"type":"string"}},"required":["queue"]}},{"name":"topics.list","class":"read","description":"List topics visible to a namespace-level Manage policy.","parameters":{"type":"object","properties":{"skip":{"type":"integer","minimum":0},"top":{"type":"integer","minimum":1,"maximum":1000}}}},{"name":"topics.get","class":"read","description":"Get one topic description and message counts.","parameters":{"type":"object","properties":{"topic":{"type":"string"}},"required":["topic"]}},{"name":"subscriptions.list","class":"read","description":"List subscriptions for one topic.","parameters":{"type":"object","properties":{"topic":{"type":"string"},"skip":{"type":"integer","minimum":0},"top":{"type":"integer","minimum":1,"maximum":1000}},"required":["topic"]}},{"name":"subscriptions.get","class":"read","description":"Get one topic subscription description and message counts.","parameters":{"type":"object","properties":{"topic":{"type":"string"},"subscription":{"type":"string"}},"required":["topic","subscription"]}},{"name":"queues.send","class":"mutation","description":"Send a UTF-8 or base64 message to a queue.","parameters":{"type":"object","properties":{"queue":{"type":"string"},"content":{"type":"string","description":"UTF-8 text or canonical base64 message body."},"encoding":{"type":"string","enum":["utf-8","base64"],"default":"utf-8"},"contentType":{"type":"string"},"brokerProperties":{"type":"object","description":"Allowed broker properties such as MessageId, CorrelationId, Label, SessionId, TimeToLive, and ScheduledEnqueueTimeUtc."},"applicationProperties":{"type":"object","description":"Application property headers with string, number, or boolean values."}},"required":["queue","content"]},"cas":"none","externalEffect":true},{"name":"topics.send","class":"mutation","description":"Publish a UTF-8 or base64 message to a topic.","parameters":{"type":"object","properties":{"topic":{"type":"string"},"content":{"type":"string","description":"UTF-8 text or canonical base64 message body."},"encoding":{"type":"string","enum":["utf-8","base64"],"default":"utf-8"},"contentType":{"type":"string"},"brokerProperties":{"type":"object","description":"Allowed broker properties such as MessageId, CorrelationId, Label, SessionId, TimeToLive, and ScheduledEnqueueTimeUtc."},"applicationProperties":{"type":"object","description":"Application property headers with string, number, or boolean values."}},"required":["topic","content"]},"cas":"none","externalEffect":true},{"name":"queues.receiveDelete","class":"mutation","description":"Receive and permanently delete the next queue message.","parameters":{"type":"object","properties":{"queue":{"type":"string"},"timeoutSeconds":{"type":"integer","minimum":0,"maximum":55}},"required":["queue"]},"cas":"none","externalEffect":true},{"name":"subscriptions.receiveDelete","class":"mutation","description":"Receive and permanently delete the next message from a topic subscription.","parameters":{"type":"object","properties":{"topic":{"type":"string"},"subscription":{"type":"string"},"timeoutSeconds":{"type":"integer","minimum":0,"maximum":55}},"required":["topic","subscription"]},"cas":"none","externalEffect":true},{"name":"queues.deadLetters.receiveDelete","class":"mutation","description":"Receive and permanently delete the next queue dead-letter message.","parameters":{"type":"object","properties":{"queue":{"type":"string"},"timeoutSeconds":{"type":"integer","minimum":0,"maximum":55}},"required":["queue"]},"cas":"none","externalEffect":true},{"name":"subscriptions.deadLetters.receiveDelete","class":"mutation","description":"Receive and permanently delete the next subscription dead-letter message.","parameters":{"type":"object","properties":{"topic":{"type":"string"},"subscription":{"type":"string"},"timeoutSeconds":{"type":"integer","minimum":0,"maximum":55}},"required":["topic","subscription"]},"cas":"none","externalEffect":true}]},{"kind":"backblaze","displayName":"Backblaze B2","description":"Read and upload objects on a Backblaze B2 bucket via the S3-compatible REST API at s3.{region}.backblazeb2.com.","auth":{"kind":"api-key","hint":"Backblaze B2 application key pair as JSON: {\"accessKeyId\":\"…\",\"secretAccessKey\":\"…\",\"region\":\"us-west-001\",\"bucket\":\"…\"} scoped to the target bucket. Optional \"endpoint\" overrides the host. Requests are signed with AWS Signature V4 (S3-compatible); the region selects the s3.<region>.backblazeb2.com endpoint."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"files.read","description":"Read an object from the configured bucket. Returns the object bytes and S3 response headers (Content-Type, Content-Length, ETag, x-amz-meta-*). `key` is the full object key including any extension; folder-style keys use forward slashes.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name. Defaults to the connector-configured bucket when omitted."},"key":{"type":"string","description":"Full object key (e.g. \"reports/2026/q1.pdf\"). Include the extension verbatim — Backblaze treats keys as opaque byte strings."}},"required":["key"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.s3_upload","description":"Upload an object to the bucket via S3 PutObject. The destination key is built from `folderPath` + `fileName` when both are present, otherwise `fileName` is used as the full key. `type` selects the Content-Type sent on the PUT, and `acl` maps to the S3 canned-ACL header (private | public-read).","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name. Defaults to the connector-configured bucket when omitted."},"fileName":{"type":"string","description":"File name without extension by activepieces convention. Combined with `folderPath` to form the destination key; pass a full path here (e.g. \"reports/q1.pdf\") to store at the bucket root."},"folderPath":{"type":"string","description":"Optional folder prefix (e.g. \"reports/2026\"). Joined to `fileName` with a single \"/\" separator."},"file":{"type":"string","description":"Object body. Pass a base64-encoded string for binary content, or a UTF-8 string for text. The runtime decodes and sets Content-Length."},"type":{"type":"string","description":"MIME type sent as the Content-Type header (e.g. \"application/pdf\", \"image/png\"). Required by the activepieces piece."},"acl":{"type":"string","enum":["private","public-read"],"description":"S3 canned ACL applied to the new object. Backblaze honors `private` and `public-read`; other canned ACLs are rejected."}},"required":["fileName","file","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.list","description":"List objects in the bucket using S3 ListObjectsV2. `prefix` narrows the listing to a key prefix; `maxKeys` caps the number of returned keys (S3 cap is 1000).","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name. Defaults to the connector-configured bucket when omitted."},"prefix":{"type":"string","description":"Only list keys that start with this prefix (e.g. \"reports/2026/\")."},"maxKeys":{"type":"integer","description":"Maximum number of keys to return (1..1000). Defaults to 1000."},"continuationToken":{"type":"string","description":"Opaque token from a previous response when paginating."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.delete","description":"Delete an object from the bucket via S3 DeleteObject. The key is opaque — pass the full key including any folder prefix.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name. Defaults to the connector-configured bucket when omitted."},"key":{"type":"string","description":"Full object key (e.g. \"reports/2026/q1.pdf\"). Include the extension verbatim."}},"required":["key"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.copy","description":"Server-side copy of an object to a new key in the same (or another) bucket via S3 PUT + x-amz-copy-source. `sourceKey` is the full source object key; `destKey` is the destination key.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Destination bucket name. Defaults to the connector-configured bucket when omitted."},"sourceBucket":{"type":"string","description":"Source bucket name. Defaults to `bucket` when omitted."},"sourceKey":{"type":"string","description":"Full source object key."},"destKey":{"type":"string","description":"Full destination object key."},"acl":{"type":"string","enum":["private","public-read"],"description":"S3 canned ACL applied to the new object."}},"required":["sourceBucket","sourceKey","destKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"bamboohr","displayName":"BambooHR","description":"Read and update BambooHR employee records, time-off requests, custom reports, and employee files via the BambooHR Gateway REST API.","auth":{"kind":"api-key","hint":"BambooHR API key. Generate one under your BambooHR account → API Keys, then paste the base64 of `<apiKey>:x` (the literal letter x as password — BambooHR ignores the password but HTTP Basic requires one)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"employees.directory","description":"List every employee in the BambooHR directory (id, displayName, jobTitle, workEmail, department, location, supervisor). Useful as a tenant-wide lookup table.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"employees.get","description":"Fetch a single employee record by id. Pass `fields` as a comma-separated list of BambooHR field aliases (firstName,lastName,workEmail,jobTitle,hireDate,…).","parameters":{"type":"object","properties":{"employeeId":{"type":"string","description":"BambooHR employee id (or \"0\" for the API-key owner)."},"fields":{"type":"string","description":"Comma-separated field aliases to project; required by BambooHR."}},"required":["employeeId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"employees.create","description":"Create a new employee. Body is a flat object of BambooHR field aliases (firstName, lastName, workEmail, jobTitle, department, hireDate). BambooHR returns the new employee id in the `Location` response header.","parameters":{"type":"object","properties":{"fields":{"type":"object","description":"Flat map of BambooHR field aliases → values. firstName and lastName are required."}},"required":["fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"employees.update","description":"Update an existing employee. Body is a flat object of BambooHR field aliases → new values. BambooHR returns 200 with no body on success.","parameters":{"type":"object","properties":{"employeeId":{"type":"string"},"fields":{"type":"object"}},"required":["employeeId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"employees.list_custom_table","description":"Read a row set from a BambooHR table (jobInfo, compensation, employmentStatus, …) for a single employee. Returns one entry per historical row.","parameters":{"type":"object","properties":{"employeeId":{"type":"string"},"tableName":{"type":"string","description":"BambooHR table alias, e.g. jobInfo, compensation, employmentStatus."}},"required":["employeeId","tableName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"timeoff.types.list","description":"List the time-off types configured for the tenant (vacation, sick, jury duty, …). Returns id, name, units.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"timeoff.requests.list","description":"List time-off requests in a date window. `start` and `end` are ISO-8601 dates (YYYY-MM-DD); `status` filters by approved/denied/superseded/requested.","parameters":{"type":"object","properties":{"start":{"type":"string","format":"date"},"end":{"type":"string","format":"date"},"employeeId":{"type":"string"},"status":{"type":"string","enum":["approved","denied","superseded","requested","canceled"]},"type":{"type":"string","description":"Time-off type id."}},"required":["start","end"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"timeoff.requests.create","description":"File a time-off request on behalf of an employee. status defaults to \"requested\" so it routes through the tenant's normal approval chain.","parameters":{"type":"object","properties":{"employeeId":{"type":"string"},"status":{"type":"string","enum":["approved","denied","superseded","requested"]},"start":{"type":"string","format":"date"},"end":{"type":"string","format":"date"},"timeOffTypeId":{"type":"integer"},"amount":{"type":"number","description":"Hours or days depending on the time-off type units."},"notes":{"type":"object","description":"Free-form notes; BambooHR shows them on the request."},"dates":{"type":"array","description":"Optional per-day breakdown ({date, amount}).","items":{"type":"object"}}},"required":["employeeId","start","end","timeOffTypeId","amount"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"timeoff.requests.change_status","description":"Approve, deny, or cancel an existing time-off request. status must be one of approved | denied | superseded | requested | canceled.","parameters":{"type":"object","properties":{"requestId":{"type":"string"},"status":{"type":"string","enum":["approved","denied","superseded","requested","canceled"]},"note":{"type":"string"}},"required":["requestId","status"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"reports.list","description":"List the tenant's saved custom reports (id, name, owner). Use the id with `reports.run`.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reports.run","description":"Run a saved BambooHR report by id and return its rows. format defaults to JSON; set fd=yes to flatten field aliases into the response keys.","parameters":{"type":"object","properties":{"reportId":{"type":"string"},"format":{"type":"string","enum":["JSON","CSV","PDF","XLS","XML"]},"fd":{"type":"string","enum":["yes","no"],"description":"Field-data toggle."}},"required":["reportId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reports.custom","description":"Build an ad-hoc report from a list of field aliases. Body matches BambooHR's custom-report contract: { title, fields, filters?, includeWorkflowStatus? }.","parameters":{"type":"object","properties":{"title":{"type":"string"},"fields":{"type":"array","description":"BambooHR field aliases to include as report columns.","items":{"type":"string"}},"filters":{"type":"object"},"includeWorkflowStatus":{"type":"boolean"},"format":{"type":"string","enum":["JSON","CSV","PDF","XLS","XML"]}},"required":["title","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":false},{"name":"files.list","description":"List the files attached to an employee (id, name, originalFileName, size, dateCreated, category).","parameters":{"type":"object","properties":{"employeeId":{"type":"string"}},"required":["employeeId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.get_metadata","description":"Fetch a single employee file's metadata by id. To download bytes, the caller follows the returned URL with the same credentials.","parameters":{"type":"object","properties":{"employeeId":{"type":"string"},"fileId":{"type":"string"}},"required":["employeeId","fileId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"meta.fields","description":"List every BambooHR field the tenant has configured (alias, name, type). Use this to discover field aliases dynamically.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"meta.lists","description":"List the tenant's list-typed field options (departments, divisions, locations, employment statuses).","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"bannerbear","displayName":"Bannerbear","description":"Automate image generation using Bannerbear templates.","auth":{"kind":"api-key","hint":"Bannerbear API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"images.create","description":"Create an image using a Bannerbear template with specified modifications.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"The ID of the template to use for image creation."},"modifications":{"type":"object","description":"A list of modifications to apply to the template layers."},"templateVersion":{"type":"integer","description":"Create image based on a specific version of the template."},"transparent":{"type":"boolean","description":"Render a PNG with a transparent background. Default is false."},"renderPdf":{"type":"boolean","description":"Render a PDF instead of a PNG. Default is false."},"metadata":{"type":"string","description":"Any metadata you need to store, e.g., ID of a record in your DB."}},"required":["templateId","modifications"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"images.delete","description":"Delete a previously-rendered image by its Bannerbear image id.","parameters":{"type":"object","properties":{"imageId":{"type":"string","description":"Bannerbear image id (uid returned by images.create)."}},"required":["imageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"videos.create","description":"Render a video from a Bannerbear video template. Pass the Bannerbear video-create body directly (snake_case fields: video_template, modifications, input_media_url, blur_media_url, frames, frames_per_row, metadata, webhook_url).","parameters":{"type":"object","properties":{"video_template":{"type":"string","description":"Bannerbear video template id."},"modifications":{"type":"array","description":"Per-layer modifications applied to the video template (text/image/colour overrides).","items":{"type":"object"}},"input_media_url":{"type":"string","description":"URL to source media when the template ingests external footage."},"blur_media_url":{"type":"string","description":"URL to media used as background blur (template-specific)."},"frames":{"type":"array","description":"Per-frame modifications for multi-frame video templates.","items":{"type":"object"}},"frames_per_row":{"type":"integer","description":"Layout hint for multi-frame templates (frames per row)."},"metadata":{"type":"string","description":"Free-form metadata stored on the video render."},"webhook_url":{"type":"string","description":"Callback URL invoked when the video render completes."}},"required":["video_template"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.create","description":"Create a Bannerbear collection render — a single API call that fans out one set of modifications across every template attached to the collection template. Pass the body directly (snake_case fields: template_set, modifications, transparent, render_pdf, metadata, webhook_url).","parameters":{"type":"object","properties":{"template_set":{"type":"string","description":"Bannerbear template-set (collection) id."},"modifications":{"type":"array","description":"Per-layer modifications applied to every template in the set.","items":{"type":"object"}},"transparent":{"type":"boolean","description":"Render PNGs with transparent backgrounds. Default false."},"render_pdf":{"type":"boolean","description":"Render PDFs instead of PNGs. Default false."},"metadata":{"type":"string","description":"Free-form metadata stored on the collection render."},"webhook_url":{"type":"string","description":"Callback URL invoked when the collection render completes."}},"required":["template_set","modifications"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"barcode-lookup","displayName":"Barcode Lookup","description":"Look up product information by UPC, EAN, or ISBN barcode number.","auth":{"kind":"api-key","hint":"Barcode Lookup API key, sent as the \"key\" query parameter."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"search.by.barcode","description":"Look up product information for a UPC, EAN, or ISBN barcode.","parameters":{"type":"object","properties":{"barcode":{"type":"string","description":"The barcode/UPC/EAN/ISBN number to search for."},"formatted":{"type":"boolean","description":"Return results in a clean, easy-to-read format."}},"required":["barcode"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"baremetrics","displayName":"Baremetrics","description":"Create and update customers, plans, and subscriptions in Baremetrics, the analytics and metrics platform for subscription businesses.","auth":{"kind":"api-key","hint":"Baremetrics API key from Settings → API. Sent as a bearer token."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.customer","description":"Create a customer under a Baremetrics source. Pass `body` matching the Baremetrics customers payload (oid, name, email, notes, current_plan_oid, etc.).","parameters":{"type":"object","properties":{"sourceId":{"type":"string","description":"Baremetrics source id (e.g. the connected Stripe/Recurly/Chargify source)."},"body":{"type":"object","description":"Baremetrics customer payload: { oid, name?, email?, notes?, current_plan_oid? }."}},"required":["sourceId","body"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.plan","description":"Create a plan under a Baremetrics source. Pass `body` matching the Baremetrics plans payload (oid, name, currency, amounts, interval, interval_count, etc.).","parameters":{"type":"object","properties":{"sourceId":{"type":"string","description":"Baremetrics source id."},"body":{"type":"object","description":"Baremetrics plan payload: { oid, name, currency, amount, interval, interval_count, trial_days? }."}},"required":["sourceId","body"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.subscription","description":"Create a subscription under a Baremetrics source. Pass `body` matching the Baremetrics subscriptions payload (oid, started_at, customer_oid, plan_oid, etc.).","parameters":{"type":"object","properties":{"sourceId":{"type":"string","description":"Baremetrics source id."},"body":{"type":"object","description":"Baremetrics subscription payload: { oid, started_at, customer_oid, plan_oid, canceled_at? }."}},"required":["sourceId","body"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.customer","description":"Update an existing Baremetrics customer (identified by its oid) under a given source. Pass `body` with the updatable fields per the Baremetrics customers update payload.","parameters":{"type":"object","properties":{"sourceId":{"type":"string","description":"Baremetrics source id."},"customerOid":{"type":"string","description":"External id of the customer to update (the oid value previously created)."},"body":{"type":"object","description":"Baremetrics customer update payload: { name?, email?, notes?, current_plan_oid? }."}},"required":["sourceId","customerOid","body"]},"requiredScopes":["write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"delete.customer","description":"Delete a Baremetrics customer (identified by its oid) from a given source. Permanently removes customer history from Baremetrics analytics.","parameters":{"type":"object","properties":{"sourceId":{"type":"string","description":"Baremetrics source id."},"customerOid":{"type":"string","description":"External id of the customer to delete."}},"required":["sourceId","customerOid"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cancel.subscription","description":"Cancel a Baremetrics subscription (identified by its oid) under a given source. Marks the subscription as canceled in Baremetrics.","parameters":{"type":"object","properties":{"sourceId":{"type":"string","description":"Baremetrics source id."},"subscriptionOid":{"type":"string","description":"External id of the subscription to cancel."}},"required":["sourceId","subscriptionOid"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"delete.plan","description":"Delete a Baremetrics plan definition (identified by its oid) under a given source.","parameters":{"type":"object","properties":{"sourceId":{"type":"string","description":"Baremetrics source id."},"planOid":{"type":"string","description":"External id of the plan to delete."}},"required":["sourceId","planOid"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.annotation","description":"Create a chart annotation in Baremetrics. Annotations appear as labelled markers on time-series charts.","parameters":{"type":"object","properties":{"metric":{"type":"string","description":"Metric the annotation should appear on (e.g. mrr, active_customers)."},"title":{"type":"string","description":"Short annotation title."},"description":{"type":"string","description":"Optional longer annotation body."},"date":{"type":"string","description":"Date of the annotation in YYYY-MM-DD format."}},"required":["metric","title","date"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"base44","displayName":"Base44","description":"Create, find, and manage entities in Base44 with flexible query and filtering capabilities.","auth":{"kind":"api-key","hint":"Base44 App ID and API token."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"entities.create","description":"Create a new entity in Base44.","parameters":{"type":"object","properties":{"entityType":{"type":"string","description":"The name of the entity type"},"entityData":{"type":"object","description":"The data to create the entity with"}},"required":["entityType","entityData"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"entities.find","description":"Find entities in Base44 matching a search query.","parameters":{"type":"object","properties":{"entityType":{"type":"string","description":"The name of the entity type"},"searchQuery":{"type":"object","description":"Query object to filter entities"}},"required":["entityType","searchQuery"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"entities.findOrCreate","description":"Find an entity or create it if not found.","parameters":{"type":"object","properties":{"entityType":{"type":"string","description":"The name of the entity type"},"searchQuery":{"type":"object","description":"Query to find the entity"},"createData":{"type":"object","description":"Data to create the entity with if not found"}},"required":["entityType","searchQuery","createData"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"entities.update","description":"Update an existing entity row by id.","parameters":{"type":"object","properties":{"entityType":{"type":"string","description":"The name of the entity type"},"entityId":{"type":"string","description":"Id of the entity to update"},"entityData":{"type":"object","description":"Fields to update on the entity"}},"required":["entityType","entityId","entityData"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"entities.delete","description":"Delete an entity row by id.","parameters":{"type":"object","properties":{"entityType":{"type":"string","description":"The name of the entity type"},"entityId":{"type":"string","description":"Id of the entity to delete"}},"required":["entityType","entityId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"entities.bulkUpsert","description":"Bulk upsert a list of entities under a single entity type.","parameters":{"type":"object","properties":{"entityType":{"type":"string","description":"The name of the entity type"},"entities":{"type":"array","description":"Array of entity payloads to upsert.","items":{"type":"object"}}},"required":["entityType","entities"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"basecamp","displayName":"Basecamp","description":"Read projects, message boards, to-do lists, to-dos, and campfire chats from a connected Basecamp 3 account; create message-board posts, to-dos, and campfire lines.","auth":{"kind":"oauth2","authorizationUrl":"https://launchpad.37signals.com/authorization/new","tokenUrl":"https://launchpad.37signals.com/authorization/token","scopes":[],"clientIdEnv":"BASECAMP_OAUTH_CLIENT_ID","clientSecretEnv":"BASECAMP_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"projects.list","description":"List active projects visible to the authorized user. Paginates 15 per page; use `page` to walk.","parameters":{"type":"object","properties":{"status":{"type":"string","description":"Filter by archived/trashed lifecycle. Defaults to active when omitted.","enum":["archived","trashed"]},"page":{"type":"integer","minimum":1}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.get","description":"Read a single project, including the dock of tools (message board, todoset, campfire, schedule) attached to it.","parameters":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.create","description":"Create a new project. Returns the project payload with its dock of default tools attached.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"message_board.messages.list","description":"List messages on a project message board. `messageBoardId` is the id of the message_board tool from projects.get.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"messageBoardId":{"type":"string"}},"required":["projectId","messageBoardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"message_board.messages.get","description":"Read a single message-board post by id.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"messageId":{"type":"string"}},"required":["projectId","messageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"message_board.messages.create","description":"Post a new active message to a project message board. `content` is HTML (Basecamp's rich-text format); `subject` is plain text. Published immediately (status=\"active\").","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"messageBoardId":{"type":"string"},"subject":{"type":"string"},"content":{"type":"string","description":"HTML body. Basecamp strips disallowed tags server-side."}},"required":["projectId","messageBoardId","subject","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"todoset.get","description":"Read the project's todoset (the container that holds all to-do lists). `todosetId` is the id of the todoset tool from projects.get.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"todosetId":{"type":"string"}},"required":["projectId","todosetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"todolists.list","description":"List to-do lists inside a todoset.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"todosetId":{"type":"string"},"status":{"type":"string","enum":["archived","trashed"]}},"required":["projectId","todosetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"todolists.create","description":"Create a new to-do list inside a todoset. `name` and `description` are both required body fields here; Basecamp accepts an empty `description` if the list has none.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"todosetId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string","description":"Plain text; pass an empty string if none."}},"required":["projectId","todosetId","name","description"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"todos.list","description":"List to-dos inside a single to-do list. Use `status=archived|trashed|completed` to slice.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"todolistId":{"type":"string"},"status":{"type":"string","enum":["archived","trashed"]},"completed":{"type":"boolean"}},"required":["projectId","todolistId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"todos.get","description":"Read a single to-do by id, including assignees, due date, and completion state.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"todoId":{"type":"string"}},"required":["projectId","todoId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"todos.create","description":"Create a to-do inside a to-do list. Body fields follow Basecamp's wire format verbatim: `content` (required), `description` (HTML), `assignee_ids` / `notify_ids` / `completion_subscriber_ids` (arrays of person ids), `due_on` and `starts_on` (ISO YYYY-MM-DD). Path-only args (`projectId`, `todolistId`) are scrubbed by Basecamp server-side.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"todolistId":{"type":"string"},"content":{"type":"string"},"description":{"type":"string"},"assignee_ids":{"type":"array","items":{"type":"integer"}},"notify_ids":{"type":"array","items":{"type":"integer"}},"completion_subscriber_ids":{"type":"array","items":{"type":"integer"}},"due_on":{"type":"string","description":"ISO date YYYY-MM-DD."},"starts_on":{"type":"string","description":"ISO date YYYY-MM-DD."}},"required":["projectId","todolistId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"todos.update","description":"Edit an existing to-do. Wire field names match Basecamp directly (`content`, `description`, `assignee_ids`, `notify_ids`, `due_on`, `starts_on`). Omitted fields are left untouched server-side.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"todoId":{"type":"string"},"content":{"type":"string"},"description":{"type":"string"},"assignee_ids":{"type":"array","items":{"type":"integer"}},"notify_ids":{"type":"array","items":{"type":"integer"}},"due_on":{"type":"string"},"starts_on":{"type":"string"}},"required":["projectId","todoId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"todos.complete","description":"Mark a to-do completed. Idempotent on Basecamp's side — re-POSTing on an already-completed to-do is a no-op 204.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"todoId":{"type":"string"}},"required":["projectId","todoId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"todos.uncomplete","description":"Reopen a previously completed to-do.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"todoId":{"type":"string"}},"required":["projectId","todoId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.list","description":"List comments attached to a recording (to-do, message, document, upload — any commentable resource).","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"recordingId":{"type":"string","description":"Id of the parent recording (to-do, message, etc.)."}},"required":["projectId","recordingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"comments.create","description":"Post a comment on any commentable recording. `content` is HTML.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"recordingId":{"type":"string"},"content":{"type":"string","description":"HTML body."}},"required":["projectId","recordingId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campfire.lines.list","description":"List recent lines (messages) in a project's campfire (group chat). `campfireId` is the id of the chat tool from projects.get.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"campfireId":{"type":"string"}},"required":["projectId","campfireId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campfire.lines.create","description":"Post a single line to a project's campfire chat. `content` is HTML.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"campfireId":{"type":"string"},"content":{"type":"string","description":"HTML body."}},"required":["projectId","campfireId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"people.list","description":"List people on the account. Use this to resolve assignee ids for to-do creation.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"people.get","description":"Read a single person on the account.","parameters":{"type":"object","properties":{"personId":{"type":"string"}},"required":["personId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"baserow","displayName":"Baserow","description":"List tables and fields, and create, read, update, move, or delete Baserow rows.","auth":{"kind":"api-key","hint":"Baserow database token. Grant only the tables and create/read/update/delete permissions this connection needs."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tables.list","description":"List every table the database token can access and its granted permissions.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"fields.list","description":"List field definitions for a table.","parameters":{"type":"object","properties":{"tableId":{"type":"integer","description":"Baserow table id."}},"required":["tableId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"fields.create","description":"Create a field using a provider-native field definition.","parameters":{"type":"object","properties":{"tableId":{"type":"integer","description":"Baserow table id."},"field":{"type":"object","description":"Field definition containing at least name and type."}},"required":["tableId","field"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"rows.list","description":"List, search, filter, and order rows using human-readable field names.","parameters":{"type":"object","properties":{"tableId":{"type":"integer","description":"Baserow table id."},"page":{"type":"integer","minimum":1},"size":{"type":"integer","minimum":1,"maximum":200},"search":{"type":"string"},"orderBy":{"type":"string","description":"Comma-separated field names, prefixed with - for descending."},"filters":{"type":"string","description":"JSON-serialized Baserow filter tree."},"filterType":{"type":"string","enum":["AND","OR"]},"include":{"type":"string","description":"Comma-separated field names to include."},"exclude":{"type":"string","description":"Comma-separated field names to exclude."},"viewId":{"type":"integer"}},"required":["tableId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rows.get","description":"Read one row using human-readable field names.","parameters":{"type":"object","properties":{"tableId":{"type":"integer","description":"Baserow table id."},"rowId":{"type":"integer","description":"Baserow row id."}},"required":["tableId","rowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rows.create","description":"Create one row using human-readable field names.","parameters":{"type":"object","properties":{"tableId":{"type":"integer","description":"Baserow table id."},"fields":{"type":"object","description":"Field-name to value map."},"beforeRowId":{"type":"integer"},"sendWebhookEvents":{"type":"boolean"}},"required":["tableId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"rows.update","description":"Update one row using human-readable field names.","parameters":{"type":"object","properties":{"tableId":{"type":"integer","description":"Baserow table id."},"rowId":{"type":"integer","description":"Baserow row id."},"fields":{"type":"object","description":"Field-name to value map."},"sendWebhookEvents":{"type":"boolean"}},"required":["tableId","rowId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"rows.delete","description":"Delete one row.","parameters":{"type":"object","properties":{"tableId":{"type":"integer","description":"Baserow table id."},"rowId":{"type":"integer","description":"Baserow row id."},"sendWebhookEvents":{"type":"boolean"}},"required":["tableId","rowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"rows.batch-create","description":"Create up to 200 rows in one request.","parameters":{"type":"object","properties":{"tableId":{"type":"integer","description":"Baserow table id."},"items":{"type":"array","minItems":1,"maxItems":200,"items":{"type":"object"}},"beforeRowId":{"type":"integer"},"sendWebhookEvents":{"type":"boolean"}},"required":["tableId","items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"rows.batch-update","description":"Update up to 200 rows; each item must include its id.","parameters":{"type":"object","properties":{"tableId":{"type":"integer","description":"Baserow table id."},"items":{"type":"array","minItems":1,"maxItems":200,"items":{"type":"object"}},"sendWebhookEvents":{"type":"boolean"}},"required":["tableId","items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"rows.batch-delete","description":"Delete multiple rows by id.","parameters":{"type":"object","properties":{"tableId":{"type":"integer","description":"Baserow table id."},"rowIds":{"type":"array","minItems":1,"items":{"type":"integer"}},"sendWebhookEvents":{"type":"boolean"}},"required":["tableId","rowIds"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"rows.move","description":"Move a row before another row, or to the end when beforeRowId is omitted.","parameters":{"type":"object","properties":{"tableId":{"type":"integer","description":"Baserow table id."},"rowId":{"type":"integer","description":"Baserow row id."},"beforeRowId":{"type":"integer"},"sendWebhookEvents":{"type":"boolean"}},"required":["tableId","rowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"beamer","displayName":"Beamer","description":"Publish announcement posts, raise and vote on feature requests, and comment on feedback in a Beamer workspace.","auth":{"kind":"api-key","hint":"Beamer workspace REST API key. Generate one from Beamer dashboard → Settings → REST API."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"posts.query","description":"List announcement posts in the workspace, newest first.","parameters":{"type":"object","properties":{"maxResults":{"type":"integer","description":"Max number of posts (Beamer caps at 100)."},"cursor":{"type":"string","description":"Pagination cursor returned by a previous call."},"filter":{"type":"string","description":"Optional category / status filter expression."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"posts.get","description":"Read a single announcement post by id.","parameters":{"type":"object","properties":{"postId":{"type":"string"}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"featureRequests.query","description":"List feature requests on the workspace feedback board.","parameters":{"type":"object","properties":{"maxResults":{"type":"integer"},"cursor":{"type":"string"},"status":{"type":"string","description":"Filter by status id (open, planned, in-progress, done, …)."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"featureRequests.get","description":"Read a single feature request by id.","parameters":{"type":"object","properties":{"featureRequestId":{"type":"string"}},"required":["featureRequestId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"comments.create","description":"Post a comment on a feature request. Activepieces action: createComment. Either userId or userEmail identifies the author.","parameters":{"type":"object","properties":{"featureRequestId":{"type":"string","description":"Id of the feature request to comment on."},"text":{"type":"string","description":"Comment body."},"userId":{"type":"string","description":"Beamer user id of the author."},"userEmail":{"type":"string","description":"Email of the author if userId is not known."},"userFirstname":{"type":"string","description":"Optional display first name."}},"required":["featureRequestId","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"featureRequests.create","description":"Create a new feature request on the Beamer feedback board. Activepieces action: createNewFeatureRequest.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"Feature-request title."},"content":{"type":"string","description":"Long-form description / body."},"category":{"type":"string","description":"Category id for the request."},"status":{"type":"string","description":"Status id (open, planned, …)."},"requestedby":{"type":"string","description":"Email of the user requesting the feature."},"userFirstname":{"type":"string"}},"required":["title","content","requestedby"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.create","description":"Publish an announcement post in the Beamer workspace. Activepieces action: createBeamerPost.","parameters":{"type":"object","properties":{"title":{"type":"string"},"content":{"type":"string","description":"Post body — plain text or markdown depending on md flag."},"md":{"type":"boolean","description":"true if content is markdown, false if plain text."},"category":{"type":"string"},"visible":{"type":"string","description":"public | private | scheduled"},"showInWidget":{"type":"boolean"},"showInStandalone":{"type":"boolean"},"enableFeedback":{"type":"boolean"},"enableReactions":{"type":"boolean"},"enableSocialShare":{"type":"boolean"},"autoOpen":{"type":"boolean"},"sendPushNotification":{"type":"boolean"}},"required":["title","content","category","visible"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"votes.create","description":"Cast a vote on a feature request. Activepieces action: createVote. Vote attribution requires userId or userEmail.","parameters":{"type":"object","properties":{"featureRequestId":{"type":"string","description":"Id of the feature request being voted on."},"userId":{"type":"string"},"userEmail":{"type":"string"},"userFirstname":{"type":"string"}},"required":["featureRequestId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.update","description":"Edit a published announcement post. Pass only the fields you wish to change; omitted fields are left untouched.","parameters":{"type":"object","properties":{"postId":{"type":"string","description":"Id of the post to update."},"title":{"type":"string"},"content":{"type":"string"},"md":{"type":"boolean"},"category":{"type":"string"},"visible":{"type":"string","description":"public | private | scheduled"},"showInWidget":{"type":"boolean"},"showInStandalone":{"type":"boolean"},"enableFeedback":{"type":"boolean"},"enableReactions":{"type":"boolean"},"enableSocialShare":{"type":"boolean"},"autoOpen":{"type":"boolean"}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.delete","description":"Delete an announcement post.","parameters":{"type":"object","properties":{"postId":{"type":"string","description":"Id of the post to delete."}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.delete","description":"Delete a comment on a feature request.","parameters":{"type":"object","properties":{"featureRequestId":{"type":"string","description":"Id of the feature request."},"commentId":{"type":"string","description":"Id of the comment to delete."}},"required":["featureRequestId","commentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"featureRequests.update","description":"Update an existing feature request (title, content, category, status). Pass only the fields you wish to change.","parameters":{"type":"object","properties":{"featureRequestId":{"type":"string","description":"Id of the feature request to update."},"title":{"type":"string"},"content":{"type":"string"},"category":{"type":"string"},"status":{"type":"string"}},"required":["featureRequestId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"beehiiv","displayName":"Beehiiv","description":"Manage subscriptions, automations, and posts in Beehiiv.","auth":{"kind":"api-key","hint":"Beehiiv API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"subscriptions.create","description":"Create a subscription in Beehiiv.","parameters":{"type":"object","properties":{"publication_id":{"type":"string"},"email":{"type":"string"},"double_opt_override":{"type":"boolean"},"reactivate_existing":{"type":"boolean"},"send_welcome_email":{"type":"boolean"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"referring_site":{"type":"string"},"referral_code":{"type":"string"},"tier":{"type":"string"},"stripe_customer_id":{"type":"string"}},"required":["publication_id","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.update","description":"Update a subscription in Beehiiv.","parameters":{"type":"object","properties":{"subscription_id":{"type":"string"},"email":{"type":"string"},"tier":{"type":"string"},"unsubscribe":{"type":"boolean"},"stripe_customer_id":{"type":"string"}},"required":["subscription_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"automations.list","description":"List automations in a publication.","parameters":{"type":"object","properties":{"publication_id":{"type":"string"},"limit":{"type":"integer"},"page":{"type":"integer"},"expand":{"type":"string"}},"required":["publication_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.add.to.automation","description":"Add a subscription to an automation.","parameters":{"type":"object","properties":{"automation_id":{"type":"string"},"subscription_id":{"type":"string"}},"required":["automation_id","subscription_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.list","description":"List posts in a publication.","parameters":{"type":"object","properties":{"publication_id":{"type":"string"},"platform":{"type":"string"},"status":{"type":"string"},"limit":{"type":"integer"},"page":{"type":"integer"},"content_tags":{"type":"object"}},"required":["publication_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.delete","description":"Unsubscribe and remove a subscriber from a publication. Hard-deletes the subscription record.","parameters":{"type":"object","properties":{"publication_id":{"type":"string"},"subscription_id":{"type":"string"}},"required":["publication_id","subscription_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.create","description":"Draft a new post in a Beehiiv publication.","parameters":{"type":"object","properties":{"publication_id":{"type":"string"},"title":{"type":"string"},"subtitle":{"type":"string"},"body_content":{"type":"string","description":"HTML or markdown body, depending on publication configuration."},"status":{"type":"string","description":"draft | scheduled | confirmed (default: draft)."},"audience":{"type":"string","description":"free | premium | all"},"platform":{"type":"string","description":"web | email | both"}},"required":["publication_id","title","body_content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.publish","description":"Publish a previously drafted Beehiiv post.","parameters":{"type":"object","properties":{"publication_id":{"type":"string"},"post_id":{"type":"string"}},"required":["publication_id","post_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"segments.create","description":"Create a subscriber segment under a publication.","parameters":{"type":"object","properties":{"publication_id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","description":"dynamic | static — controls whether the segment is recomputed."},"filters":{"type":"object","description":"Beehiiv segment filter expression."}},"required":["publication_id","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"bettercontact","displayName":"BetterContact","description":"Waterfall email and phone enrichment that queries 20+ data providers to find a contact's work email and direct phone number.","auth":{"kind":"api-key","hint":"API key from the BetterContact dashboard (Settings -> API). Sent as the X-API-Key header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"enrichment.create","description":"Start an asynchronous waterfall enrichment for 1-100 contacts to find work emails and/or direct phone numbers. Consumes credits per found data point.","parameters":{"type":"object","properties":{"data":{"type":"array","description":"Array of 1-100 lead objects to enrich; each supports first_name, last_name, company, company_domain, linkedin_url, and custom_fields.","items":{"type":"object"}},"enrich_email_address":{"type":"boolean","description":"If true, enrich the work email address."},"enrich_phone_number":{"type":"boolean","description":"If true, enrich the direct phone number."},"webhook":{"type":"string","description":"Optional URL to which results are pushed when enrichment completes."}},"required":["data","enrich_email_address","enrich_phone_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"enrichment.get","description":"Retrieve the status and enriched results of a previously submitted enrichment request by its request id.","parameters":{"type":"object","properties":{"request_id":{"type":"string","description":"The id returned by enrichment.create."}},"required":["request_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"bettermode","displayName":"Bettermode","description":"Assign or revoke member badges and create discussions or questions in a Bettermode community.","auth":{"kind":"api-key","hint":"Bettermode member access token (Bearer)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"badge.assign","description":"Assign a badge to a member identified by email.","parameters":{"type":"object","properties":{"badgeId":{"type":"string"},"email":{"type":"string"}},"required":["badgeId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"badge.revoke","description":"Revoke a previously assigned badge from a member.","parameters":{"type":"object","properties":{"badgeId":{"type":"string"},"email":{"type":"string"}},"required":["badgeId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"discussion.create","description":"Create a discussion post in a Bettermode space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"title":{"type":"string"},"content":{"type":"string"},"tagNames":{"type":"array","items":{"type":"string"}},"locked":{"type":"boolean"}},"required":["spaceId","title","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"question.create","description":"Create a question post in a Bettermode space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"title":{"type":"string"},"content":{"type":"string"},"tagNames":{"type":"array","items":{"type":"string"}},"locked":{"type":"boolean"}},"required":["spaceId","title","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"discussion.update","description":"Edit an existing discussion post (title and/or content).","parameters":{"type":"object","properties":{"postId":{"type":"string","description":"Bettermode post id to update."},"title":{"type":"string"},"content":{"type":"string"}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"discussion.delete","description":"Delete a discussion post.","parameters":{"type":"object","properties":{"postId":{"type":"string","description":"Bettermode post id to delete."}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"member.invite","description":"Invite a new community member by email.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email of the member to invite."},"roleId":{"type":"string","description":"Role to assign on accept (optional)."},"spaceIds":{"type":"array","items":{"type":"string"},"description":"Spaces the invited member should be added to (optional)."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"reply.create","description":"Post a reply to a discussion or question post.","parameters":{"type":"object","properties":{"postId":{"type":"string","description":"Id of the parent discussion/question being replied to."},"content":{"type":"string","description":"Reply body."}},"required":["postId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"bexio","displayName":"Bexio","description":"Swiss business software for accounting, invoicing, contacts, products, projects, and time tracking.","auth":{"kind":"oauth2","authorizationUrl":"https://idp.bexio.com/authorize","tokenUrl":"https://idp.bexio.com/token","scopes":["openid","profile","offline_access","accounting","contact_show","contact_edit","article_show","article_edit","kb_invoice_show","kb_invoice_edit","kb_order_show","kb_order_edit","kb_offer_show","kb_offer_edit","project_show","project_edit","monitoring_show","monitoring_edit","file_show","file_edit"],"clientIdEnv":"BEXIO_OAUTH_CLIENT_ID","clientSecretEnv":"BEXIO_OAUTH_CLIENT_SECRET"},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.manual.entry","description":"Post a manual accounting entry (journal voucher) with one or more debit/credit lines.","parameters":{"type":"object","properties":{"type":{"type":"string","description":"Entry type, e.g. \"manual_single_entry\"."},"date":{"type":"string","description":"ISO-8601 booking date."},"reference_nr":{"type":"string"},"entries":{"type":"array","description":"Array of voucher lines (debit_account_id, credit_account_id, amount, tax_id, description, currency_id).","items":{"type":"object"}}},"required":["type","date","entries"]},"requiredScopes":["accounting"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.company","description":"Create a company contact (contact_type_id=2).","parameters":{"type":"object","properties":{"name_1":{"type":"string","description":"Company name."},"name_2":{"type":"string"},"address":{"type":"string"},"postcode":{"type":"string"},"city":{"type":"string"},"country_id":{"type":"integer"},"mail":{"type":"string"},"phone_fixed":{"type":"string"},"user_id":{"type":"integer"},"owner_id":{"type":"integer"}},"required":["name_1","user_id","owner_id"]},"requiredScopes":["contact_edit"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.company","description":"Partially update a company contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"integer"},"patch":{"type":"object","description":"Subset of contact fields to overwrite."}},"required":["contactId","patch"]},"requiredScopes":["contact_edit"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.person","description":"Create a person contact (contact_type_id=1).","parameters":{"type":"object","properties":{"name_1":{"type":"string","description":"Last name."},"name_2":{"type":"string","description":"First name."},"salutation_id":{"type":"integer"},"mail":{"type":"string"},"phone_fixed":{"type":"string"},"phone_mobile":{"type":"string"},"address":{"type":"string"},"postcode":{"type":"string"},"city":{"type":"string"},"country_id":{"type":"integer"},"contact_group_ids":{"type":"string"},"user_id":{"type":"integer"},"owner_id":{"type":"integer"}},"required":["name_1","user_id","owner_id"]},"requiredScopes":["contact_edit"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.person","description":"Partially update a person contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"integer"},"patch":{"type":"object"}},"required":["contactId","patch"]},"requiredScopes":["contact_edit"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.file","description":"Upload a file to the Bexio file store. Body should be a multipart payload reference.","parameters":{"type":"object","properties":{"file":{"type":"object","description":"Multipart file payload (name, content)."}},"required":["file"]},"requiredScopes":["file_edit"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.sales.invoice","description":"Create a sales invoice (kb_invoice) with one or more positions.","parameters":{"type":"object","properties":{"contact_id":{"type":"integer"},"user_id":{"type":"integer"},"logopaper_id":{"type":"integer"},"language_id":{"type":"integer"},"bank_account_id":{"type":"integer"},"currency_id":{"type":"integer"},"payment_type_id":{"type":"integer"},"header":{"type":"string"},"footer":{"type":"string"},"mwst_type":{"type":"integer"},"mwst_is_net":{"type":"boolean"},"positions":{"type":"array","items":{"type":"object"}}},"required":["contact_id","user_id","positions"]},"requiredScopes":["kb_invoice_edit"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"export.invoice.pdf","description":"Render a sales invoice as PDF.","parameters":{"type":"object","properties":{"invoiceId":{"type":"integer"}},"required":["invoiceId"]},"requiredScopes":["kb_invoice_show"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"send.sales.invoice","description":"Send a sales invoice by email.","parameters":{"type":"object","properties":{"invoiceId":{"type":"integer"},"recipient_email":{"type":"string"},"subject":{"type":"string"},"message":{"type":"string"},"mark_as_open":{"type":"boolean"},"attach_pdf":{"type":"boolean"}},"required":["invoiceId","recipient_email"]},"requiredScopes":["kb_invoice_edit"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.product","description":"Create an article (product) in Bexio.","parameters":{"type":"object","properties":{"intern_name":{"type":"string"},"intern_code":{"type":"string"},"intern_description":{"type":"string"},"purchase_price":{"type":"string"},"sale_price":{"type":"string"},"purchase_total":{"type":"string"},"sale_total":{"type":"string"},"currency_id":{"type":"integer"},"tax_income_id":{"type":"integer"},"tax_id":{"type":"integer"},"tax_consideration":{"type":"boolean"},"user_id":{"type":"integer"},"article_type_id":{"type":"integer"}},"required":["intern_name","user_id"]},"requiredScopes":["article_edit"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.product","description":"Partially update an article by id.","parameters":{"type":"object","properties":{"articleId":{"type":"integer"},"patch":{"type":"object"}},"required":["articleId","patch"]},"requiredScopes":["article_edit"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.sales.order","description":"Create a sales order (kb_order).","parameters":{"type":"object","properties":{"contact_id":{"type":"integer"},"user_id":{"type":"integer"},"logopaper_id":{"type":"integer"},"language_id":{"type":"integer"},"currency_id":{"type":"integer"},"header":{"type":"string"},"footer":{"type":"string"},"mwst_type":{"type":"integer"},"mwst_is_net":{"type":"boolean"},"positions":{"type":"array","items":{"type":"object"}}},"required":["contact_id","user_id","positions"]},"requiredScopes":["kb_order_edit"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.project","description":"Create a project.","parameters":{"type":"object","properties":{"name":{"type":"string"},"contact_id":{"type":"integer"},"user_id":{"type":"integer"},"pr_state_id":{"type":"integer"},"pr_project_type_id":{"type":"integer"},"pr_invoice_type_id":{"type":"integer"},"start_date":{"type":"string"},"end_date":{"type":"string"},"comment":{"type":"string"}},"required":["name","user_id"]},"requiredScopes":["project_edit"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.sales.quote","description":"Create a sales quote / offer (kb_offer).","parameters":{"type":"object","properties":{"contact_id":{"type":"integer"},"user_id":{"type":"integer"},"logopaper_id":{"type":"integer"},"language_id":{"type":"integer"},"currency_id":{"type":"integer"},"header":{"type":"string"},"footer":{"type":"string"},"mwst_type":{"type":"integer"},"mwst_is_net":{"type":"boolean"},"positions":{"type":"array","items":{"type":"object"}}},"required":["contact_id","user_id","positions"]},"requiredScopes":["kb_offer_edit"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.time.tracking","description":"Create a timesheet entry.","parameters":{"type":"object","properties":{"user_id":{"type":"integer"},"status_id":{"type":"integer"},"client_service_id":{"type":"integer"},"contact_id":{"type":"integer"},"pr_project_id":{"type":"integer"},"text":{"type":"string"},"allowable_bill":{"type":"boolean"},"tracking":{"type":"object","description":"Tracking range or duration (type=duration|range with date/duration or date_start/date_end)."}},"required":["user_id","tracking"]},"requiredScopes":["monitoring_edit"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"find.account","description":"List ledger accounts; supports server-side search via the search payload.","parameters":{"type":"object","properties":{"search":{"type":"array","items":{"type":"object"},"description":"Bexio search expressions on field/value/criteria."},"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":["accounting"],"class":"read"},{"name":"find.company","description":"Search contacts filtered to companies (contact_type_id=2).","parameters":{"type":"object","properties":{"search":{"type":"array","items":{"type":"object"}},"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":["contact_show"],"class":"read"},{"name":"find.person","description":"Search contacts filtered to persons (contact_type_id=1).","parameters":{"type":"object","properties":{"search":{"type":"array","items":{"type":"object"}},"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":["contact_show"],"class":"read"},{"name":"find.product","description":"Search articles (products) by intern_code, intern_name, or other fields.","parameters":{"type":"object","properties":{"search":{"type":"array","items":{"type":"object"}},"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":["article_show"],"class":"read"},{"name":"find.country","description":"List or search countries by name or ISO code.","parameters":{"type":"object","properties":{"search":{"type":"array","items":{"type":"object"}},"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.invoice","description":"Search sales invoices (kb_invoice) by document_nr, title, contact_id, etc.","parameters":{"type":"object","properties":{"search":{"type":"array","items":{"type":"object"}},"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":["kb_invoice_show"],"class":"read"},{"name":"search.order","description":"Search sales orders (kb_order).","parameters":{"type":"object","properties":{"search":{"type":"array","items":{"type":"object"}},"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":["kb_order_show"],"class":"read"},{"name":"search.quote","description":"Search sales quotes / offers (kb_offer).","parameters":{"type":"object","properties":{"search":{"type":"array","items":{"type":"object"}},"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":["kb_offer_show"],"class":"read"}]},{"kind":"bigcommerce","displayName":"BigCommerce","description":"Search and update BigCommerce catalog products and orders for a connected storefront.","auth":{"kind":"oauth2","authorizationUrl":"https://login.bigcommerce.com/oauth2/authorize","tokenUrl":"https://login.bigcommerce.com/oauth2/token","scopes":["store_v2_products","store_v2_orders","store_v2_customers_read_only","store_v2_information_read_only"],"clientIdEnv":"BIGCOMMERCE_OAUTH_CLIENT_ID","clientSecretEnv":"BIGCOMMERCE_OAUTH_CLIENT_SECRET"},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"products.search","description":"Search catalog products with optional name/SKU/category filters and pagination.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Partial product name match (uses BigCommerce :like)."},"sku":{"type":"string"},"categories":{"type":"string","description":"Comma-separated category ids (maps to BigCommerce categories:in)."},"is_visible":{"type":"boolean"},"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1,"maximum":250},"include":{"type":"string","description":"Comma-separated sub-resources, e.g. variants,images."}}},"requiredScopes":["store_v2_products"],"class":"read"},{"name":"products.get","description":"Read a single catalog product by id.","parameters":{"type":"object","properties":{"productId":{"type":"integer"},"include":{"type":"string","description":"Comma-separated sub-resources, e.g. variants,images,custom_fields."}},"required":["productId"]},"requiredScopes":["store_v2_products"],"class":"read"},{"name":"products.create","description":"Create a catalog product. Required fields: name, type, weight, price.","parameters":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["physical","digital"]},"weight":{"type":"number"},"price":{"type":"number"},"sku":{"type":"string"},"description":{"type":"string"},"categories":{"type":"array","items":{"type":"integer"}},"inventory_level":{"type":"integer"},"is_visible":{"type":"boolean"}},"required":["name","type","weight","price"]},"requiredScopes":["store_v2_products"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.update","description":"Patch a catalog product. Only the supplied fields are updated.","parameters":{"type":"object","properties":{"productId":{"type":"integer"},"fields":{"type":"object","description":"Partial product payload to merge."}},"required":["productId","fields"]},"requiredScopes":["store_v2_products"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.search","description":"List orders with optional status / date / customer filters.","parameters":{"type":"object","properties":{"status_id":{"type":"integer","description":"BigCommerce order status id (e.g. 11 Awaiting Fulfillment)."},"customer_id":{"type":"integer"},"min_date_created":{"type":"string","description":"RFC 2822 date string."},"max_date_created":{"type":"string","description":"RFC 2822 date string."},"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1,"maximum":250}}},"requiredScopes":["store_v2_orders"],"class":"read"},{"name":"orders.get","description":"Read a single order by id.","parameters":{"type":"object","properties":{"orderId":{"type":"integer"}},"required":["orderId"]},"requiredScopes":["store_v2_orders"],"class":"read"},{"name":"orders.update","description":"Update an existing order (status, staff notes, etc.).","parameters":{"type":"object","properties":{"orderId":{"type":"integer"},"fields":{"type":"object","description":"Partial order payload, e.g. { status_id: 10, staff_notes: \"...\" }."}},"required":["orderId","fields"]},"requiredScopes":["store_v2_orders"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.refund","description":"Issue a refund on an order via Payment Actions.","parameters":{"type":"object","properties":{"orderId":{"type":"integer"},"items":{"type":"array","description":"Refund line items: [{ item_id, item_type, quantity, amount?, reason? }, ...].","items":{"type":"object"}},"memo":{"type":"string","description":"Internal memo attached to the refund."}},"required":["orderId","items","memo"]},"requiredScopes":["store_v2_orders"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.delete","description":"Delete a catalog product by id.","parameters":{"type":"object","properties":{"productId":{"type":"integer"}},"required":["productId"]},"requiredScopes":["store_v2_products"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.create","description":"Create one or more customer records (BigCommerce v3 batches single creates as an array).","parameters":{"type":"object","properties":{"customers":{"type":"array","description":"Array of customer payloads; each at minimum requires email + first_name + last_name.","items":{"type":"object"}}},"required":["customers"]},"requiredScopes":["store_v2_customers_read_only"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.update","description":"Update one or more customer records by id (v3 batched PUT).","parameters":{"type":"object","properties":{"customers":{"type":"array","description":"Array of partial customer payloads; each entry MUST include the customer id.","items":{"type":"object"}}},"required":["customers"]},"requiredScopes":["store_v2_customers_read_only"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"bigin-by-zoho","displayName":"Bigin by Zoho CRM","description":"Manage Bigin by Zoho CRM: read and write companies, contacts, deals (pipeline records), tasks, calls, events, and search products and users.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.zoho.com/oauth/v2/auth","tokenUrl":"https://accounts.zoho.com/oauth/v2/token","scopes":["ZohoBigin.modules.ALL","ZohoBigin.users.READ","ZohoBigin.settings.READ"],"scopeSeparator":",","clientIdEnv":"BIGIN_BY_ZOHO_OAUTH_CLIENT_ID","clientSecretEnv":"BIGIN_BY_ZOHO_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent"},"tokenMetadata":{"apiDomain":{"field":"api_domain","required":true}}},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.search","description":"Search records in any Bigin module (Pipelines, Accounts, Contacts, Products) by criteria, email, phone, or free-text word.","parameters":{"type":"object","properties":{"module":{"type":"string","description":"Bigin module API name. Common values: Accounts (Companies), Contacts, Tasks, Calls, Events, Pipelines, Products."},"criteria":{"type":"string","description":"Zoho criteria syntax, e.g. (Last_Name:equals:Smith)"},"email":{"type":"string"},"phone":{"type":"string"},"word":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":200}},"required":["module"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"read"},{"name":"users.search","description":"List users in the Bigin org. Filter via the `type` query (e.g. ActiveUsers, AdminUsers, CurrentUser).","parameters":{"type":"object","properties":{"type":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":200}}},"requiredScopes":["ZohoBigin.users.READ"],"class":"read"},{"name":"company.create","description":"Create one or more companies (Accounts module). Batches up to 100 per call.","parameters":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Bigin v2 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["data"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"company.update","description":"Update an existing company by record id.","parameters":{"type":"object","properties":{"recordId":{"type":"string"},"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Bigin v2 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["recordId","data"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contact.create","description":"Create one or more contacts. Batches up to 100 per call.","parameters":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Bigin v2 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["data"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contact.update","description":"Update an existing contact by record id.","parameters":{"type":"object","properties":{"recordId":{"type":"string"},"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Bigin v2 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["recordId","data"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"task.create","description":"Create one or more tasks.","parameters":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Bigin v2 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["data"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"task.update","description":"Update an existing task by record id.","parameters":{"type":"object","properties":{"recordId":{"type":"string"},"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Bigin v2 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["recordId","data"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"call.create","description":"Log one or more calls.","parameters":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Bigin v2 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["data"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"event.create","description":"Create one or more calendar events.","parameters":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Bigin v2 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["data"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"event.update","description":"Update an existing calendar event by record id.","parameters":{"type":"object","properties":{"recordId":{"type":"string"},"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Bigin v2 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["recordId","data"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"pipeline.record.create","description":"Create one or more pipeline records (deals). Bigin maps deals to the Pipelines module.","parameters":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Bigin v2 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["data"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pipeline.record.update","description":"Update an existing pipeline record by record id.","parameters":{"type":"object","properties":{"recordId":{"type":"string"},"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Bigin v2 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["recordId","data"]},"requiredScopes":["ZohoBigin.modules.ALL"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"bika","displayName":"Bika.ai","description":"Interactive spreadsheets with collaboration. Create, find, update, and delete records.","auth":{"kind":"api-key","hint":"Bika API token."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.create","description":"Create a new record in Bika.","parameters":{"type":"object","properties":{"data":{"type":"object"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.find","description":"Find records in Bika with optional filtering and pagination.","parameters":{"type":"object","properties":{"filter":{"type":"string"},"maxRecords":{"type":"integer"},"pageSize":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.get","description":"Get a specific record by ID.","parameters":{"type":"object","properties":{"recordId":{"type":"string"}},"required":["recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.update","description":"Update an existing record.","parameters":{"type":"object","properties":{"recordId":{"type":"string"},"data":{"type":"object"}},"required":["recordId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.delete","description":"Delete a record by ID.","parameters":{"type":"object","properties":{"recordId":{"type":"string"}},"required":["recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.batchCreate","description":"Create multiple records in one call.","parameters":{"type":"object","properties":{"records":{"type":"array","description":"Array of record payloads, each shaped like { fields: { ... } }.","items":{"type":"object"}}},"required":["records"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.batchUpdate","description":"Update multiple records in one call.","parameters":{"type":"object","properties":{"records":{"type":"array","description":"Array of record updates, each shaped like { id, fields: { ... } }.","items":{"type":"object"}}},"required":["records"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tables.create","description":"Create a table in a workspace.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"name":{"type":"string"},"fields":{"type":"array","description":"Initial column / field definitions for the table.","items":{"type":"object"}}},"required":["workspaceId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"bill-com","displayName":"BILL","description":"Read vendors, bills, payments, and chart-of-account records through the BILL API v3.","auth":{"kind":"api-key","hint":"JSON credential bundle: {\"developerKey\":\"...\",\"sessionId\":\"...\"}."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"vendors.list","description":"List vendors.","parameters":{"type":"object","properties":{"max":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bills.list","description":"List accounts-payable bills.","parameters":{"type":"object","properties":{"max":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"payments.list","description":"List payments.","parameters":{"type":"object","properties":{"max":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"chart-of-accounts.list","description":"List chart-of-account records.","parameters":{"type":"object","properties":{"max":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"billplz","displayName":"Billplz","description":"Create and retrieve Billplz bills for Malaysian Ringgit payment collection.","auth":{"kind":"api-key","hint":"Billplz API key from Settings → Account Settings. Used as the HTTP Basic username with an empty password."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.bill","description":"Create a Billplz bill in a collection and (optionally) trigger delivery to the recipient.","parameters":{"type":"object","properties":{"collection_id":{"type":"string","description":"Collection identifier that will own the new bill."},"email":{"type":"string","description":"Recipient email address (required if mobile is omitted)."},"mobile":{"type":"string","description":"Recipient mobile number with country code (required if email is omitted)."},"name":{"type":"string","description":"Name of the bill recipient as displayed on the bill."},"amount":{"type":"integer","description":"Amount in sen (1/100 of a Ringgit). E.g. 200 represents RM 2.00."},"description":{"type":"string","description":"Bill description rendered on the payment page."},"callback_url":{"type":"string","description":"Webhook URL Billplz will POST to on payment state changes."},"due_at":{"type":"string","description":"Due date in YYYY-MM-DD format. Defaults to today when omitted."},"redirect_url":{"type":"string","description":"URL the payer is redirected to after completing payment."},"deliver":{"type":"boolean","description":"If true, Billplz emails/SMSes the bill link to the recipient."},"reference_1_label":{"type":"string","description":"Label for the first custom reference field."},"reference_1":{"type":"string","description":"Value for the first custom reference field."},"reference_2_label":{"type":"string","description":"Label for the second custom reference field."},"reference_2":{"type":"string","description":"Value for the second custom reference field."}},"required":["collection_id","name","amount","description","callback_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.bill","description":"Fetch a Billplz bill by its identifier, including current payment state.","parameters":{"type":"object","properties":{"bill_id":{"type":"string","description":"Billplz bill identifier returned by create.bill."}},"required":["bill_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cancel.bill","description":"Delete (cancel) an unpaid Billplz bill by its identifier. Paid bills cannot be deleted and the upstream will reject the request.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Billplz bill identifier to cancel."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.refund","description":"Refund a paid Billplz bill in full or in part. Amount is in sen (1/100 of a Ringgit) and must not exceed the original paid amount.","parameters":{"type":"object","properties":{"bill_id":{"type":"string","description":"Identifier of the paid bill being refunded."},"amount":{"type":"integer","description":"Refund amount in sen (1/100 of a Ringgit). E.g. 200 represents RM 2.00."},"reason":{"type":"string","description":"Reason recorded on the refund for audit/reporting."}},"required":["bill_id","amount","reason"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"bitly","displayName":"Bitly","description":"URL shortening and link management platform with analytics.","auth":{"kind":"api-key","hint":"Bitly access token (used as Bearer credentials)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"bitlink.get","description":"Get details for a Bitlink.","parameters":{"type":"object","properties":{"bitlink":{"type":"string"}},"required":["bitlink"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bitlink.create","description":"Shorten a long URL into a Bitlink.","parameters":{"type":"object","properties":{"long_url":{"type":"string"},"domain":{"type":"string"},"group_guid":{"type":"string"},"title":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"deeplinks":{"type":"array","items":{"type":"object"}}},"required":["long_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bitlink.update","description":"Update title, tags, archival state, or deeplinks on a Bitlink.","parameters":{"type":"object","properties":{"bitlink":{"type":"string"},"title":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"archived":{"type":"boolean"},"deeplinks":{"type":"array","items":{"type":"object"}}},"required":["bitlink"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"bitlink.archive","description":"Archive a Bitlink (Bitly has no hard delete; archival is the destructive op).","parameters":{"type":"object","properties":{"bitlink":{"type":"string"}},"required":["bitlink"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"qr.create","description":"Create a QR code for a destination URL or existing Bitlink.","parameters":{"type":"object","properties":{"group_guid":{"type":"string"},"destination":{"type":"object"},"render_customizations":{"type":"object"},"title":{"type":"string"},"archived":{"type":"boolean"}},"required":["group_guid","destination"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bitlink.delete","description":"Soft-delete (archive permanently) a Bitlink.","parameters":{"type":"object","properties":{"bitlink":{"type":"string"}},"required":["bitlink"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"group.update","description":"Update group display name.","parameters":{"type":"object","properties":{"group_guid":{"type":"string"},"name":{"type":"string"}},"required":["group_guid","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"qr.delete","description":"Delete a generated QR code.","parameters":{"type":"object","properties":{"qrcode_id":{"type":"string"}},"required":["qrcode_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"bland-ai","displayName":"Bland AI","description":"AI phone calling platform for outbound and conversational voice workflows.","auth":{"kind":"api-key","hint":"Bland AI API key, sent in the Authorization header."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.send","description":"Place an outbound AI phone call. Either a Task or a Pathway ID must be supplied; Pathway overrides Task when both are present.","parameters":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"Destination phone number in E.164 format (e.g. +12223334444), country code required."},"task":{"type":"string","description":"Instructions for the AI agent — what it should say, ask, or accomplish during the call."},"pathwayId":{"type":"string","description":"UUID of a pre-built Pathway from the Bland AI dashboard. Overrides task when present."},"fromNumber":{"type":"string","description":"Optional origin phone number."},"firstSentence":{"type":"string","description":"Exact opening line the agent will say when the call is answered."},"voice":{"type":"string","description":"Bland AI preset voice identifier."},"model":{"type":"string","description":"Bland AI model identifier."},"language":{"type":"string","description":"Language code for transcription and speech (e.g. en, es)."},"maxDuration":{"type":"integer","description":"Maximum call length in minutes; the call ends automatically after this time. Defaults to 30."},"waitForGreeting":{"type":"boolean","description":"When true, the AI waits for the recipient to speak first before responding."},"record":{"type":"boolean","description":"When true, the call is recorded; the recording URL is included in the post-call data."},"transferPhoneNumber":{"type":"string","description":"E.164 phone number to transfer the call to when the AI hands off."},"webhook":{"type":"string","description":"URL that receives a POST request with full call data after the call ends."},"summaryPrompt":{"type":"string","description":"Custom instructions for the post-call summary (max 2000 characters)."}},"required":["phoneNumber"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.get","description":"Fetch the full record for a single call by its Bland AI call ID.","parameters":{"type":"object","properties":{"callId":{"type":"string","description":"The Bland AI call identifier."}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.list","description":"List recent calls, optionally filtered by origin or destination number.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of calls to return."},"fromNumber":{"type":"string","description":"Filter by origin phone number."},"toNumber":{"type":"string","description":"Filter by destination phone number."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.cancel","description":"Cancel a queued outbound call.","parameters":{"type":"object","properties":{"callId":{"type":"string","description":"The Bland AI call identifier."}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.stop","description":"Force-end an in-progress call.","parameters":{"type":"object","properties":{"callId":{"type":"string","description":"The Bland AI call identifier."}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pathways.create","description":"Create a conversational pathway.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Pathway display name."},"description":{"type":"string","description":"Free-form description."},"nodes":{"type":"array","items":{"type":"object"},"description":"Pathway state nodes."},"edges":{"type":"array","items":{"type":"object"},"description":"Transitions between nodes."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"bluesky","displayName":"Bluesky","description":"Read and write to the AT Protocol network (Bluesky and self-hosted PDS instances): create / like / repost posts, search timeline + author feeds, and resolve thread context.","auth":{"kind":"api-key","hint":"Bluesky identifier (handle or email) and app password exchanged for an access JWT via com.atproto.server.createSession on the configured PDS host (default https://bsky.social)."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.post","description":"Create a new post (app.bsky.feed.post record) under the authenticated repo.","parameters":{"type":"object","properties":{"repo":{"type":"string"},"text":{"type":"string"},"createdAt":{"type":"string"},"langs":{"type":"array","items":{"type":"string"}},"reply":{"type":"object"},"embed":{"type":"object"},"facets":{"type":"array","items":{"type":"object"}}},"required":["repo","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"like.post","description":"Like a post by creating an app.bsky.feed.like record pointing at the target post (subject = { uri, cid }).","parameters":{"type":"object","properties":{"repo":{"type":"string"},"subject":{"type":"object","properties":{"uri":{"type":"string"},"cid":{"type":"string"}},"required":["uri","cid"]},"createdAt":{"type":"string"}},"required":["repo","subject"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"repost.post","description":"Repost a post by creating an app.bsky.feed.repost record pointing at the target post (subject = { uri, cid }).","parameters":{"type":"object","properties":{"repo":{"type":"string"},"subject":{"type":"object","properties":{"uri":{"type":"string"},"cid":{"type":"string"}},"required":["uri","cid"]},"createdAt":{"type":"string"}},"required":["repo","subject"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"find.post","description":"Search the public Bluesky post index (app.bsky.feed.searchPosts) by query, with optional author / language / sort / pagination filters.","parameters":{"type":"object","properties":{"q":{"type":"string"},"author":{"type":"string"},"lang":{"type":"string"},"sort":{"type":"string"},"since":{"type":"string"},"until":{"type":"string"},"limit":{"type":"integer"},"cursor":{"type":"string"}},"required":["q"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"find.thread","description":"Resolve full thread context for a post URI (app.bsky.feed.getPostThread), including ancestor / descendant replies up to the requested depth.","parameters":{"type":"object","properties":{"uri":{"type":"string"},"depth":{"type":"integer"},"parentHeight":{"type":"integer"}},"required":["uri"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"author.feed","description":"Read an author's feed (app.bsky.feed.getAuthorFeed) — backs the \"new posts by author\" trigger. Use filter to control replies/reposts inclusion.","parameters":{"type":"object","properties":{"actor":{"type":"string"},"filter":{"type":"string"},"includePins":{"type":"boolean"},"limit":{"type":"integer"},"cursor":{"type":"string"}},"required":["actor"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"timeline.read","description":"Read the authenticated user's home timeline (app.bsky.feed.getTimeline) — backs the \"new timeline posts\" trigger.","parameters":{"type":"object","properties":{"algorithm":{"type":"string"},"limit":{"type":"integer"},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"followers.list","description":"List followers of an actor (app.bsky.graph.getFollowers) — backs the \"new follower on account\" trigger via polling + cursor diff.","parameters":{"type":"object","properties":{"actor":{"type":"string"},"limit":{"type":"integer"},"cursor":{"type":"string"}},"required":["actor"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"post.delete","description":"Delete a post by URI.","parameters":{"type":"object","properties":{"repo":{"type":"string"},"rkey":{"type":"string","description":"Record key extracted from the post AT URI."}},"required":["repo","rkey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"follow.user","description":"Follow a Bluesky account.","parameters":{"type":"object","properties":{"repo":{"type":"string"},"subject":{"type":"string","description":"DID of the actor to follow."},"createdAt":{"type":"string"}},"required":["repo","subject"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"unfollow.user","description":"Unfollow a Bluesky account.","parameters":{"type":"object","properties":{"repo":{"type":"string"},"rkey":{"type":"string","description":"Record key of the follow record to delete."}},"required":["repo","rkey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"mute.user","description":"Mute an account.","parameters":{"type":"object","properties":{"actor":{"type":"string","description":"Handle or DID of the actor to mute."}},"required":["actor"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"bolna","displayName":"Bolna AI","description":"Place outbound AI voice calls with Bolna agents and inspect agent and call execution history.","auth":{"kind":"api-key","hint":"Bolna API key, sent as the Authorization: Bearer <key> header."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"agents.list","description":"List the Bolna agents available to the current API key.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"agents.get","description":"Fetch a single Bolna agent by id.","parameters":{"type":"object","properties":{"agentId":{"type":"string"}},"required":["agentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"executions.list","description":"List recent call executions for a Bolna agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["agentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"executions.get","description":"Fetch the result of a single Bolna call execution.","parameters":{"type":"object","properties":{"executionId":{"type":"string"}},"required":["executionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.cancel","description":"Cancel a queued or scheduled Bolna voice call by execution id.","parameters":{"type":"object","properties":{"executionId":{"type":"string","description":"Bolna call execution id to cancel."}},"required":["executionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"agents.create","description":"Create a new Bolna voice agent definition.","parameters":{"type":"object","properties":{"agent_config":{"type":"object","description":"Bolna agent configuration (prompts, voice, model, etc.)."},"agent_prompts":{"type":"object","description":"Prompt set for the agent (task prompts keyed by task name)."}},"required":["agent_config"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"agents.update","description":"Update an existing Bolna voice agent definition.","parameters":{"type":"object","properties":{"agentId":{"type":"string","description":"Bolna agent id to update."},"agent_config":{"type":"object","description":"Updated agent configuration."},"agent_prompts":{"type":"object","description":"Updated prompt set for the agent."}},"required":["agentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"agents.delete","description":"Delete a Bolna voice agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string","description":"Bolna agent id to delete."}},"required":["agentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.make","description":"Place an outbound AI voice call with a Bolna agent. Maps to the activepieces makePhoneCall action.","parameters":{"type":"object","properties":{"agent_id":{"type":"string","description":"Bolna agent id that will own the call."},"recipient_phone_number":{"type":"string","description":"Recipient phone number in E.164 format (e.g., +10123456789)."},"from_phone_number":{"type":"string","description":"Optional sender phone number in E.164 format."},"scheduled_at":{"type":"string","description":"Optional ISO 8601 timestamp with time zone at which to place the call (e.g., 2025-08-21T10:35:00Z). Leave empty to call immediately."},"user_data":{"type":"object","description":"Dynamic variables injected into the agent prompt."}},"required":["agent_id","recipient_phone_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.batch","description":"Place a batch of outbound AI voice calls for a single Bolna agent.","parameters":{"type":"object","properties":{"agent_id":{"type":"string"},"recipients":{"type":"array","items":{"type":"object","properties":{"recipient_phone_number":{"type":"string"},"user_data":{"type":"object"}},"required":["recipient_phone_number"]}},"from_phone_number":{"type":"string"},"scheduled_at":{"type":"string"}},"required":["agent_id","recipients"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"bonjoro","displayName":"Bonjoro","description":"Send personal video greeting messages to delight customers via Bonjoro.","auth":{"kind":"api-key","hint":"Bonjoro account API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"greets.add","description":"Create a new Bonjoro greet for a customer, optionally tied to an assignee, campaign, or template.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email of the recipient to greet."},"note":{"type":"string","description":"Note to send with the greet."},"first":{"type":"string","description":"Recipient first name."},"last":{"type":"string","description":"Recipient last name."},"assignee":{"type":"string","description":"Assignee user id."},"campaign":{"type":"string","description":"Campaign id to attach the greet to."},"template":{"type":"string","description":"Template id to use for the greet."},"custom":{"type":"object","description":"Custom attributes attached to the greet."}},"required":["email","note"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"greets.update","description":"Update an existing Bonjoro greet (note, assignee, template, custom fields).","parameters":{"type":"object","properties":{"greetId":{"type":"string","description":"Bonjoro greet id to update."},"note":{"type":"string","description":"Updated note for the greet."},"assignee":{"type":"string","description":"Assignee user id."},"template":{"type":"string","description":"Template id to use for the greet."},"campaign":{"type":"string","description":"Campaign id the greet belongs to."},"custom":{"type":"object","description":"Custom attributes attached to the greet."}},"required":["greetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"greets.delete","description":"Delete a Bonjoro greet by id.","parameters":{"type":"object","properties":{"greetId":{"type":"string","description":"Bonjoro greet id to delete."}},"required":["greetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.create","description":"Create a new Bonjoro campaign.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Display name of the campaign."},"assignee":{"type":"string","description":"Default assignee user id for greets in the campaign."},"template":{"type":"string","description":"Default template id for greets in the campaign."},"description":{"type":"string","description":"Optional campaign description."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assignees.list","description":"List Bonjoro account members eligible to be assigned a greet.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.list","description":"List Bonjoro campaigns available on the account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"templates.list","description":"List greet templates available on the Bonjoro account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"bookedin","displayName":"Bookedin","description":"AI agents for lead conversion and appointment booking — manage Bookedin leads.","auth":{"kind":"api-key","hint":"Bookedin API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"leads.list","description":"List or search Bookedin leads with optional filters.","parameters":{"type":"object","properties":{"search":{"type":"string","description":"Search text in name, email, or phone number."},"source":{"type":"string","description":"Filter by lead source."},"handling_status":{"type":"string"},"limit":{"type":"integer"},"skip":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.get","description":"Read a single Bookedin lead by id.","parameters":{"type":"object","properties":{"leadId":{"type":"string"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.stats","description":"Get aggregate Bookedin lead statistics.","parameters":{"type":"object","properties":{"source":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.create","description":"Create a Bookedin lead.","parameters":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"source":{"type":"string"}},"required":["firstName","lastName","email","phone"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update","description":"Update an existing Bookedin lead. Individual fields merge with the optional update_json payload.","parameters":{"type":"object","properties":{"leadId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"handling_status":{"type":"string"},"update_json":{"type":"object","description":"Optional JSON body for complex updates. Merges with individual fields."}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"leads.delete","description":"Delete a Bookedin lead.","parameters":{"type":"object","properties":{"leadId":{"type":"string"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"appointments.create","description":"Book a new Bookedin appointment for a lead or customer.","parameters":{"type":"object","properties":{"leadId":{"type":"string","description":"Optional lead id to attach the appointment to."},"serviceId":{"type":"string","description":"Service or appointment type id."},"staffId":{"type":"string","description":"Staff member to assign to the appointment."},"startTime":{"type":"string","description":"ISO 8601 start time for the appointment."},"endTime":{"type":"string","description":"ISO 8601 end time for the appointment."},"notes":{"type":"string","description":"Optional notes attached to the appointment."}},"required":["serviceId","startTime"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"appointments.cancel","description":"Cancel an existing Bookedin appointment.","parameters":{"type":"object","properties":{"appointmentId":{"type":"string","description":"Bookedin appointment id to cancel."},"reason":{"type":"string","description":"Optional cancellation reason."}},"required":["appointmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"appointments.reschedule","description":"Reschedule an existing Bookedin appointment to a new start/end time.","parameters":{"type":"object","properties":{"appointmentId":{"type":"string","description":"Bookedin appointment id to reschedule."},"startTime":{"type":"string","description":"New ISO 8601 start time."},"endTime":{"type":"string","description":"New ISO 8601 end time."},"staffId":{"type":"string","description":"Optional new staff member id."}},"required":["appointmentId","startTime"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"box","displayName":"Box","description":"Read, write, and search files and folders in a Box Content Cloud account. Standard OAuth2 with rotating refresh tokens; targets the v2.0 REST API at api.box.com.","auth":{"kind":"oauth2","authorizationUrl":"https://account.box.com/api/oauth2/authorize","tokenUrl":"https://api.box.com/oauth2/token","scopes":["root_readonly"],"clientIdEnv":"BOX_OAUTH_CLIENT_ID","clientSecretEnv":"BOX_OAUTH_CLIENT_SECRET"},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.me","description":"Read the currently authenticated Box user (used for connection self-test).","parameters":{"type":"object","properties":{"fields":{"type":"string","description":"Comma-separated subset of user fields to return (e.g. \"id,login,name,enterprise\")."}}},"requiredScopes":["root_readonly"],"class":"read"},{"name":"folders.get","description":"Read folder metadata and the first page of child items. The root folder of every Box account has id \"0\".","parameters":{"type":"object","properties":{"folderId":{"type":"string","description":"Box folder id. Use \"0\" for the account root."},"fields":{"type":"string","description":"Comma-separated subset of folder fields."}},"required":["folderId"]},"requiredScopes":["root_readonly"],"class":"read"},{"name":"folders.items","description":"List the children of a folder with limit/offset pagination. Returns mixed files, folders, and weblinks; inspect each entry's `type` field.","parameters":{"type":"object","properties":{"folderId":{"type":"string","description":"Box folder id; \"0\" is the account root."},"limit":{"type":"integer","minimum":1,"maximum":1000,"default":100},"offset":{"type":"integer","minimum":0,"default":0},"sort":{"type":"string","enum":["id","name","date"],"description":"Sort key; Box defaults to \"name\"."},"direction":{"type":"string","enum":["ASC","DESC"]},"fields":{"type":"string","description":"Comma-separated item fields to return."}},"required":["folderId"]},"requiredScopes":["root_readonly"],"class":"read"},{"name":"folders.create","description":"Create a folder under a parent. Box rejects duplicate (parent_id, name) with 409 conflict; the declarative layer surfaces those as { status: \"conflict\" }.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"New folder name; 1-255 chars, no leading/trailing whitespace."},"parent":{"type":"object","description":"Reference to the destination folder.","properties":{"id":{"type":"string","description":"Parent folder id; \"0\" is the root."}},"required":["id"]}},"required":["name","parent"]},"requiredScopes":["root_readwrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.get","description":"Read file metadata (size, sha1, parent, modified_at, version, etag). Does NOT return the file contents — use the Box download URL flow for that.","parameters":{"type":"object","properties":{"fileId":{"type":"string","description":"Box file id."},"fields":{"type":"string"}},"required":["fileId"]},"requiredScopes":["root_readonly"],"class":"read"},{"name":"files.update","description":"Rename, move (change parent), or restore-from-trash a file. Pass any subset of {name, parent, description, tags, shared_link} as fields. Honors If-Match against the file etag for optimistic concurrency.","parameters":{"type":"object","properties":{"fileId":{"type":"string"},"fields":{"type":"object","description":"Partial file payload; e.g. { \"name\": \"Report-v2.pdf\", \"parent\": { \"id\": \"12345\" } }."}},"required":["fileId","fields"]},"requiredScopes":["root_readwrite"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"files.copy","description":"Server-side copy a file into a destination folder. Optional `name` for renaming on copy; Box 409s on duplicate (parent, name).","parameters":{"type":"object","properties":{"fileId":{"type":"string"},"parent":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"name":{"type":"string"},"version":{"type":"string","description":"Optional file version id to copy from (defaults to current)."}},"required":["fileId","parent"]},"requiredScopes":["root_readwrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.delete","description":"Send a file to trash. Box keeps trashed files for 30 days by default (enterprise-configurable). Honors If-Match against the file etag.","parameters":{"type":"object","properties":{"fileId":{"type":"string"}},"required":["fileId"]},"requiredScopes":["root_readwrite"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"folders.delete","description":"Send a folder to trash. Pass recursive=true to delete a non-empty folder; otherwise Box rejects with 400.","parameters":{"type":"object","properties":{"folderId":{"type":"string"},"recursive":{"type":"boolean","default":false}},"required":["folderId"]},"requiredScopes":["root_readwrite"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"search","description":"Full-text + metadata search across the enterprise. Filters by type (file|folder|web_link), file_extensions, ancestor_folder_ids, content_types, and created_at_range / updated_at_range (ISO-8601, comma-joined).","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search query."},"type":{"type":"string","enum":["file","folder","web_link"]},"file_extensions":{"type":"string","description":"Comma-separated list of extensions WITHOUT dot, e.g. \"pdf,docx\"."},"ancestor_folder_ids":{"type":"string","description":"Comma-separated folder ids to scope the search to."},"content_types":{"type":"string","description":"Comma-separated list of content fields to match, e.g. \"name,description,file_content\"."},"created_at_range":{"type":"string","description":"ISO8601 range \"from,to\"."},"updated_at_range":{"type":"string","description":"ISO8601 range \"from,to\"."},"limit":{"type":"integer","minimum":1,"maximum":200,"default":30},"offset":{"type":"integer","minimum":0,"default":0}},"required":["query"]},"requiredScopes":["root_readonly"],"class":"read"},{"name":"collaborations.create","description":"Share a file or folder with a Box user (by id or login email) at a given role. Box dedupes (item, accessible_by) pairs.","parameters":{"type":"object","properties":{"item":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["file","folder"]}},"required":["id","type"]},"accessible_by":{"type":"object","properties":{"id":{"type":"string","description":"Box user/group id (mutually exclusive with login)."},"login":{"type":"string","description":"Email login of the target user."},"type":{"type":"string","enum":["user","group"]}},"required":["type"]},"role":{"type":"string","enum":["editor","viewer","previewer","uploader","previewer uploader","viewer uploader","co-owner","owner"]}},"required":["item","accessible_by","role"]},"requiredScopes":["root_readwrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"brave-search","displayName":"Brave Search","description":"Query the Brave Search API for privacy-preserving web results.","auth":{"kind":"api-key","hint":"Brave Search subscription token (X-Subscription-Token)."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"brave.web.search","description":"Run a Brave web search query and return result documents.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query string."},"count":{"type":"integer","minimum":1,"maximum":20,"description":"Number of results (1-20)."}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"braze","displayName":"Braze","description":"Track Braze users, trigger campaign/canvas sends, and manage subscription state through the REST API.","auth":{"kind":"api-key","hint":"Braze REST API key from Settings → REST API Keys with the per-endpoint permissions the agent needs (users.track, campaigns.trigger.send, etc.)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.track","description":"Server-side ingest of user attributes, custom events, and purchases (POST /users/track).","parameters":{"type":"object","properties":{"attributes":{"type":"array","description":"User attribute updates keyed by external_id or braze_id.","items":{"type":"object","properties":{"external_id":{"type":"string"},"braze_id":{"type":"string"},"user_alias":{"type":"object","properties":{"alias_name":{"type":"string"},"alias_label":{"type":"string"}},"required":["alias_name","alias_label"]},"_update_existing_only":{"type":"boolean"}},"additionalProperties":true}},"events":{"type":"array","description":"Custom events with name, time (ISO-8601), and optional properties.","items":{"type":"object","properties":{"external_id":{"type":"string"},"braze_id":{"type":"string"},"user_alias":{"type":"object","properties":{"alias_name":{"type":"string"},"alias_label":{"type":"string"}},"required":["alias_name","alias_label"]},"app_id":{"type":"string"},"name":{"type":"string"},"time":{"type":"string"},"properties":{"type":"object"},"_update_existing_only":{"type":"boolean"}},"required":["name","time"]}},"purchases":{"type":"array","description":"Purchase records with product_id, currency, price, time.","items":{"type":"object","properties":{"external_id":{"type":"string"},"braze_id":{"type":"string"},"user_alias":{"type":"object","properties":{"alias_name":{"type":"string"},"alias_label":{"type":"string"}},"required":["alias_name","alias_label"]},"app_id":{"type":"string"},"product_id":{"type":"string"},"currency":{"type":"string"},"price":{"type":"number"},"quantity":{"type":"integer"},"time":{"type":"string"},"properties":{"type":"object"},"_update_existing_only":{"type":"boolean"}},"required":["product_id","currency","price","time"]}}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.identify","description":"Merge a user_alias profile onto an external_id (POST /users/identify).","parameters":{"type":"object","properties":{"aliases_to_identify":{"type":"array","items":{"type":"object","properties":{"external_id":{"type":"string"},"user_alias":{"type":"object","properties":{"alias_name":{"type":"string"},"alias_label":{"type":"string"}},"required":["alias_name","alias_label"]}},"required":["external_id","user_alias"]}},"merge_behavior":{"type":"string","enum":["none","merge"],"description":"How to reconcile attributes when both records exist."}},"required":["aliases_to_identify"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.export.ids","description":"Export user profiles by external_id, user_alias, braze_id, email_address, or phone (POST /users/export/ids).","parameters":{"type":"object","properties":{"external_ids":{"type":"array","items":{"type":"string"}},"user_aliases":{"type":"array","items":{"type":"object","properties":{"alias_name":{"type":"string"},"alias_label":{"type":"string"}},"required":["alias_name","alias_label"]}},"device_id":{"type":"string"},"braze_id":{"type":"string"},"email_address":{"type":"string"},"phone":{"type":"string"},"fields_to_export":{"type":"array","items":{"type":"string"}}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.delete","description":"Delete user profiles by external_id, user_alias, or braze_id (POST /users/delete).","parameters":{"type":"object","properties":{"external_ids":{"type":"array","items":{"type":"string"}},"user_aliases":{"type":"array","items":{"type":"object","properties":{"alias_name":{"type":"string"},"alias_label":{"type":"string"}},"required":["alias_name","alias_label"]}},"braze_ids":{"type":"array","items":{"type":"string"}}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.trigger.send","description":"Fire an API-triggered Braze campaign send (POST /campaigns/trigger/send).","parameters":{"type":"object","properties":{"campaign_id":{"type":"string"},"send_id":{"type":"string","description":"Optional dispatch_id echoed back for tracking; pass a deterministic value to dedupe."},"trigger_properties":{"type":"object"},"broadcast":{"type":"boolean"},"audience":{"type":"object","description":"Connected audience segment filter object."},"recipients":{"type":"array","items":{"type":"object","properties":{"external_user_id":{"type":"string"},"user_alias":{"type":"object","properties":{"alias_name":{"type":"string"},"alias_label":{"type":"string"}},"required":["alias_name","alias_label"]},"trigger_properties":{"type":"object"},"send_to_existing_only":{"type":"boolean"},"attributes":{"type":"object"}}}}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"canvas.trigger.send","description":"Fire an API-triggered Braze Canvas send (POST /canvas/trigger/send).","parameters":{"type":"object","properties":{"canvas_id":{"type":"string"},"canvas_entry_properties":{"type":"object"},"broadcast":{"type":"boolean"},"audience":{"type":"object"},"recipients":{"type":"array","items":{"type":"object","properties":{"external_user_id":{"type":"string"},"user_alias":{"type":"object","properties":{"alias_name":{"type":"string"},"alias_label":{"type":"string"}},"required":["alias_name","alias_label"]},"canvas_entry_properties":{"type":"object"},"send_to_existing_only":{"type":"boolean"},"attributes":{"type":"object"}}}}},"required":["canvas_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscription.status.set","description":"Update subscription state for a list of users on a subscription group (POST /subscription/status/set).","parameters":{"type":"object","properties":{"subscription_group_id":{"type":"string"},"subscription_state":{"type":"string","enum":["subscribed","unsubscribed"]},"external_id":{"description":"External user id (string) or array of external user ids.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"email":{"description":"Email (string) or array of emails.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"phone":{"description":"E.164 phone (string) or array of E.164 phones.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["subscription_group_id","subscription_state"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscription.status.get","description":"Read subscription state for users on a subscription group (GET /subscription/status/get).","parameters":{"type":"object","properties":{"subscription_group_id":{"type":"string"},"external_id":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"}},"required":["subscription_group_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"email.blacklist","description":"Suppress one or more email addresses from future Braze sends (POST /email/blacklist).","parameters":{"type":"object","properties":{"email":{"description":"Email (string) or array of emails to suppress.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.list","description":"List Braze campaigns ordered by last edit time (GET /campaigns/list).","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":0},"include_archived":{"type":"boolean"},"sort_direction":{"type":"string","enum":["asc","desc"]},"last_edit_time_gt":{"type":"string","description":"ISO-8601 lower bound on last_edit.time filter."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"canvas.list","description":"List Braze Canvases ordered by last edit time (GET /canvas/list).","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":0},"include_archived":{"type":"boolean"},"sort_direction":{"type":"string","enum":["asc","desc"]},"last_edit_time_gt":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"brex","displayName":"Brex","description":"Read Brex users, cards, card transactions, vendors, expenses, and payments.","auth":{"kind":"api-key","hint":"Brex OAuth access token or customer-generated user token, stored as a bearer token."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.list","description":"List Brex users.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cards.list","description":"List Brex cards and card status.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"card-transactions.list","description":"List primary card transactions.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"vendors.list","description":"List vendors configured in Brex.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"expenses.list","description":"List card expenses and receipt/memo status.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"payments.list","description":"List outbound payments.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"brightdata","displayName":"Bright Data","description":"Scrape any website at scale using Bright Data's Web Unlocker (bypasses anti-bot protection) and Web Scraper API (structured dataset collection jobs).","auth":{"kind":"api-key","hint":"API token from your Bright Data dashboard (Account settings -> API tokens). Sent as the Authorization: Bearer header."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"unlocker.request","description":"Fetch a target URL through the Web Unlocker, returning the page content with anti-bot bypass, CAPTCHA solving, and JS rendering handled.","parameters":{"type":"object","properties":{"zone":{"type":"string","description":"Your Web Unlocker API zone name."},"url":{"type":"string","description":"Target URL to fetch."},"format":{"type":"string","description":"Response format, e.g. 'raw' for the unmodified site response or 'json'."},"body":{"type":"string","description":"Optional raw POST payload to send to the target URL."}},"required":["zone","url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scraper.trigger","description":"Trigger an asynchronous Web Scraper data collection job for a given dataset, returning a snapshot_id used to poll progress and download results.","parameters":{"type":"object","properties":{"dataset_id":{"type":"string","description":"Scraper dataset id, e.g. gd_xxxxxxxxxxxxxxxxx."},"format":{"type":"string","description":"Delivery format of results, e.g. json."},"include_errors":{"type":"boolean","description":"Include error records in the result set."},"inputs":{"type":"array","description":"Array of input objects, each typically containing a url to scrape.","items":{"type":"object"}}},"required":["dataset_id","inputs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"scraper.progress","description":"Check the status of a Web Scraper collection job (starting, running, ready, or failed) by its snapshot_id.","parameters":{"type":"object","properties":{"snapshot_id":{"type":"string","description":"Snapshot id returned by scraper.trigger."}},"required":["snapshot_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scraper.snapshot","description":"Download the collected records for a completed Web Scraper snapshot in the requested format.","parameters":{"type":"object","properties":{"snapshot_id":{"type":"string","description":"Snapshot id returned by scraper.trigger."},"format":{"type":"string","description":"Output format, e.g. json, ndjson, jsonl, or csv."}},"required":["snapshot_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"brilliant-directories","displayName":"Brilliant Directories","description":"Create users on a Brilliant Directories website instance.","auth":{"kind":"api-key","hint":"Brilliant Directories API key from admin → API Settings; site_url passed as metadata.siteUrl."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.create","description":"Create a new user on the Brilliant Directories site instance.","parameters":{"type":"object","properties":{"email":{"type":"string"},"password":{"type":"string"},"subscription_id":{"type":"string"},"meta":{"type":"object"}},"required":["email","password","subscription_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.update","description":"Update an existing Brilliant Directories member.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"Brilliant Directories user id to update."},"email":{"type":"string"},"subscription_id":{"type":"string"},"meta":{"type":"object"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.delete","description":"Delete a Brilliant Directories member by user id.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"Brilliant Directories user id to delete."}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"listings.create","description":"Create a new listing on the Brilliant Directories site instance.","parameters":{"type":"object","properties":{"user_id":{"type":"string","description":"Owning member user id."},"subscription_id":{"type":"string","description":"Listing subscription/plan id."},"title":{"type":"string","description":"Listing title."},"meta":{"type":"object","description":"Listing custom fields and content."}},"required":["user_id","subscription_id","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"listings.update","description":"Update a listing on the Brilliant Directories site instance.","parameters":{"type":"object","properties":{"listingId":{"type":"string","description":"Brilliant Directories listing id to update."},"title":{"type":"string"},"meta":{"type":"object"}},"required":["listingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"browse-ai","displayName":"Browse AI","description":"Run Browse AI robots, list available robots, and fetch task details from the Browse AI cloud.","auth":{"kind":"api-key","hint":"Browse AI personal API key (Bearer token from the Integrations page)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"get.task.details","description":"Fetch the result and status for a previously queued Browse AI robot task.","parameters":{"type":"object","properties":{"robotId":{"type":"string","description":"Identifier of the robot that owns the task."},"taskId":{"type":"string","description":"Identifier of the task to retrieve."}},"required":["robotId","taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"list.robots","description":"List robots available to the authenticated Browse AI account.","parameters":{"type":"object","properties":{"page":{"type":"integer","description":"Page number for pagination (1-based)."},"pageSize":{"type":"integer","description":"Number of robots per page."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"run.robot","description":"Queue a Browse AI robot task with the supplied input parameters.","parameters":{"type":"object","properties":{"robotId":{"type":"string","description":"Identifier of the robot to run."},"inputParameters":{"type":"object","description":"Input parameter map passed to the robot (origin URL plus robot-specific fields)."},"recordVideo":{"type":"boolean","description":"Record a video of the task while it runs."}},"required":["robotId","inputParameters"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"capturedLists.get","description":"Fetch the captured list (scraped data rows) produced by a Browse AI robot task run.","parameters":{"type":"object","properties":{"robotId":{"type":"string","description":"Identifier of the robot that produced the captured list."},"taskId":{"type":"string","description":"Identifier of the task that produced the captured list."},"capturedListId":{"type":"string","description":"Identifier of the captured list on the task."},"pageSize":{"type":"integer","description":"Number of rows per page."},"pageNumber":{"type":"integer","description":"Page number for pagination (1-based)."}},"required":["robotId","taskId","capturedListId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.list","description":"List robot tasks belonging to the authenticated Browse AI account, optionally filtered by status or date range.","parameters":{"type":"object","properties":{"robotId":{"type":"string","description":"Identifier of the robot whose tasks to list."},"sort":{"type":"string","description":"Sort order for the returned tasks (e.g. \"createdAt\", \"-createdAt\")."},"fromDate":{"type":"string","description":"Lower bound for task creation time (ISO 8601 or epoch ms, per Browse AI contract)."},"toDate":{"type":"string","description":"Upper bound for task creation time (ISO 8601 or epoch ms, per Browse AI contract)."},"status":{"type":"string","description":"Filter tasks by status (e.g. \"successful\", \"failed\", \"in-progress\")."}},"required":["robotId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"builtwith","displayName":"BuiltWith","description":"Look up the technology stack, analytics, hosting, and metadata detected on any website.","auth":{"kind":"api-key","hint":"API key (a UUID) from your BuiltWith account dashboard under My Account -> API Access. Sent as the KEY query parameter."},"category":"market-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"domain.lookup","description":"Return the full set of detected technologies and metadata for one or more root domains.","parameters":{"type":"object","properties":{"lookup":{"type":"string","description":"Root domain to analyze, e.g. stripe.com. Up to 16 domains may be passed as a comma-separated list."}},"required":["lookup"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"domain.free","description":"Free-tier lookup returning the most popular detected technology groups for a single domain.","parameters":{"type":"object","properties":{"lookup":{"type":"string","description":"Root domain to analyze."}},"required":["lookup"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"domain.relationships","description":"Return domains that share relationships (e.g. analytics IDs, ad networks) with the given domain.","parameters":{"type":"object","properties":{"lookup":{"type":"string","description":"Root domain to find related domains for."}},"required":["lookup"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.to_url","description":"Resolve a company name to its most likely website domain.","parameters":{"type":"object","properties":{"company":{"type":"string","description":"Company name to resolve to a domain."}},"required":["company"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"buttondown","displayName":"Buttondown","description":"Automate your Buttondown newsletter workflows.","auth":{"kind":"api-key","hint":"Buttondown API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"subscribers.create","description":"Create a subscriber in Buttondown.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"The email address of the subscriber."},"type":{"type":"string","description":"The subscriber status (e.g., \"regular\", \"unverified\")."},"notes":{"type":"string","description":"Internal notes about the subscriber."},"tags":{"type":"array","items":{"type":"string"},"description":"Tags to assign to the subscriber."},"metadata":{"type":"object","description":"Custom metadata to store on the subscriber."},"referrerUrl":{"type":"string","description":"Referrer URL for the subscriber."},"utmSource":{"type":"string","description":"UTM source parameter."},"utmMedium":{"type":"string","description":"UTM medium parameter."},"utmCampaign":{"type":"string","description":"UTM campaign parameter."},"referringSubscriberId":{"type":"string","description":"ID of the subscriber who referred this contact."},"ipAddress":{"type":"string","description":"The original IP address of the subscriber."},"collisionBehavior":{"type":"string","description":"How to handle duplicate email addresses."},"bypassFirewall":{"type":"boolean","description":"Set to true when the request originates from a trusted internal system."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.list","description":"List subscribers in Buttondown.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of subscribers to return (1-1000)."},"cursor":{"type":"string","description":"Cursor value from a previous response for pagination."},"source":{"type":"string","description":"Filter by subscriber source."},"emailAddress":{"type":"string","description":"Filter subscribers whose email address contains this value."},"ordering":{"type":"string","description":"Field to order results by."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.send_email","description":"Send an email to a subscriber or to all subscribers.","parameters":{"type":"object","properties":{"subject":{"type":"string","description":"Subject line of the email."},"body":{"type":"string","description":"HTML body of the email."},"subscriberId":{"type":"string","description":"Send to a specific subscriber ID (leave empty to send to all)."}},"required":["subject","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.update","description":"Update metadata on an existing Buttondown subscriber.","parameters":{"type":"object","properties":{"subscriberId":{"type":"string","description":"Buttondown subscriber id."},"email":{"type":"string","description":"Updated email address."},"type":{"type":"string","description":"Updated subscriber status."},"notes":{"type":"string","description":"Internal notes about the subscriber."},"tags":{"type":"array","items":{"type":"string"},"description":"Tags to assign to the subscriber."},"metadata":{"type":"object","description":"Custom metadata to store on the subscriber."}},"required":["subscriberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.delete","description":"Unsubscribe and delete a Buttondown subscriber.","parameters":{"type":"object","properties":{"subscriberId":{"type":"string","description":"Buttondown subscriber id to delete."}},"required":["subscriberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"emails.create","description":"Draft a new Buttondown email without sending it.","parameters":{"type":"object","properties":{"subject":{"type":"string","description":"Subject line of the email draft."},"body":{"type":"string","description":"HTML body of the email draft."},"status":{"type":"string","description":"Email status (defaults to \"draft\"). Set to \"about_to_send\" or \"scheduled\" to schedule sending."},"publishDate":{"type":"string","description":"Optional ISO 8601 publish date for scheduled emails."}},"required":["subject","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"emails.send","description":"Send a previously drafted Buttondown email immediately.","parameters":{"type":"object","properties":{"emailId":{"type":"string","description":"Buttondown email/draft id to send."}},"required":["emailId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"cal-com","displayName":"Cal.com","description":"Schedule, query, and cancel Cal.com bookings and read event types through the Platform v2 API.","auth":{"kind":"oauth2","authorizationUrl":"https://app.cal.com/auth/oauth2/authorize","tokenUrl":"https://api.cal.com/v2/auth/oauth2/token","scopes":["PROFILE_READ","BOOKING_READ","BOOKING_WRITE","EVENT_TYPE_READ","EVENT_TYPE_WRITE","SCHEDULE_READ","SCHEDULE_WRITE"],"pkce":"required","tokenClientAuthMethod":"none","clientIdEnv":"CALCOM_OAUTH_CLIENT_ID"},"category":"calendar","defaultConsistencyModel":"authoritative","capabilities":[{"name":"me.get","description":"Read the authenticated Cal.com user (managed user under the Platform client).","parameters":{"type":"object","properties":{}},"requiredScopes":["PROFILE_READ"],"class":"read"},{"name":"event-types.list","description":"List event types owned by the authenticated user or a given username.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Optional Cal.com username to filter event types."},"eventSlug":{"type":"string","description":"Optional event-type slug to filter."}}},"requiredScopes":["EVENT_TYPE_READ"],"class":"read"},{"name":"event-types.get","description":"Read a single event type by numeric id.","parameters":{"type":"object","properties":{"eventTypeId":{"type":"string"}},"required":["eventTypeId"]},"requiredScopes":["EVENT_TYPE_READ"],"class":"read"},{"name":"bookings.list","description":"List Cal.com bookings, optionally filtered by status, attendee email, or event-type id.","parameters":{"type":"object","properties":{"status":{"type":"string","description":"Filter by status (upcoming, recurring, past, cancelled, unconfirmed)."},"attendeeEmail":{"type":"string"},"eventTypeId":{"type":"string"},"limit":{"type":"integer","minimum":1,"description":"Page size."},"cursor":{"type":"string","description":"The previous page response pagination.nextCursor."}}},"requiredScopes":["BOOKING_READ"],"class":"read"},{"name":"bookings.get","description":"Read a single booking by its public uid.","parameters":{"type":"object","properties":{"bookingUid":{"type":"string"}},"required":["bookingUid"]},"requiredScopes":["BOOKING_READ"],"class":"read"},{"name":"bookings.create","description":"Create a Cal.com booking. The body shape follows the v2 bookings contract (eventTypeId, start, attendee, etc.).","parameters":{"type":"object","properties":{"eventTypeId":{"type":"integer","description":"Numeric event-type id to book against."},"start":{"type":"string","description":"ISO-8601 start time in the attendee timezone."},"attendee":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"timeZone":{"type":"string"},"language":{"type":"string"},"phoneNumber":{"type":"string"}},"required":["name","email","timeZone"]},"guests":{"type":"array","items":{"type":"string"}},"meetingUrl":{"type":"string"},"location":{"type":"string"},"bookingFieldsResponses":{"type":"object"},"metadata":{"type":"object"},"lengthInMinutes":{"type":"integer"}},"required":["eventTypeId","start","attendee"]},"requiredScopes":["BOOKING_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"event-types.create","description":"Create a Cal.com event type owned by the authenticated user.","parameters":{"type":"object","properties":{"title":{"type":"string"},"slug":{"type":"string"},"lengthInMinutes":{"type":"integer"},"description":{"type":"string"},"locations":{"type":"array","items":{"type":"object"}},"bookingFields":{"type":"array","items":{"type":"object"}},"disableGuests":{"type":"boolean"}},"required":["title","slug","lengthInMinutes"]},"requiredScopes":["EVENT_TYPE_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"event-types.delete","description":"Delete a Cal.com event type by numeric id.","parameters":{"type":"object","properties":{"eventTypeId":{"type":"string"}},"required":["eventTypeId"]},"requiredScopes":["EVENT_TYPE_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"schedules.create","description":"Create an availability schedule for the authenticated user.","parameters":{"type":"object","properties":{"name":{"type":"string"},"timeZone":{"type":"string"},"isDefault":{"type":"boolean"},"availability":{"type":"array","items":{"type":"object"}},"overrides":{"type":"array","items":{"type":"object"}}},"required":["name","timeZone"]},"requiredScopes":["SCHEDULE_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bookings.cancel","description":"Cancel a Cal.com booking by uid with an optional cancellation reason.","parameters":{"type":"object","properties":{"bookingUid":{"type":"string"},"cancellationReason":{"type":"string"}},"required":["bookingUid"]},"requiredScopes":["BOOKING_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bookings.reschedule","description":"Reschedule a Cal.com booking to a new start time, returning the new booking uid.","parameters":{"type":"object","properties":{"bookingUid":{"type":"string"},"start":{"type":"string","description":"ISO-8601 start time for the new slot."},"reschedulingReason":{"type":"string"},"rescheduledBy":{"type":"string","description":"Email of the actor rescheduling."}},"required":["bookingUid","start"]},"requiredScopes":["BOOKING_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"schedules.list","description":"List availability schedules for the authenticated user.","parameters":{"type":"object","properties":{}},"requiredScopes":["SCHEDULE_READ"],"class":"read"},{"name":"slots.list","description":"List bookable time slots for an event type in a date range.","parameters":{"type":"object","properties":{"eventTypeId":{"type":"string"},"eventTypeSlug":{"type":"string"},"username":{"type":"string"},"start":{"type":"string","description":"ISO-8601 range start."},"end":{"type":"string","description":"ISO-8601 range end."},"timeZone":{"type":"string"},"duration":{"type":"integer"}},"required":["start","end"]},"requiredScopes":["EVENT_TYPE_READ"],"class":"read"}]},{"kind":"calendly","displayName":"Calendly","description":"Read Calendly event types and scheduled events, cancel events, and create single-use scheduling links.","auth":{"kind":"oauth2","authorizationUrl":"https://auth.calendly.com/oauth/authorize","tokenUrl":"https://auth.calendly.com/oauth/token","scopes":[],"clientIdEnv":"CALENDLY_OAUTH_CLIENT_ID","clientSecretEnv":"CALENDLY_OAUTH_CLIENT_SECRET"},"category":"calendar","defaultConsistencyModel":"authoritative","capabilities":[{"name":"user.get-current","description":"Get the authenticated Calendly user.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"event-types.list","description":"List event types owned by a user or organization.","parameters":{"type":"object","properties":{"user":{"type":"string","description":"Full user URI (https://api.calendly.com/users/UUID)."},"organization":{"type":"string","description":"Full organization URI."},"active":{"type":"boolean"},"count":{"type":"integer","minimum":1,"maximum":100},"page_token":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"event-types.get","description":"Read a single event type by UUID.","parameters":{"type":"object","properties":{"uuid":{"type":"string"}},"required":["uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scheduled-events.list","description":"List scheduled events for a user or organization, optionally filtered by status and time window.","parameters":{"type":"object","properties":{"user":{"type":"string","description":"Full user URI."},"organization":{"type":"string","description":"Full organization URI."},"status":{"type":"string","enum":["active","canceled"]},"min_start_time":{"type":"string","description":"ISO-8601 lower bound."},"max_start_time":{"type":"string","description":"ISO-8601 upper bound."},"count":{"type":"integer","minimum":1,"maximum":100},"page_token":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scheduled-events.get","description":"Read a single scheduled event by UUID.","parameters":{"type":"object","properties":{"uuid":{"type":"string"}},"required":["uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scheduled-events.list-invitees","description":"List invitees on a scheduled event.","parameters":{"type":"object","properties":{"uuid":{"type":"string"},"status":{"type":"string","enum":["active","canceled"]},"email":{"type":"string"},"count":{"type":"integer","minimum":1,"maximum":100},"page_token":{"type":"string"}},"required":["uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scheduled-events.cancel","description":"Cancel a scheduled event with an optional reason shown to the invitee.","parameters":{"type":"object","properties":{"uuid":{"type":"string"},"reason":{"type":"string"}},"required":["uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"scheduling-links.create","description":"Create a single-use scheduling link for an event type.","parameters":{"type":"object","properties":{"owner":{"type":"string","description":"Full event-type URI to attach the link to."},"max_event_count":{"type":"integer","minimum":1,"default":1}},"required":["owner"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.create","description":"Subscribe a Calendly webhook to organization or user scoped events.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"HTTPS endpoint that will receive event deliveries."},"events":{"type":"array","items":{"type":"string"},"description":"Event names to subscribe to (e.g. invitee.created, invitee.canceled)."},"organization":{"type":"string","description":"Full organization URI."},"user":{"type":"string","description":"Full user URI (required when scope=user)."},"scope":{"type":"string","enum":["user","organization"]},"signing_key":{"type":"string","description":"Optional shared secret for HMAC signatures."}},"required":["url","events","organization","scope"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Unsubscribe a Calendly webhook by uuid.","parameters":{"type":"object","properties":{"uuid":{"type":"string"}},"required":["uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invitee.no-show.create","description":"Mark a Calendly invitee as a no-show.","parameters":{"type":"object","properties":{"invitee":{"type":"string","description":"Full invitee URI (https://api.calendly.com/scheduled_events/EVENT_UUID/invitees/INVITEE_UUID)."}},"required":["invitee"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"camb-ai","displayName":"Camb.AI","description":"Create text-to-sound, text-to-speech, translations, and transcriptions.","auth":{"kind":"api-key","hint":"Camb.AI API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"audio.textToSound","description":"Create text to sound audio.","parameters":{"type":"object","properties":{"prompt":{"type":"string","description":"A clear, descriptive explanation of the desired audio effect."},"duration":{"type":"number","description":"The desired length of the audio in seconds (max 10)."},"projectName":{"type":"string","description":"A memorable name for your project."},"projectDescription":{"type":"string","description":"Details about your project."}},"required":["prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"audio.textToSpeech","description":"Create text to speech audio.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"The text to be converted to speech."},"gender":{"type":"string","description":"The gender of the speaker."},"age":{"type":"number","description":"The age of the speaker to be generated."},"projectName":{"type":"string","description":"A memorable name for your project."},"projectDescription":{"type":"string","description":"Details about your project."}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"audio.transcribe","description":"Transcribe audio media to text.","parameters":{"type":"object","properties":{"sourceType":{"type":"string","description":"Choose whether to upload a file or provide a URL."},"media":{"type":"string","description":"The media file (e.g., MP3, WAV, MP4) to transcribe. Max size: 20MB."},"projectName":{"type":"string","description":"A memorable name for your project."},"projectDescription":{"type":"string","description":"Details about your project."}},"required":["sourceType","media"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"text.translate","description":"Translate text to another language.","parameters":{"type":"object","properties":{"texts":{"type":"string","description":"The text to be translated. You can enter multiple lines; each line will be treated as a separate text segment."},"formality":{"type":"string","description":"Adjust the formality level to match your context."},"projectName":{"type":"string","description":"A memorable name for your project."},"projectDescription":{"type":"string","description":"Details about your project."}},"required":["texts"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"campaign-monitor","displayName":"Campaign Monitor","description":"Manage Campaign Monitor subscribers across lists: add, update details, unsubscribe, and lookup.","auth":{"kind":"api-key","hint":"Campaign Monitor API key from Account Settings > API keys."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"subscriber.add","description":"Add a subscriber to a list (matches Campaign Monitor \"Add subscriber to list\").","parameters":{"type":"object","properties":{"listId":{"type":"string"},"emailAddress":{"type":"string"},"name":{"type":"string"},"mobileNumber":{"type":"string"},"customFields":{"type":"array"},"consentToTrack":{"type":"string","enum":["Yes","No","Unchanged"]},"consentToSendSms":{"type":"string","enum":["Yes","No","Unchanged"]},"resubscribe":{"type":"boolean"},"restartSubscriptionBasedAutoresponders":{"type":"boolean"}},"required":["listId","emailAddress","consentToTrack"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriber.update","description":"Update an existing subscriber on a list.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"email":{"type":"string"},"newEmailAddress":{"type":"string"},"name":{"type":"string"},"mobileNumber":{"type":"string"},"customFields":{"type":"array"},"consentToTrack":{"type":"string","enum":["Yes","No","Unchanged"]},"consentToSendSms":{"type":"string","enum":["Yes","No","Unchanged"]},"resubscribe":{"type":"boolean"},"restartSubscriptionBasedAutoresponders":{"type":"boolean"}},"required":["listId","email","consentToTrack"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"subscriber.unsubscribe","description":"Unsubscribe a subscriber from a list.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"emailAddress":{"type":"string"}},"required":["listId","emailAddress"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaign.create","description":"Draft a new campaign for a Campaign Monitor client.","parameters":{"type":"object","properties":{"clientId":{"type":"string","description":"Campaign Monitor client id that owns the campaign."},"name":{"type":"string"},"subject":{"type":"string"},"fromName":{"type":"string"},"fromEmail":{"type":"string"},"replyTo":{"type":"string"},"htmlUrl":{"type":"string"},"textUrl":{"type":"string"},"listIDs":{"type":"array","items":{"type":"string"}},"segmentIDs":{"type":"array","items":{"type":"string"}}},"required":["clientId","name","subject","fromName","fromEmail","replyTo","htmlUrl","listIDs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaign.send","description":"Send a previously-drafted Campaign Monitor campaign.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"},"confirmationEmail":{"type":"string","description":"Email address to receive the send confirmation."},"sendDate":{"type":"string","description":"ISO-8601 date to schedule the send (or \"immediately\")."}},"required":["campaignId","confirmationEmail"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"list.create","description":"Create a subscriber list under a Campaign Monitor client.","parameters":{"type":"object","properties":{"clientId":{"type":"string"},"title":{"type":"string"},"unsubscribePage":{"type":"string"},"unsubscribeSetting":{"type":"string","enum":["AllClientLists","OnlyThisList"]},"confirmedOptIn":{"type":"boolean"},"confirmationSuccessPage":{"type":"string"}},"required":["clientId","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"list.delete","description":"Delete a Campaign Monitor subscriber list.","parameters":{"type":"object","properties":{"listId":{"type":"string"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriber.find","description":"Look up a subscriber by email address on a list.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"email":{"type":"string"},"includeTrackingPreference":{"type":"boolean"}},"required":["listId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"canny","displayName":"Canny","description":"Manage Canny product feedback: create, retrieve, and list posts; create and delete votes.","auth":{"kind":"api-key","hint":"Canny API key (Settings → API)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"posts.create","description":"Create a post on behalf of a Canny user. Mirrors activepieces createPostAction.","parameters":{"type":"object","properties":{"boardID":{"type":"string","description":"Board the post belongs to."},"authorID":{"type":"string","description":"Canny user ID of the post author."},"title":{"type":"string","description":"Brief title for the post."},"details":{"type":"string","description":"Longer body for the post."},"byID":{"type":"string","description":"Admin creating the post on behalf of the author (optional)."},"categoryID":{"type":"string","description":"Category to assign (optional)."},"ownerID":{"type":"string","description":"User responsible for completing the work (optional)."},"eta":{"type":"string","description":"Estimated delivery date in MM/YYYY (optional)."},"etaPublic":{"type":"boolean","description":"Whether the ETA is visible to all users (optional)."},"customFields":{"type":"object","description":"Custom field map (keys ≤ 30 chars, values ≤ 200 chars)."},"createdAt":{"type":"string","description":"ISO-8601 creation date for migrated posts (optional)."},"imageURLs":{"type":"array","items":{"type":"string"},"description":"Image attachment URLs (optional)."}},"required":["boardID","authorID","title","details"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.retrieve","description":"Retrieve a single Canny post by ID, board+URL name, or board+title. Mirrors retrievePostAction.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Canny post ID (preferred lookup)."},"boardID":{"type":"string","description":"Required when looking up by urlName or title."},"urlName":{"type":"string","description":"Slug used in the public post URL."},"title":{"type":"string","description":"Exact post title."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"posts.list","description":"List posts on a board with optional filters and pagination. Mirrors listPostsAction.","parameters":{"type":"object","properties":{"boardID":{"type":"string","description":"Board to list posts from."},"authorID":{"type":"string","description":"Filter to posts by this author."},"companyID":{"type":"string","description":"Filter to posts from voters at a company."},"tagIDs":{"type":"array","items":{"type":"string"},"description":"Filter to posts with all of these tag IDs."},"status":{"type":"string","description":"Filter by status (e.g. open, planned, in progress, complete, closed)."},"sort":{"type":"string","description":"Sort order: newest, oldest, relevance, score, statusChanged, trending."},"search":{"type":"string","description":"Full-text query."},"limit":{"type":"integer","description":"Page size (Canny max 100)."},"skip":{"type":"integer","description":"Pagination offset."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"votes.create","description":"Cast a vote on a post on behalf of a Canny user. Mirrors createVoteAction.","parameters":{"type":"object","properties":{"postID":{"type":"string","description":"Post being voted on."},"voterID":{"type":"string","description":"Canny user ID casting the vote."},"byID":{"type":"string","description":"Admin voting on behalf of the voter (optional)."},"votedAt":{"type":"string","description":"ISO-8601 vote timestamp for migrated votes (optional)."}},"required":["postID","voterID"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.update","description":"Update fields on an existing Canny post.","parameters":{"type":"object","properties":{"postID":{"type":"string","description":"Canny post id to update."},"title":{"type":"string"},"details":{"type":"string"},"eta":{"type":"string","description":"Estimated delivery date in MM/YYYY."},"etaPublic":{"type":"boolean"},"customFields":{"type":"object"},"imageURLs":{"type":"array","items":{"type":"string"}}},"required":["postID"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.delete","description":"Delete a Canny post by id.","parameters":{"type":"object","properties":{"postID":{"type":"string","description":"Canny post id to delete."}},"required":["postID"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Add a comment to a Canny post on behalf of a user.","parameters":{"type":"object","properties":{"postID":{"type":"string","description":"Post being commented on."},"authorID":{"type":"string","description":"Canny user ID writing the comment."},"value":{"type":"string","description":"Comment body (plain text)."},"parentID":{"type":"string","description":"Optional parent comment id to thread under."},"imageURLs":{"type":"array","items":{"type":"string"},"description":"Image attachment URLs."},"internal":{"type":"boolean","description":"Whether the comment is internal-only."},"createdAt":{"type":"string","description":"ISO-8601 created-at for migrated comments."}},"required":["postID","authorID","value"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"votes.delete","description":"Remove a user's vote from a Canny post. Mirrors deleteVoteAction.","parameters":{"type":"object","properties":{"postID":{"type":"string","description":"Post to remove the vote from."},"voterID":{"type":"string","description":"Canny user ID whose vote should be removed."}},"required":["postID","voterID"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"canva","displayName":"Canva","description":"Read Canva designs, folders, assets, brand templates, and comments; create designs, upload assets, post comments, and trigger export / autofill jobs through the Connect API.","auth":{"kind":"oauth2","authorizationUrl":"https://www.canva.com/api/oauth/authorize","tokenUrl":"https://api.canva.com/rest/oauth/token","scopes":["design:content:read","design:content:write","design:meta:read","design:permission:read","design:permission:write","asset:read","asset:write","brandtemplate:content:read","brandtemplate:meta:read","comment:read","comment:write","folder:read","folder:write","profile:read"],"clientIdEnv":"CANVA_OAUTH_CLIENT_ID","clientSecretEnv":"CANVA_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.me","description":"Return the Canva user id for the connected account.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":["profile:read"],"class":"read"},{"name":"users.me.profile","description":"Return the connected user profile (display name, etc.).","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":["profile:read"],"class":"read"},{"name":"designs.list","description":"List designs visible to the connected user.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Free-text design search."},"continuation":{"type":"string","description":"Opaque cursor from a prior page."},"ownership":{"type":"string","enum":["any","owned","shared"]},"sort_by":{"type":"string","enum":["relevance","modified_descending","modified_ascending","title_descending","title_ascending"]}},"required":[]},"requiredScopes":["design:meta:read"],"class":"read"},{"name":"designs.get","description":"Fetch a single design by id.","parameters":{"type":"object","properties":{"design_id":{"type":"string"}},"required":["design_id"]},"requiredScopes":["design:meta:read"],"class":"read"},{"name":"designs.pages.list","description":"List pages inside a design (paginated by offset/limit).","parameters":{"type":"object","properties":{"design_id":{"type":"string"},"offset":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1,"maximum":200}},"required":["design_id"]},"requiredScopes":["design:content:read"],"class":"read"},{"name":"folders.get","description":"Fetch a folder by id. Use the literal \"root\" to read the user root folder.","parameters":{"type":"object","properties":{"folder_id":{"type":"string"}},"required":["folder_id"]},"requiredScopes":["folder:read"],"class":"read"},{"name":"folders.items.list","description":"List items (designs, folders, images) inside a folder.","parameters":{"type":"object","properties":{"folder_id":{"type":"string"},"continuation":{"type":"string"},"item_types":{"type":"string","description":"Comma-separated list: design, folder, image."}},"required":["folder_id"]},"requiredScopes":["folder:read"],"class":"read"},{"name":"assets.get","description":"Fetch an asset by id.","parameters":{"type":"object","properties":{"asset_id":{"type":"string"}},"required":["asset_id"]},"requiredScopes":["asset:read"],"class":"read"},{"name":"asset_uploads.get","description":"Poll an async asset-upload job by id; returns status + asset reference when done.","parameters":{"type":"object","properties":{"job_id":{"type":"string"}},"required":["job_id"]},"requiredScopes":["asset:read"],"class":"read"},{"name":"brand_templates.list","description":"List brand templates the connected user can autofill (Canva Enterprise feature).","parameters":{"type":"object","properties":{"query":{"type":"string"},"continuation":{"type":"string"},"ownership":{"type":"string","enum":["any","owned","shared"]},"sort_by":{"type":"string","enum":["relevance","modified_descending","modified_ascending","title_descending","title_ascending"]}},"required":[]},"requiredScopes":["brandtemplate:meta:read"],"class":"read"},{"name":"brand_templates.get","description":"Fetch a brand template by id.","parameters":{"type":"object","properties":{"brand_template_id":{"type":"string"}},"required":["brand_template_id"]},"requiredScopes":["brandtemplate:meta:read"],"class":"read"},{"name":"brand_templates.dataset","description":"Fetch the autofill dataset definition for a brand template (field names + types).","parameters":{"type":"object","properties":{"brand_template_id":{"type":"string"}},"required":["brand_template_id"]},"requiredScopes":["brandtemplate:content:read"],"class":"read"},{"name":"comments.list","description":"List threaded comments on a design.","parameters":{"type":"object","properties":{"design_id":{"type":"string"},"continuation":{"type":"string"}},"required":["design_id"]},"requiredScopes":["comment:read"],"class":"read"},{"name":"comments.replies.list","description":"List replies underneath a top-level comment on a design.","parameters":{"type":"object","properties":{"design_id":{"type":"string"},"comment_id":{"type":"string"},"continuation":{"type":"string"}},"required":["design_id","comment_id"]},"requiredScopes":["comment:read"],"class":"read"},{"name":"exports.get","description":"Poll an export job by id; returns download URLs when status=success.","parameters":{"type":"object","properties":{"job_id":{"type":"string"}},"required":["job_id"]},"requiredScopes":["design:content:read"],"class":"read"},{"name":"autofills.get","description":"Poll an autofill job by id; returns the resulting design reference when done.","parameters":{"type":"object","properties":{"job_id":{"type":"string"}},"required":["job_id"]},"requiredScopes":["brandtemplate:content:read"],"class":"read"},{"name":"design_imports.get","description":"Poll a design-import job by id; returns the imported design reference when done.","parameters":{"type":"object","properties":{"job_id":{"type":"string"}},"required":["job_id"]},"requiredScopes":["design:content:write"],"class":"read"},{"name":"designs.create","description":"Create a new design. design_type is either { type: \"preset\", name: \"doc\" | \"whiteboard\" | \"presentation\" } or { type: \"custom\", width, height }.","parameters":{"type":"object","properties":{"design_type":{"type":"object","description":"Preset or custom design dimensions per the Canva API schema."},"asset_id":{"type":"string","description":"Optional asset to drop onto the first page."},"title":{"type":"string"}},"required":["design_type"]},"requiredScopes":["design:content:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"folders.create","description":"Create a folder under a parent folder.","parameters":{"type":"object","properties":{"name":{"type":"string"},"parent_folder_id":{"type":"string","description":"Parent folder id (\"root\" for the user root)."}},"required":["name","parent_folder_id"]},"requiredScopes":["folder:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"folders.update","description":"Rename a folder.","parameters":{"type":"object","properties":{"folder_id":{"type":"string"},"name":{"type":"string"}},"required":["folder_id","name"]},"requiredScopes":["folder:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"folders.delete","description":"Delete a folder. The folder must be empty.","parameters":{"type":"object","properties":{"folder_id":{"type":"string"}},"required":["folder_id"]},"requiredScopes":["folder:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"folders.items.move","description":"Move an item (design / folder / image) into a folder.","parameters":{"type":"object","properties":{"to_folder_id":{"type":"string"},"item_id":{"type":"string"}},"required":["to_folder_id","item_id"]},"requiredScopes":["folder:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assets.update","description":"Update asset metadata (name and/or tags).","parameters":{"type":"object","properties":{"asset_id":{"type":"string"},"name":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}},"required":["asset_id"]},"requiredScopes":["asset:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assets.delete","description":"Delete an asset by id.","parameters":{"type":"object","properties":{"asset_id":{"type":"string"}},"required":["asset_id"]},"requiredScopes":["asset:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Post a top-level comment on a design.","parameters":{"type":"object","properties":{"design_id":{"type":"string"},"message":{"type":"string"},"assignee_id":{"type":"string","description":"Optional Canva user id to assign the comment to."}},"required":["design_id","message"]},"requiredScopes":["comment:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.reply","description":"Reply to a comment thread on a design.","parameters":{"type":"object","properties":{"design_id":{"type":"string"},"comment_id":{"type":"string"},"message":{"type":"string"}},"required":["design_id","comment_id","message"]},"requiredScopes":["comment:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"exports.create","description":"Kick off an export job. format is { type: \"pdf\" | \"jpg\" | \"png\" | \"pptx\" | \"mp4\" | \"gif\", ...extra }. Returns { job: { id, status } } — poll exports.get to get download URLs.","parameters":{"type":"object","properties":{"design_id":{"type":"string"},"format":{"type":"object","description":"Canva export format object."}},"required":["design_id","format"]},"requiredScopes":["design:content:read"],"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"autofills.create","description":"Kick off an autofill job: render a brand template with structured field data. Returns { job: { id, status } } — poll autofills.get for the resulting design.","parameters":{"type":"object","properties":{"brand_template_id":{"type":"string"},"data":{"type":"object","description":"Keyed by dataset field name → field value."},"title":{"type":"string"}},"required":["brand_template_id","data"]},"requiredScopes":["brandtemplate:content:read","design:content:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"asset_uploads.create","description":"Create an asset-upload job from a remote URL. Returns { job: { id, status } } — poll asset_uploads.get for the asset reference. Direct binary uploads use a separate multipart endpoint not exposed here.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Filename for the uploaded asset."},"url":{"type":"string","format":"uri","description":"Public URL Canva should fetch from."},"tags":{"type":"array","items":{"type":"string"}}},"required":["name","url"]},"requiredScopes":["asset:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"capsule-crm","displayName":"Capsule CRM","description":"Manage Capsule CRM v2: search and write parties (people/organisations), opportunities, kases (cases), tasks, and entries (notes/activities).","auth":{"kind":"oauth2","authorizationUrl":"https://api.capsulecrm.com/oauth/authorise","tokenUrl":"https://api.capsulecrm.com/oauth/token","scopes":["read","write"],"clientIdEnv":"CAPSULE_CRM_OAUTH_CLIENT_ID","clientSecretEnv":"CAPSULE_CRM_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"parties.search","description":"Search parties (people and organisations) by free-text query, email, or tag. Returns up to 100 per page.","parameters":{"type":"object","properties":{"q":{"type":"string","description":"Free-text search term."},"email":{"type":"string"},"tag":{"type":"string"},"embed":{"type":"string","description":"Comma-separated list of nested resources to embed in the response (e.g. fields,tags,missingImportantFields)."},"page":{"type":"integer","minimum":1,"description":"One-based page number."},"perPage":{"type":"integer","minimum":1,"maximum":100,"description":"Page size. Capsule caps at 100 per page."}}},"requiredScopes":["read"],"class":"read"},{"name":"parties.get","description":"Fetch a single party (person or organisation) by id.","parameters":{"type":"object","properties":{"partyId":{"type":"string"},"embed":{"type":"string","description":"Comma-separated list of nested resources to embed in the response (e.g. fields,tags,missingImportantFields)."}},"required":["partyId"]},"requiredScopes":["read"],"class":"read"},{"name":"parties.create","description":"Create a party. The `party` body envelope must specify `type: \"person\"` or `type: \"organisation\"`.","parameters":{"type":"object","properties":{"party":{"type":"object","description":"Capsule party envelope (firstName/lastName for person, name for organisation, plus emailAddresses, phoneNumbers, addresses, etc.)."}},"required":["party"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"parties.update","description":"Update a party by id. Only the fields present in `party` are modified.","parameters":{"type":"object","properties":{"partyId":{"type":"string"},"party":{"type":"object"}},"required":["partyId","party"]},"requiredScopes":["write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"opportunities.search","description":"Search opportunities (deals) by free-text query, milestone, or party.","parameters":{"type":"object","properties":{"q":{"type":"string"},"milestone":{"type":"string","description":"Milestone id."},"party":{"type":"string","description":"Party id of the linked party."},"embed":{"type":"string","description":"Comma-separated list of nested resources to embed in the response (e.g. fields,tags,missingImportantFields)."},"page":{"type":"integer","minimum":1,"description":"One-based page number."},"perPage":{"type":"integer","minimum":1,"maximum":100,"description":"Page size. Capsule caps at 100 per page."}}},"requiredScopes":["read"],"class":"read"},{"name":"opportunities.create","description":"Create an opportunity. The envelope must include `party.id` (linked party) and `milestone.id`.","parameters":{"type":"object","properties":{"opportunity":{"type":"object","description":"Capsule opportunity envelope (name, description, party {id}, milestone {id}, value {amount, currency}, expectedCloseOn, probability)."}},"required":["opportunity"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.update","description":"Update an opportunity by id (move milestone, change value, edit description, etc.).","parameters":{"type":"object","properties":{"opportunityId":{"type":"string"},"opportunity":{"type":"object"}},"required":["opportunityId","opportunity"]},"requiredScopes":["write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"kases.search","description":"Search kases (cases) by free-text query, status, or party.","parameters":{"type":"object","properties":{"q":{"type":"string"},"status":{"type":"string","enum":["OPEN","CLOSED"]},"party":{"type":"string"},"embed":{"type":"string","description":"Comma-separated list of nested resources to embed in the response (e.g. fields,tags,missingImportantFields)."},"page":{"type":"integer","minimum":1,"description":"One-based page number."},"perPage":{"type":"integer","minimum":1,"maximum":100,"description":"Page size. Capsule caps at 100 per page."}}},"requiredScopes":["read"],"class":"read"},{"name":"kases.create","description":"Create a kase (case). The envelope must include `party.id`.","parameters":{"type":"object","properties":{"kase":{"type":"object","description":"Capsule kase envelope (name, description, party {id}, status, owner {id}, expectedCloseOn)."}},"required":["kase"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"kases.update","description":"Update a kase by id.","parameters":{"type":"object","properties":{"kaseId":{"type":"string"},"kase":{"type":"object"}},"required":["kaseId","kase"]},"requiredScopes":["write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.list","description":"List tasks, optionally filtered by status or owner.","parameters":{"type":"object","properties":{"status":{"type":"string","enum":["OPEN","COMPLETED","PENDING"]},"owner":{"type":"string","description":"User id of the task owner."},"embed":{"type":"string","description":"Comma-separated list of nested resources to embed in the response (e.g. fields,tags,missingImportantFields)."},"page":{"type":"integer","minimum":1,"description":"One-based page number."},"perPage":{"type":"integer","minimum":1,"maximum":100,"description":"Page size. Capsule caps at 100 per page."}}},"requiredScopes":["read"],"class":"read"},{"name":"tasks.create","description":"Create a task. May be linked to a party, opportunity, or kase via the envelope.","parameters":{"type":"object","properties":{"task":{"type":"object","description":"Capsule task envelope (description, detail, dueOn, dueTime, category {id}, owner {id}, party {id}?, opportunity {id}?, kase {id}?)."}},"required":["task"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update a task by id (reassign, change due date, mark completed, etc.).","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"task":{"type":"object"}},"required":["taskId","task"]},"requiredScopes":["write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"entries.create","description":"Create an entry (note or activity) against a party, opportunity, or kase. The envelope `type` must be `note` for free-text notes.","parameters":{"type":"object","properties":{"entry":{"type":"object","description":"Capsule entry envelope (type: \"note\", content, party {id}? / opportunity {id}? / kase {id}?, activityType {id}?)."}},"required":["entry"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.list","description":"List Capsule users in the account (for owner assignment lookups).","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1,"description":"One-based page number."},"perPage":{"type":"integer","minimum":1,"maximum":100,"description":"Page size. Capsule caps at 100 per page."}}},"requiredScopes":["read"],"class":"read"}]},{"kind":"captain-data","displayName":"Captain Data","description":"Launch Captain Data workflows and fetch job results via the public API.","auth":{"kind":"api-key","hint":"Captain Data API key (x-api-key header) tied to a project."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"launchWorkflow","description":"Launch a Captain Data workflow with the provided inputs and steps.","parameters":{"type":"object","properties":{"job":{"type":"string","description":"Workflow (job) UUID to launch."},"jobName":{"type":"string","description":"Optional run label surfaced in the Captain Data UI."},"inputs":{"type":"object","description":"Workflow inputs keyed by input name.","additionalProperties":true},"steps":{"type":"object","description":"Per-step configuration keyed by step id.","additionalProperties":true},"delay":{"type":"number","description":"Delay in seconds before execution begins."}},"required":["job","inputs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"getJobResults","description":"Fetch the results of a previously launched Captain Data workflow run.","parameters":{"type":"object","properties":{"job":{"type":"string","description":"Workflow (job) UUID the run belongs to."},"runId":{"type":"string","description":"Run UUID returned by launchWorkflow."}},"required":["job","runId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"cartloom","displayName":"Cartloom","description":"Manage discounts, products, and orders on your Cartloom store.","auth":{"kind":"api-key","hint":"Cartloom API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"discounts.create","description":"Create a new discount code.","parameters":{"type":"object","properties":{"title":{"type":"string"},"enabled":{"type":"boolean"},"auto":{"type":"boolean"},"unlimited":{"type":"boolean"},"selfDestruct":{"type":"boolean"},"applyOnce":{"type":"boolean"},"type":{"type":"string"},"amount":{"type":"number"},"target":{"type":"string"},"startDate":{"type":"string"},"stopDate":{"type":"string"},"code":{"type":"string"},"targetPids":{"type":"array","items":{"type":"string"}},"targetAmount":{"type":"number"},"targetQuantity":{"type":"number"},"allowance":{"type":"number"}},"required":["title","enabled","auto","unlimited","selfDestruct","applyOnce","type","amount","target","startDate","stopDate"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"discounts.update","description":"Update an existing discount code by id.","parameters":{"type":"object","properties":{"discountId":{"type":"string"},"title":{"type":"string"},"enabled":{"type":"boolean"},"auto":{"type":"boolean"},"unlimited":{"type":"boolean"},"selfDestruct":{"type":"boolean"},"applyOnce":{"type":"boolean"},"type":{"type":"string"},"amount":{"type":"number"},"target":{"type":"string"},"startDate":{"type":"string"},"stopDate":{"type":"string"},"code":{"type":"string"},"targetPids":{"type":"array","items":{"type":"string"}},"targetAmount":{"type":"number"},"targetQuantity":{"type":"number"},"allowance":{"type":"number"}},"required":["discountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"discounts.delete","description":"Delete a discount code by id.","parameters":{"type":"object","properties":{"discountId":{"type":"string"}},"required":["discountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.refund","description":"Issue a refund against a Cartloom order by invoice id.","parameters":{"type":"object","properties":{"invoice":{"type":"string","description":"Cartloom order invoice id."},"amount":{"type":"number","description":"Refund amount; omit for a full refund."},"reason":{"type":"string"}},"required":["invoice"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"discounts.get","description":"Retrieve a specific discount by ID.","parameters":{"type":"object","properties":{"discountId":{"type":"string"}},"required":["discountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"discounts.list","description":"List all discounts.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.get","description":"Retrieve a specific order by invoice ID.","parameters":{"type":"object","properties":{"invoice":{"type":"string"}},"required":["invoice"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.listByDate","description":"List orders within a date range.","parameters":{"type":"object","properties":{"start":{"type":"string"},"end":{"type":"string"}},"required":["start"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.searchByEmail","description":"Search for orders by email address.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.list","description":"List all products in your Cartloom store.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"cashfree-payments","displayName":"Cashfree Payments","description":"Cashfree Payments integration for processing payments, refunds, and managing payment links and cashgrams.","auth":{"kind":"api-key","hint":"Cashfree credential JSON with clientId and clientSecret."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"orders.create","description":"Create an order in Cashfree PG.","parameters":{"type":"object","properties":{"orderAmount":{"type":"number"},"orderCurrency":{"type":"string"},"customerId":{"type":"string"},"customerPhone":{"type":"string"},"customerEmail":{"type":"string"},"customerName":{"type":"string"},"orderId":{"type":"string"},"orderNote":{"type":"string"},"orderExpiryTime":{"type":"string"},"returnUrl":{"type":"string"},"notifyUrl":{"type":"string"},"paymentMethods":{"type":"string"},"orderTags":{"type":"object"},"orderSplits":{"type":"array"}},"required":["orderAmount","orderCurrency","customerId","customerPhone"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payment_links.create","description":"Create a Cashfree payment link.","parameters":{"type":"object","properties":{"linkId":{"type":"string"},"linkAmount":{"type":"number"},"linkCurrency":{"type":"string"},"linkPurpose":{"type":"string"},"customerName":{"type":"string"},"customerEmail":{"type":"string"},"customerPhone":{"type":"string"},"linkPartialPayments":{"type":"boolean"},"linkMinimumPartialAmount":{"type":"number"},"linkExpiryTime":{"type":"string"},"sendSms":{"type":"boolean"},"sendEmail":{"type":"boolean"},"linkAutoReminders":{"type":"boolean"},"upiIntent":{"type":"boolean"},"linkNotes":{"type":"object"},"notifyUrl":{"type":"string"},"returnUrl":{"type":"string"}},"required":["linkId","linkAmount","linkCurrency","linkPurpose","customerPhone"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"refunds.create","description":"Create a refund against a Cashfree order.","parameters":{"type":"object","properties":{"orderId":{"type":"string"},"refundId":{"type":"string"},"refundAmount":{"type":"number"},"refundNote":{"type":"string"},"refundSpeed":{"type":"string"},"refundSplits":{"type":"array"}},"required":["orderId","refundId","refundAmount"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payment_links.cancel","description":"Cancel an ACTIVE Cashfree payment link.","parameters":{"type":"object","properties":{"linkId":{"type":"string"}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payment_links.get","description":"Fetch details for a Cashfree payment link.","parameters":{"type":"object","properties":{"linkId":{"type":"string"}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cashgrams.create","description":"Create a Cashfree Cashgram (payout link).","parameters":{"type":"object","properties":{"cashgramId":{"type":"string"},"amount":{"type":"number"},"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"linkExpiry":{"type":"string"},"remarks":{"type":"string"},"notifyCustomer":{"type":"boolean"}},"required":["cashgramId","amount","name","phone","linkExpiry"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payment_links.orders.list","description":"List orders associated with a payment link.","parameters":{"type":"object","properties":{"linkId":{"type":"string"}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.refunds.list","description":"List all refunds attached to a Cashfree order.","parameters":{"type":"object","properties":{"orderId":{"type":"string"}},"required":["orderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cashgrams.deactivate","description":"Deactivate an existing Cashfree Cashgram.","parameters":{"type":"object","properties":{"cashgramId":{"type":"string"}},"required":["cashgramId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"certopus","displayName":"Certopus","description":"Issue and manage Certopus digital certificates for events and categories.","auth":{"kind":"api-key","hint":"Certopus API key from the workspace integrations panel."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"organisations.list","description":"List organisations the authenticated key has access to.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"events.list","description":"List events under an organisation.","parameters":{"type":"object","properties":{"organisation":{"type":"string"}},"required":["organisation"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"categories.list","description":"List categories under an event.","parameters":{"type":"object","properties":{"organisation":{"type":"string"},"event":{"type":"string"}},"required":["organisation","event"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"credentials.create","description":"Create a credential (certificate) for a recipient inside an event/category, with optional auto-generate and auto-publish.","parameters":{"type":"object","properties":{"organisation":{"type":"string"},"event":{"type":"string"},"category":{"type":"string"},"email":{"type":"string"},"fields":{"type":"object"},"generate":{"type":"boolean"},"publish":{"type":"boolean"}},"required":["organisation","event","category","email","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"credentials.revoke","description":"Revoke a previously issued Certopus credential by id.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Credential identifier."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"credentials.update","description":"Update metadata (fields, generate, publish) on an existing credential.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Credential identifier."},"fields":{"type":"object"},"generate":{"type":"boolean"},"publish":{"type":"boolean"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.create","description":"Create a credential event under an organisation.","parameters":{"type":"object","properties":{"organisation":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"startDate":{"type":"string","description":"ISO start date."},"endDate":{"type":"string","description":"ISO end date."}},"required":["organisation","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"chain-aware","displayName":"ChainAware.AI","description":"Detect risky wallet behavior across blockchain networks.","auth":{"kind":"api-key","hint":"ChainAware.AI API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"wallet.audit","description":"Audit a wallet address for risky behavior.","parameters":{"type":"object","properties":{"network":{"type":"string","description":"Blockchain network (e.g., ethereum, polygon, bsc)"},"walletAddress":{"type":"string","description":"Wallet address to audit"},"contractAddress":{"type":"string","description":"Smart contract address to check"},"onlyFraud":{"type":"boolean","description":"Return only fraud-flagged results"}},"required":["network","walletAddress","contractAddress"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"wallet.creditScore","description":"Calculate credit score for a wallet address.","parameters":{"type":"object","properties":{"network":{"type":"string","description":"Blockchain network"},"walletAddress":{"type":"string","description":"Wallet address"}},"required":["network","walletAddress"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"wallet.fraudCheck","description":"Check if a wallet has fraud indicators.","parameters":{"type":"object","properties":{"network":{"type":"string","description":"Blockchain network"},"walletAddress":{"type":"string","description":"Wallet address"},"contractAddress":{"type":"string","description":"Smart contract address"}},"required":["network","walletAddress","contractAddress"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"wallet.rugPullCheck","description":"Detect rug pull patterns in a smart contract.","parameters":{"type":"object","properties":{"network":{"type":"string","description":"Blockchain network"},"contractAddress":{"type":"string","description":"Smart contract address"}},"required":["network","contractAddress"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"wallet.segment","description":"Classify wallet into risk segment.","parameters":{"type":"object","properties":{"network":{"type":"string","description":"Blockchain network"},"walletAddress":{"type":"string","description":"Wallet address"}},"required":["network","walletAddress"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"chainalysis-api","displayName":"Chainalysis Screening API","description":"Screen blockchain addresses against the Chainalysis sanctions list.","auth":{"kind":"api-key","hint":"Chainalysis Public API token (sent via the `Token` header)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"check.address.sanction","description":"Check whether a blockchain address appears on the Chainalysis sanctions screening list.","parameters":{"type":"object","properties":{"address":{"type":"string","description":"Blockchain address to screen against the sanctions list."}},"required":["address"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false}]},{"kind":"chaindesk","displayName":"Chaindesk","description":"Query Chaindesk agents and datasources, and upload files.","auth":{"kind":"api-key","hint":"Chaindesk API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"agents.query","description":"Query a Chaindesk agent.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The query to send to the agent."},"conversationId":{"type":"string","description":"ID of the conversation. If not provided, a new conversation is created."}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"datasources.query","description":"Query a Chaindesk datasource.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The query to send to the datasource."},"datasourceId":{"type":"string","description":"The ID of the datasource to query."}},"required":["query","datasourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.upload","description":"Upload a file to a Chaindesk datasource.","parameters":{"type":"object","properties":{"datasourceId":{"type":"string","description":"The ID of the datasource to upload to."},"file":{"type":"string","description":"The file content (base64 encoded)."},"filename":{"type":"string","description":"The filename for the uploaded file."}},"required":["datasourceId","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"datasources.create","description":"Upload a new datasource to an agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string","description":"Chaindesk agent id to attach the datasource to."},"name":{"type":"string","description":"Human-readable datasource name."},"type":{"type":"string","description":"Datasource type (e.g. text, file, web_page, web_site)."},"source":{"type":"string","description":"Source content (raw text or URL depending on the type)."},"config":{"type":"object","description":"Optional provider-specific config for crawling / chunking."}},"required":["agentId","name","type","source"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"datasources.delete","description":"Delete a datasource by id.","parameters":{"type":"object","properties":{"datasourceId":{"type":"string","description":"The ID of the datasource to delete."}},"required":["datasourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"agents.create","description":"Create a Chaindesk agent.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Agent display name."},"description":{"type":"string","description":"Agent description."},"modelName":{"type":"string","description":"Model identifier the agent uses."},"prompt":{"type":"string","description":"System prompt for the agent."},"visibility":{"type":"string","enum":["public","private"],"description":"Agent visibility."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"chargebee","displayName":"Chargebee","description":"Manage Chargebee customers and subscriptions on the subscription billing and revenue operations platform.","auth":{"kind":"api-key","hint":"Chargebee full-access API key (Settings → Configure Chargebee → API Keys → Full-Access Key). Stored as base64(\"apiKey:\") so it can be attached as HTTP Basic. The connection must also store the per-site `site` metadata (e.g. \"acme\" for acme.chargebee.com)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"subscription.cancel","description":"Cancel a Chargebee subscription. Supports immediate cancel, end-of-term, and contract-term flows with optional credit / unbilled-charge / receivables handling.","parameters":{"type":"object","properties":{"subscription_id":{"type":"string"},"cancel_option":{"type":"string","enum":["immediately","end_of_term","specific_date"]},"cancel_at":{"type":"integer"},"cancel_reason_code":{"type":"string"},"credit_option_for_current_term_charges":{"type":"string","enum":["none","prorate","full"]},"unbilled_charges_option":{"type":"string","enum":["invoice","delete"]},"contract_term_cancel_option":{"type":"string","enum":["terminate_now","end_of_contract_term"]},"account_receivables_handling":{"type":"string","enum":["no_action","schedule_payment_collection","write_off"]},"refundable_credits_handling":{"type":"string","enum":["no_action","schedule_refund"]},"invoice_date":{"type":"integer"},"subscription_items_to_remove":{"type":"array","items":{"type":"string"}},"termination_fee_item_price_id":{"type":"string"},"termination_fee_quantity":{"type":"integer"},"termination_fee_unit_price":{"type":"integer"},"termination_fee_service_period_days":{"type":"integer"}},"required":["subscription_id","cancel_option"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customer.create","description":"Create a Chargebee customer, optionally with billing address and tax fields.","parameters":{"type":"object","properties":{"id":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"},"company":{"type":"string"},"phone":{"type":"string"},"locale":{"type":"string"},"preferred_currency_code":{"type":"string"},"auto_collection":{"type":"string","enum":["on","off"]},"net_term_days":{"type":"integer"},"allow_direct_debit":{"type":"boolean"},"vat_number":{"type":"string"},"taxability":{"type":"string","enum":["taxable","exempt"]},"invoice_notes":{"type":"string"},"meta_data":{"type":"object"},"billing_address_first_name":{"type":"string"},"billing_address_last_name":{"type":"string"},"billing_address_line1":{"type":"string"},"billing_address_line2":{"type":"string"},"billing_address_city":{"type":"string"},"billing_address_state":{"type":"string"},"billing_address_zip":{"type":"string"},"billing_address_country":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscription.create","description":"Subscribe an existing customer to a Chargebee item price. Supports trials, coupons, PO numbers, and immediate-invoice mode.","parameters":{"type":"object","properties":{"customer_id":{"type":"string"},"item_price_id":{"type":"string"},"quantity":{"type":"integer"},"billing_cycles":{"type":"integer"},"trial_end":{"type":"integer"},"start_date":{"type":"integer"},"coupon_ids":{"type":"array","items":{"type":"string"}},"po_number":{"type":"string"},"payment_source_id":{"type":"string"},"invoice_immediately":{"type":"boolean"},"invoice_notes":{"type":"string"},"meta_data":{"type":"object"}},"required":["customer_id","item_price_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customer.get","description":"Read a Chargebee customer by id.","parameters":{"type":"object","properties":{"customer_id":{"type":"string"}},"required":["customer_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscription.update","description":"Change the plan, addons, or schedule on a Chargebee subscription via subscription_items.","parameters":{"type":"object","properties":{"subscription_id":{"type":"string"},"item_price_id":{"type":"string"},"quantity":{"type":"integer"},"billing_cycles":{"type":"integer"},"replace_items_list":{"type":"boolean"},"trial_end":{"type":"integer"},"end_of_term":{"type":"boolean"},"prorate":{"type":"boolean"},"coupon_ids":{"type":"array","items":{"type":"string"}},"po_number":{"type":"string"},"invoice_immediately":{"type":"boolean"},"invoice_notes":{"type":"string"},"meta_data":{"type":"object"}},"required":["subscription_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscription.pause","description":"Pause an active Chargebee subscription with optional resume date and unbilled-charge handling.","parameters":{"type":"object","properties":{"subscription_id":{"type":"string"},"pause_option":{"type":"string","enum":["immediately","end_of_term","specific_date"]},"pause_date":{"type":"integer"},"resume_date":{"type":"integer"},"unbilled_charges_handling":{"type":"string","enum":["no_action","invoice","add_to_unbilled_charges"]},"invoice_dunning_handling":{"type":"string","enum":["no_action","stop_dunning"]}},"required":["subscription_id","pause_option"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscription.resume","description":"Resume a paused Chargebee subscription.","parameters":{"type":"object","properties":{"subscription_id":{"type":"string"},"resume_option":{"type":"string","enum":["immediately","specific_date"]},"resume_date":{"type":"integer"},"charges_handling":{"type":"string","enum":["no_action","invoice_immediately","add_to_unbilled_charges"]},"unpaid_invoices_handling":{"type":"string","enum":["no_action","schedule_payment_collection"]}},"required":["subscription_id","resume_option"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoice.refund","description":"Refund an invoice. Supports partial amount and customer-notes annotation.","parameters":{"type":"object","properties":{"invoice_id":{"type":"string"},"refund_amount":{"type":"integer","description":"Amount in the smallest currency unit (cents)."},"comment":{"type":"string"},"customer_notes":{"type":"string"},"credit_note_reason_code":{"type":"string","enum":["write_off","subscription_change","subscription_cancellation","subscription_pause","chargeback","product_unsatisfactory","service_unsatisfactory","order_change","order_cancellation","waiver","other","fraudulent"]}},"required":["invoice_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"chargekeep","displayName":"ChargeKeep","description":"Manage ChargeKeep (Sperse) contacts, subscriptions, invoices, and products for recurring and one-time payments via Stripe / PayPal.","auth":{"kind":"api-key","hint":"ChargeKeep account API key. Sent as the X-API-Key request header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.upsert","description":"Add or update a ChargeKeep contact. The contactXref string acts as an external idempotency reference: passing the same xref updates the existing record.","parameters":{"type":"object","properties":{"contactId":{"type":"integer"},"contactXref":{"type":"string"},"matchExisting":{"type":"boolean"},"ignoreInvalidValues":{"type":"boolean"},"importType":{"type":"string","description":"Contact type. e.g. Client, Lead, Vendor."},"createUser":{"type":"boolean"},"sendWelcomeEmail":{"type":"boolean"},"userPassword":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"companyName":{"type":"string"}},"required":["importType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.upsert.extended","description":"Extended contact upsert that accepts the full ChargeKeep contact profile (name parts, address, demographic fields, lists, custom fields).","parameters":{"type":"object","properties":{"contactId":{"type":"integer"},"contactXref":{"type":"string"},"matchExisting":{"type":"boolean"},"overrideLists":{"type":"boolean"},"ignoreInvalidValues":{"type":"boolean"},"importType":{"type":"string"},"createUser":{"type":"boolean"},"sendWelcomeEmail":{"type":"boolean"},"userPassword":{"type":"string"},"namePrefix":{"type":"string"},"firstName":{"type":"string"},"middleName":{"type":"string"},"lastName":{"type":"string"},"nickName":{"type":"string"},"nameSuffix":{"type":"string"},"gender":{"type":"string"},"dob":{"type":"string","description":"YYYY-MM-DD or MM-DD-YYYY."},"ssn":{"type":"string"},"drivingLicense":{"type":"string"},"drivingLicenseState":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"companyName":{"type":"string"},"address":{"type":"object","properties":{"line1":{"type":"string"},"line2":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"},"country":{"type":"string"}}},"customFields":{"type":"object"}},"required":["importType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.upsert","description":"Create or update a subscription for a ChargeKeep contact. Subscriptions are billed through the connected Stripe or PayPal account.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"integer"},"subscriptionXref":{"type":"string"},"contactId":{"type":"integer"},"contactXref":{"type":"string"},"productCode":{"type":"string"},"planCode":{"type":"string"},"amount":{"type":"number"},"currency":{"type":"string"},"billingInterval":{"type":"string","enum":["day","week","month","year"]},"intervalCount":{"type":"integer","minimum":1},"startDate":{"type":"string"},"trialDays":{"type":"integer","minimum":0},"status":{"type":"string"}},"required":["productCode"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.create","description":"Create an invoice in ChargeKeep for an existing contact.","parameters":{"type":"object","properties":{"contactId":{"type":"integer"},"contactXref":{"type":"string"},"invoiceXref":{"type":"string"},"currency":{"type":"string"},"dueDate":{"type":"string","description":"YYYY-MM-DD"},"memo":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"productCode":{"type":"string"},"description":{"type":"string"},"quantity":{"type":"number"},"unitPrice":{"type":"number"},"taxRate":{"type":"number"}},"required":["description","quantity","unitPrice"]}}},"required":["items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.create","description":"Create a product (offer) in the ChargeKeep catalog.","parameters":{"type":"object","properties":{"productCode":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"currency":{"type":"string"},"recurring":{"type":"boolean"},"billingInterval":{"type":"string","enum":["day","week","month","year"]},"intervalCount":{"type":"integer","minimum":1},"trialDays":{"type":"integer","minimum":0},"taxable":{"type":"boolean"}},"required":["name","price"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.get","description":"Read full ChargeKeep contact details. Look up by internal contactId or external contactXref.","parameters":{"type":"object","properties":{"contactId":{"type":"integer"},"contactXref":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"chartly","displayName":"Chartly","description":"Generate cached chart images (PNG or SVG) from Chart.js configurations via the Chartly REST API.","auth":{"kind":"api-key","hint":"Chartly API key, sent as a bearer token."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.chart","description":"Create a chart image from a Chart.js configuration. Returns the cached image URL and metadata.","parameters":{"type":"object","properties":{"chart_type":{"type":"string","description":"Chart.js chart type (bar, line, pie, doughnut, radar, polarArea, scatter, bubble)."},"chart_title":{"type":"string","description":"Optional title rendered on the chart."},"labels":{"type":"array","items":{"type":"string"},"description":"Labels for the data points (e.g., [\"Jan\", \"Feb\", \"Mar\"])."},"dataset_label":{"type":"string","description":"Label for the data series."},"data_values":{"type":"array","items":{"type":"number"},"description":"Numeric values for the chart (e.g., [10, 20, 30])."},"background_color":{"type":"string","description":"Background color for data points (e.g., \"#4285F4\" or \"rgba(66,133,244,0.6)\")."},"width":{"type":"integer","minimum":1,"maximum":2000,"description":"Image width in pixels."},"height":{"type":"integer","minimum":1,"maximum":2000,"description":"Image height in pixels."},"format":{"type":"string","enum":["png","svg"],"description":"Output image format."},"background_color_image":{"type":"string","description":"Background color for the whole image (e.g., \"#ffffff\")."},"advanced_config":{"type":"object","description":"Complete Chart.js configuration; overrides the high-level fields above when set."},"chart_id":{"type":"string","description":"Optional client-supplied identifier used for caching and later retrieval."}},"required":["chart_type","labels","dataset_label","data_values","width","height","format"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.chart","description":"Fetch a previously generated chart image by its identifier.","parameters":{"type":"object","properties":{"chart_id":{"type":"string","description":"Identifier returned (or supplied) when the chart was created."},"format":{"type":"string","enum":["png","svg"],"description":"Optional output format override; defaults to the format used at creation."}},"required":["chart_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"update.chart","description":"Update an existing chart with new data, labels, or styling.","parameters":{"type":"object","properties":{"chart_id":{"type":"string","description":"Identifier of the chart to update."},"chart_type":{"type":"string"},"chart_title":{"type":"string"},"labels":{"type":"array","items":{"type":"string"}},"dataset_label":{"type":"string"},"data_values":{"type":"array","items":{"type":"number"}},"background_color":{"type":"string"},"width":{"type":"integer","minimum":1,"maximum":2000},"height":{"type":"integer","minimum":1,"maximum":2000},"format":{"type":"string","enum":["png","svg"]},"background_color_image":{"type":"string"},"advanced_config":{"type":"object"}},"required":["chart_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"delete.chart","description":"Delete a chart by identifier.","parameters":{"type":"object","properties":{"chart_id":{"type":"string","description":"Identifier of the chart to delete."}},"required":["chart_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"share.chart","description":"Share a chart with a recipient via email or generate a shareable link.","parameters":{"type":"object","properties":{"chart_id":{"type":"string","description":"Identifier of the chart to share."},"recipient":{"type":"string","description":"Email address to share with. Omit to generate a public link instead."},"permission":{"type":"string","enum":["view","edit"],"description":"Recipient permission level. Defaults to view."},"message":{"type":"string","description":"Optional message attached to the share invite."}},"required":["chart_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"chat-aid","displayName":"Chat Aid","description":"AI-powered assistant for your knowledge base. Upload documents, ask questions, and manage custom sources.","auth":{"kind":"api-key","hint":"Chat Aid API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"sources.get","description":"Retrieve a custom source by ID.","parameters":{"type":"object","properties":{"sourceId":{"type":"string"}},"required":["sourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sources.add","description":"Add custom sources (upload documents like PDF, Word, Markdown, HTML, Excel, CSV, PowerPoint, images).","parameters":{"type":"object","properties":{"files":{"type":"object"},"teamId":{"type":"string"}},"required":["files"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"questions.ask","description":"Ask questions to the knowledge base. Optionally thread conversations using parentTs and messageTs.","parameters":{"type":"object","properties":{"sourceId":{"type":"string"},"prompt":{"type":"string"},"teamId":{"type":"string"},"parentTs":{"type":"string"},"messageTs":{"type":"string"}},"required":["sourceId","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"chat-data","displayName":"Chat Data","description":"Build and operate AI chatbots: create chatbots with custom training data, send messages, update prompts, retrain, and upload knowledge files.","auth":{"kind":"api-key","hint":"Chat Data workspace API key. Generate one from the Chat Data dashboard → Settings → API."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"chatbot.create","description":"Create a new chatbot. `model` selects the underlying base model; for `custom-data-upload` you may pass `sourceText` and `urlsToScrape`, which are ignored for medical and other custom models. Returns the new chatbot id.","parameters":{"type":"object","properties":{"chatbotName":{"type":"string","description":"The display name of the chatbot to create."},"model":{"type":"string","description":"Base model id. Examples: custom-data-upload, medical-chat-human, medical-chat-vet, custom-model. Vendor-specific values pass through unchanged."},"sourceText":{"type":"string","description":"Training text. Only used when model = custom-data-upload. Character limits depend on the workspace plan."},"urlsToScrape":{"type":"array","description":"URLs to crawl and ingest as training data. Each must start with http:// or https://.","items":{"type":"string"}},"customBackend":{"type":"string","description":"Optional custom backend URL the chatbot delegates to instead of the platform model."},"bearer":{"type":"string","description":"Optional bearer token forwarded to the custom backend."},"initialMessages":{"type":"array","description":"Greeting messages the chatbot opens new conversations with.","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"suggestedMessages":{"type":"array","description":"Quick-reply chips shown in the chatbot UI.","items":{"type":"string"}},"visibility":{"type":"string","description":"Access scope: private, public, or unlisted (vendor-specific values pass through)."},"temperature":{"type":"number","description":"Model temperature 0-1; higher = more random."}},"required":["chatbotName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"chatbot.delete","description":"Delete a chatbot by id. Destroys the chatbot, its training data, and its conversation history. Not reversible.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Target chatbot id."}},"required":["chatbotId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chatbot.send_message","description":"Send a user message to a chatbot and receive a generated reply. Pass conversationId to continue an existing conversation; omit it to start a new one. Optional attachedFiles supports up to three inline file references.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Target chatbot id."},"messageContent":{"type":"string","description":"The user message body."},"messageRole":{"type":"string","description":"Sender role. Typical values: user, assistant, system."},"conversationId":{"type":"string","description":"Existing conversation id to continue. Omit to start a new conversation."},"includeReasoning":{"type":"boolean","description":"Include reasoning trace in the response, overriding the chatbot default."},"baseModel":{"type":"string","description":"Per-call model override."},"basePrompt":{"type":"string","description":"Per-call system-prompt override."},"openAIFormat":{"type":"boolean","description":"Return the response in OpenAI chat-completion shape."},"appendMessages":{"type":"boolean","description":"Append to prior messages with the same conversationId instead of starting fresh."},"attachedFiles":{"type":"array","description":"Up to 3 attached files (name + optional pre-parsed content).","items":{"type":"object","properties":{"name":{"type":"string"},"content":{"type":"string"}},"required":["name"]}}},"required":["chatbotId","messageContent"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"chatbot.update_base_prompt","description":"Overwrite the chatbot base (system) prompt. The change applies to all subsequent conversations; in-flight conversations keep the prior prompt.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Target chatbot id."},"basePrompt":{"type":"string","description":"New base prompt body."}},"required":["chatbotId","basePrompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chatbot.retrain","description":"Kick off a retrain job that re-ingests the chatbot training data (source text, scraped URLs, uploaded files, Q&As, product catalog). Returns a job id the caller can poll for completion.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Target chatbot id."},"sourceText":{"type":"string","description":"Optional replacement training text."},"urlsToScrape":{"type":"array","description":"Optional replacement URL list to crawl.","items":{"type":"string"}},"products":{"type":"array","description":"Optional product catalog entries.","items":{"type":"object","properties":{"id":{"type":"string"},"information":{"type":"object"}},"required":["id","information"]}},"qAndAs":{"type":"array","description":"Optional Q&A training pairs.","items":{"type":"object","properties":{"question":{"type":"string"},"answer":{"type":"string"}},"required":["question","answer"]}},"deletes":{"type":"array","description":"Knowledge chunks to remove from the chatbot during retrain.","items":{"type":"object","properties":{"type":{"type":"string"},"id":{"type":"string"}},"required":["type"]}},"extractMainContent":{"type":"boolean","description":"For URL ingestion: strip headers/footers/nav/sidebar/ads automatically."},"includeOnlyTags":{"type":"string","description":"CSS selectors to exclusively extract during crawling (comma-separated)."},"excludeTags":{"type":"string","description":"CSS selectors to exclude during crawling (comma-separated)."},"cookies":{"type":"string","description":"Cookies for authenticated crawling (semicolon-separated name=value pairs)."}},"required":["chatbotId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chatbot.upload_file","description":"Upload a file to a chatbot knowledge base. The vendor expects multipart/form-data; the file payload is passed through as the `file` argument (path, base64, or pre-resolved file reference depending on the runtime). Returns the created file id.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Target chatbot id."},"name":{"type":"string","description":"File name (must include the extension for content-type sniffing)."},"file":{"description":"File payload reference (runtime-defined: local path, base64 string, or pre-resolved blob handle)."}},"required":["chatbotId","name","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"chatbase","displayName":"Chatbase","description":"Build and manage AI chatbots with custom sources via the Chatbase API.","auth":{"kind":"api-key","hint":"Chatbase secret API key (Bearer token)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"chatbot.create","description":"Create a new Chatbase chatbot with optional source text.","parameters":{"type":"object","properties":{"chatbotName":{"type":"string","description":"Human-readable chatbot name."},"sourceText":{"type":"string","description":"Optional text data used to seed the chatbot training corpus."}},"required":["chatbotName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chatbot.list","description":"List all chatbots owned by the authenticated Chatbase account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversations.search","description":"Search conversations across a chatbot, optionally filtering by source and date.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Chatbase chatbot id."},"filteredSources":{"type":"string","description":"Comma-separated list of conversation sources to include."},"startDate":{"type":"string","description":"ISO start date (inclusive)."},"endDate":{"type":"string","description":"ISO end date (inclusive)."},"page":{"type":"integer","description":"Pagination page (default 1)."},"size":{"type":"integer","description":"Page size (default 10, max 100)."}},"required":["chatbotId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"chatbot.prompt","description":"Send a prompt to a chatbot and receive a generated response.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Chatbase chatbot id."},"message":{"type":"string","description":"User prompt to send to the chatbot."},"temperature":{"type":"number","description":"Sampling temperature between 0 and 1; higher values produce more random output."},"conversationId":{"type":"string","description":"Optional id for grouping turns into a persisted conversation."},"model":{"type":"string","description":"Optional model identifier to override the chatbot default."}},"required":["chatbotId","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chatbot.update","description":"Update a chatbot configuration (name, model, prompt, temperature, visibility).","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Chatbase chatbot id."},"chatbotName":{"type":"string","description":"New chatbot name."},"model":{"type":"string","description":"Model identifier to use."},"basePrompt":{"type":"string","description":"System prompt."},"temperature":{"type":"number"},"visibility":{"type":"string","enum":["public","private"]}},"required":["chatbotId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chatbot.delete","description":"Delete a chatbot.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Chatbase chatbot id."}},"required":["chatbotId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sources.upload","description":"Upload a knowledge source (text, URL, or file content) to a chatbot.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Chatbase chatbot id."},"type":{"type":"string","enum":["text","url","file"],"description":"Source type."},"content":{"type":"string","description":"Raw text, URL, or base64-encoded file content depending on type."},"filename":{"type":"string","description":"Optional filename for file uploads."}},"required":["chatbotId","type","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sources.delete","description":"Delete a knowledge source from a chatbot.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Chatbase chatbot id."},"sourceId":{"type":"string","description":"Knowledge source id to delete."}},"required":["chatbotId","sourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"chatling","displayName":"Chatling","description":"Send messages to Chatling chatbots, provision new chatbots, and poll conversation and contact streams from a Chatling workspace.","auth":{"kind":"api-key","hint":"Chatling API key (Workspace Settings → API Keys). Sent as a bearer token on every request."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"send.message","description":"Send a user message to a configured Chatling chatbot and receive the assistant response synthesized over the chatbot’s trained corpus. Each call is a metered query against the tenant plan.","parameters":{"type":"object","properties":{"chatbot_id":{"type":"string","description":"ID of the chatbot to send the message to (workspace → chatbot → settings)."},"message":{"type":"string","description":"The user message to send to the chatbot."},"session_id":{"type":"string","description":"Conversation session ID. Pass the same value across turns to maintain context; omit or rotate for a fresh conversation."},"temperature":{"type":"number","description":"Controls response randomness (0 = focused, 1 = creative). Defaults to the chatbot configuration when omitted."},"instructions":{"type":"string","description":"Optional per-call instructions that augment the chatbot’s base system prompt for this turn only."}},"required":["chatbot_id","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"create.chatbot","description":"Provision a new Chatling chatbot in the authenticated workspace. Returns the new chatbot ID, which the caller should persist before sending messages.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Human-readable name for the new chatbot."},"message":{"type":"string","description":"Initial welcome message the chatbot greets users with."},"temperature":{"type":"number","description":"Default response temperature (0 = focused, 1 = creative). Optional; defaults to 0."},"instructions":{"type":"object","description":"Additional instructions object tailoring the chatbot’s behaviour (system prompt, persona, refusal policy)."}},"required":["name","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"conversations.list","description":"List recent conversations for a Chatling chatbot. Backs the activepieces \"new conversation\" trigger — callers poll this endpoint and diff against the last observed conversation ID.","parameters":{"type":"object","properties":{"chatbot_id":{"type":"string","description":"ID of the chatbot whose conversations to list."},"limit":{"type":"integer","description":"Maximum number of conversations to return (server-capped)."},"cursor":{"type":"string","description":"Opaque pagination cursor returned by a prior response."}},"required":["chatbot_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.list","description":"List recent contacts captured by a Chatling chatbot (users who left an email or identifier in chat). Backs the activepieces \"new contact\" trigger.","parameters":{"type":"object","properties":{"chatbot_id":{"type":"string","description":"ID of the chatbot whose contacts to list."},"limit":{"type":"integer","description":"Maximum number of contacts to return (server-capped)."},"cursor":{"type":"string","description":"Opaque pagination cursor returned by a prior response."}},"required":["chatbot_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"chatnode","displayName":"ChatNode","description":"Ask a trained ChatNode AI chatbot a question and receive a generated reply grounded in its workspace knowledge base.","auth":{"kind":"api-key","hint":"ChatNode workspace API key. Generate one from the ChatNode dashboard → Settings → API."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"chatbot.ask","description":"Send a user message to a trained ChatNode bot and receive a generated reply. Pass `chatSessionId` to continue an existing conversation; omit it to start a new session (ChatNode mints a fresh id server-side).","parameters":{"type":"object","properties":{"botId":{"type":"string","description":"Target bot id. Find it in the ChatNode dashboard under the bot URL (…/bots/{botId})."},"message":{"type":"string","description":"The user message to send to the bot."},"chatSessionId":{"type":"string","description":"Optional chat session id to keep a single conversation across calls. Find it in the chat URL after `/chats/`. If omitted, ChatNode generates a new session id and returns it on the response."}},"required":["botId","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"chatsistant","displayName":"Chatsistant","description":"Send messages to a Chatsistant chatbot.","auth":{"kind":"api-key","hint":"Chatsistant API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"message.send","description":"Send a message to a Chatsistant chatbot.","parameters":{"type":"object","properties":{"chatbot_uuid":{"type":"string"},"query":{"type":"string"},"session_uuid":{"type":"string"},"markdown":{"type":"boolean"}},"required":["chatbot_uuid","query","markdown"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversation.create","description":"Start a new Chatsistant conversation session for a chatbot.","parameters":{"type":"object","properties":{"chatbot_uuid":{"type":"string"},"metadata":{"type":"object"}},"required":["chatbot_uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"message.delete","description":"Delete a message from a Chatsistant conversation.","parameters":{"type":"object","properties":{"message_uuid":{"type":"string"}},"required":["message_uuid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"chatwoot","displayName":"Chatwoot","description":"Receive and reply to customer messages with Chatwoot.","auth":{"kind":"api-key","hint":"Chatwoot user API access token (Profile Settings → API Access Token). Sent as the `api_access_token` header."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"send.message","description":"Send a message (or private note) into an existing Chatwoot conversation.","parameters":{"type":"object","properties":{"accountId":{"type":"number","description":"Numeric Chatwoot account ID (visible in the dashboard URL)."},"conversationId":{"type":"number","description":"Numeric conversation display ID."},"content":{"type":"string","description":"Text message body to send."},"private":{"type":"boolean","description":"If true, posts as a private note visible only to agents, not to the contact."},"message_type":{"type":"string","enum":["outgoing","incoming"],"description":"Direction of the message. Defaults to `outgoing` (agent → contact)."}},"required":["accountId","conversationId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"toggle_status","description":"Toggle the status of an existing Chatwoot conversation (open, resolved, or pending).","parameters":{"type":"object","properties":{"account_id":{"type":"number","description":"Numeric Chatwoot account ID (visible in the dashboard URL)."},"conversation_id":{"type":"number","description":"Numeric conversation display ID."},"status":{"type":"string","enum":["open","resolved","pending"],"description":"New conversation status to apply."}},"required":["account_id","conversation_id","status"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assign_conversation","description":"Assign (or reassign) an existing Chatwoot conversation to a teammate by user id.","parameters":{"type":"object","properties":{"account_id":{"type":"number","description":"Numeric Chatwoot account ID (visible in the dashboard URL)."},"conversation_id":{"type":"number","description":"Numeric conversation display ID."},"assignee_id":{"type":"number","description":"Numeric user id of the Chatwoot teammate to assign the conversation to."}},"required":["account_id","conversation_id","assignee_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"checkout","displayName":"Checkout.com","description":"Manage Checkout.com customers, payment links, payouts, refunds, and payment lookups via the Unified Payments API.","auth":{"kind":"api-key","hint":"Checkout.com secret key (e.g., sk_...)."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.customer","description":"Create a customer record on Checkout.com.","parameters":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"},"phone":{"type":"object","properties":{"country_code":{"type":"string"},"number":{"type":"string"}}},"metadata":{"type":"object"},"default":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.customer","description":"Update an existing Checkout.com customer.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"phone":{"type":"object","properties":{"country_code":{"type":"string"},"number":{"type":"string"}}},"metadata":{"type":"object"},"default":{"type":"string"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.payment.link","description":"Create a hosted payment link customers can use to pay.","parameters":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"reference":{"type":"string"},"description":{"type":"string"},"billing":{"type":"object","properties":{"address":{"type":"object","properties":{"country":{"type":"string"},"address_line1":{"type":"string"},"address_line2":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"}}},"phone":{"type":"object","properties":{"country_code":{"type":"string"},"number":{"type":"string"}}}}},"customer":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"}}},"expires_in":{"type":"number"},"display_name":{"type":"string"},"return_url":{"type":"string"},"metadata":{"type":"object"}},"required":["amount","currency"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.payout","description":"Create a payout disbursing funds to a destination.","parameters":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"reference":{"type":"string"},"description":{"type":"string"},"source":{"type":"object"},"destination":{"type":"object"},"billing_descriptor":{"type":"object"},"metadata":{"type":"object"}},"required":["amount","currency","destination"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"refund.payment","description":"Refund a previously captured payment in full or in part.","parameters":{"type":"object","properties":{"paymentId":{"type":"string"},"amount":{"type":"number"},"reference":{"type":"string"},"metadata":{"type":"object"}},"required":["paymentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.payment.details","description":"Fetch the full payment object for a given payment id.","parameters":{"type":"object","properties":{"paymentId":{"type":"string"}},"required":["paymentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.payment.actions","description":"List the actions (authorize, capture, void, refund) recorded against a payment.","parameters":{"type":"object","properties":{"paymentId":{"type":"string"}},"required":["paymentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"chess-com","displayName":"Chess.com","description":"Read public Chess.com profiles, ratings, games, puzzles, leaderboards, clubs, countries, tournaments, and streaming data without credentials.","auth":{"kind":"none"},"category":"other","defaultConsistencyModel":"cache","rateLimit":{"requests":60,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"get.player.profile","class":"read","description":"Get the public profile for a Chess.com player.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Chess.com username, without a profile URL.","pattern":"^[A-Za-z0-9_-]{3,25}$"}},"required":["username"],"additionalProperties":false}},{"name":"get.player.stats","class":"read","description":"Get ratings and game statistics for a Chess.com player.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Chess.com username, without a profile URL.","pattern":"^[A-Za-z0-9_-]{3,25}$"}},"required":["username"],"additionalProperties":false}},{"name":"player.current-games","class":"read","description":"List a player’s currently ongoing daily games.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Chess.com username, without a profile URL.","pattern":"^[A-Za-z0-9_-]{3,25}$"}},"required":["username"],"additionalProperties":false}},{"name":"player.game-archives","class":"read","description":"List the monthly game archive URLs available for a player.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Chess.com username, without a profile URL.","pattern":"^[A-Za-z0-9_-]{3,25}$"}},"required":["username"],"additionalProperties":false}},{"name":"player.monthly-games","class":"read","description":"Get a player’s games for one calendar month as structured JSON.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Chess.com username, without a profile URL.","pattern":"^[A-Za-z0-9_-]{3,25}$"},"year":{"type":"integer","minimum":2007,"maximum":2100},"month":{"type":"integer","minimum":1,"maximum":12}},"required":["username","year","month"],"additionalProperties":false}},{"name":"player.monthly-pgn","class":"read","description":"Get a player’s games for one calendar month as a PGN document.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Chess.com username, without a profile URL.","pattern":"^[A-Za-z0-9_-]{3,25}$"},"year":{"type":"integer","minimum":2007,"maximum":2100},"month":{"type":"integer","minimum":1,"maximum":12}},"required":["username","year","month"],"additionalProperties":false}},{"name":"player.clubs","class":"read","description":"List the public clubs a player belongs to.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Chess.com username, without a profile URL.","pattern":"^[A-Za-z0-9_-]{3,25}$"}},"required":["username"],"additionalProperties":false}},{"name":"player.matches","class":"read","description":"List a player’s current and finished team matches.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Chess.com username, without a profile URL.","pattern":"^[A-Za-z0-9_-]{3,25}$"}},"required":["username"],"additionalProperties":false}},{"name":"player.tournaments","class":"read","description":"List a player’s current, registered, and finished tournaments.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Chess.com username, without a profile URL.","pattern":"^[A-Za-z0-9_-]{3,25}$"}},"required":["username"],"additionalProperties":false}},{"name":"get.daily.puzzle","class":"read","description":"Get the current Chess.com daily puzzle.","parameters":{"type":"object","properties":{},"additionalProperties":false}},{"name":"puzzle.random","class":"read","description":"Get a random Chess.com puzzle.","parameters":{"type":"object","properties":{},"additionalProperties":false}},{"name":"players.titled","class":"read","description":"List usernames holding a FIDE or national chess title.","parameters":{"type":"object","properties":{"title":{"type":"string","enum":["GM","WGM","IM","WIM","FM","WFM","NM","WNM","CM","WCM"]}},"required":["title"],"additionalProperties":false}},{"name":"leaderboards.get","class":"read","description":"Get current Chess.com leaderboards.","parameters":{"type":"object","properties":{},"additionalProperties":false}},{"name":"streamers.list","class":"read","description":"List Chess.com streamers and their public channels.","parameters":{"type":"object","properties":{},"additionalProperties":false}},{"name":"country.get","class":"read","description":"Get public information for a country.","parameters":{"type":"object","properties":{"country":{"type":"string","description":"Two-letter ISO 3166 country code.","pattern":"^[A-Za-z]{2}$"}},"required":["country"],"additionalProperties":false}},{"name":"country.players","class":"read","description":"List Chess.com players registered to a country.","parameters":{"type":"object","properties":{"country":{"type":"string","description":"Two-letter ISO 3166 country code.","pattern":"^[A-Za-z]{2}$"}},"required":["country"],"additionalProperties":false}},{"name":"country.clubs","class":"read","description":"List Chess.com clubs registered to a country.","parameters":{"type":"object","properties":{"country":{"type":"string","description":"Two-letter ISO 3166 country code.","pattern":"^[A-Za-z]{2}$"}},"required":["country"],"additionalProperties":false}},{"name":"club.get","class":"read","description":"Get public information for a Chess.com club.","parameters":{"type":"object","properties":{"club":{"type":"string","description":"Chess.com URL id (the final path segment of the public page URL).","pattern":"^[A-Za-z0-9_-]{1,100}$"}},"required":["club"],"additionalProperties":false}},{"name":"club.members","class":"read","description":"List members of a Chess.com club, grouped by activity.","parameters":{"type":"object","properties":{"club":{"type":"string","description":"Chess.com URL id (the final path segment of the public page URL).","pattern":"^[A-Za-z0-9_-]{1,100}$"}},"required":["club"],"additionalProperties":false}},{"name":"club.matches","class":"read","description":"List a Chess.com club’s current and finished team matches.","parameters":{"type":"object","properties":{"club":{"type":"string","description":"Chess.com URL id (the final path segment of the public page URL).","pattern":"^[A-Za-z0-9_-]{1,100}$"}},"required":["club"],"additionalProperties":false}},{"name":"club.admins","class":"read","description":"List public administrators for a Chess.com club.","parameters":{"type":"object","properties":{"club":{"type":"string","description":"Chess.com URL id (the final path segment of the public page URL).","pattern":"^[A-Za-z0-9_-]{1,100}$"}},"required":["club"],"additionalProperties":false}},{"name":"tournament.get","class":"read","description":"Get public details for a Chess.com tournament.","parameters":{"type":"object","properties":{"tournament":{"type":"string","description":"Chess.com URL id (the final path segment of the public page URL).","pattern":"^[A-Za-z0-9_-]{1,100}$"}},"required":["tournament"],"additionalProperties":false}},{"name":"tournament.round","class":"read","description":"Get one round of a Chess.com tournament.","parameters":{"type":"object","properties":{"tournament":{"type":"string","description":"Chess.com URL id (the final path segment of the public page URL).","pattern":"^[A-Za-z0-9_-]{1,100}$"},"round":{"type":"integer","minimum":1}},"required":["tournament","round"],"additionalProperties":false}},{"name":"tournament.group","class":"read","description":"Get one group within a Chess.com tournament round.","parameters":{"type":"object","properties":{"tournament":{"type":"string","description":"Chess.com URL id (the final path segment of the public page URL).","pattern":"^[A-Za-z0-9_-]{1,100}$"},"round":{"type":"integer","minimum":1},"group":{"type":"integer","minimum":1}},"required":["tournament","round","group"],"additionalProperties":false}}]},{"kind":"circle","displayName":"Circle","description":"Create posts and comments, manage members, and look up community details on Circle.so.","auth":{"kind":"api-key","hint":"Circle.so admin V1 API token (sent as Authorization: Token <token>)."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"posts.create","description":"Create a new post in a Circle space.","parameters":{"type":"object","properties":{"space_id":{"type":"integer"},"name":{"type":"string"},"text_body":{"type":"string"},"tiptap_body_json":{"type":"object"},"status":{"type":"string"},"published_at":{"type":"string"},"is_comments_enabled":{"type":"boolean"},"user_email":{"type":"string"}},"required":["space_id","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Create a comment on a Circle post, optionally as a reply to another comment.","parameters":{"type":"object","properties":{"post_id":{"type":"integer"},"body":{"type":"string"},"parent_comment_id":{"type":"integer"},"skip_notifications":{"type":"boolean"},"user_email":{"type":"string"}},"required":["post_id","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"spaces.add_member","description":"Add an existing community member to a Circle space by email.","parameters":{"type":"object","properties":{"space_id":{"type":"integer"},"email":{"type":"string"}},"required":["space_id","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"members.find_by_email","description":"Look up a community member by their email address.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"posts.get","description":"Get details for a Circle post by id.","parameters":{"type":"object","properties":{"post_id":{"type":"integer"}},"required":["post_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"members.get","description":"Get details for a community member by id.","parameters":{"type":"object","properties":{"community_member_id":{"type":"integer"}},"required":["community_member_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"posts.delete","description":"Delete a Circle post by id.","parameters":{"type":"object","properties":{"post_id":{"type":"integer"}},"required":["post_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.delete","description":"Delete a Circle comment by id.","parameters":{"type":"object","properties":{"comment_id":{"type":"integer"}},"required":["comment_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"spaces.create","description":"Create a new space in a Circle community.","parameters":{"type":"object","properties":{"name":{"type":"string"},"space_group_id":{"type":"integer"},"visibility":{"type":"string"},"is_private":{"type":"boolean"},"slug":{"type":"string"}},"required":["name","space_group_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"members.remove","description":"Remove a member from a Circle space.","parameters":{"type":"object","properties":{"space_id":{"type":"integer"},"email":{"type":"string"}},"required":["space_id","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"claude","displayName":"Anthropic Claude","description":"Send messages to Claude AI and extract structured data.","auth":{"kind":"api-key","hint":"Anthropic API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"ask.claude","description":"Send a message to Claude and get a response.","parameters":{"type":"object","properties":{"model":{"type":"string","default":"claude-3-5-sonnet-20241022"},"messages":{"type":"array"},"max_tokens":{"type":"integer","default":1024},"system":{"type":"string"},"temperature":{"type":"number","default":1}},"required":["messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"extract.structured.data","description":"Extract structured data from text using Claude.","parameters":{"type":"object","properties":{"text":{"type":"string"},"schema":{"type":"object"},"model":{"type":"string","default":"claude-3-5-sonnet-20241022"},"max_tokens":{"type":"integer","default":1024}},"required":["text","schema"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"clay","displayName":"Clay","description":"Push rows into a Clay table to trigger GTM enrichment workflows. Clay has no general REST API — this sends a JSON row to your table’s inbound webhook URL; enriched results flow back out via Clay’s HTTP API action (received through the clay webhook provider).","auth":{"kind":"api-key","hint":"Optional Clay table webhook token (x-clay-webhook-auth), shown once when you add a webhook source to a table. Leave blank if the table’s webhook has no token. The per-table webhook URL goes in the connection metadata as `webhookUrl`."},"category":"crm","defaultConsistencyModel":"advisory","capabilities":[{"name":"push_row","class":"mutation","description":"Send a flat JSON object to the configured Clay table webhook URL, creating a new row. Keys map to table columns (no fixed schema). Processing is asynchronous — the response acknowledges receipt but does not return enriched data.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","additionalProperties":true,"description":"Flat JSON whose keys become Clay table columns, e.g. { \"firstName\": \"Jane\", \"email\": \"jane@acme.com\", \"company\": \"Acme\" }."}}]},{"kind":"clearout","displayName":"Clearout","description":"Bulk and instant email validation/verification via the Clearout REST API.","auth":{"kind":"api-key","hint":"Clearout API token (Dashboard → Settings → API Tokens). Sent as Bearer."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"instant.verify","description":"Verify a single email address in real time. Returns deliverability status, role/disposable/free flags, MX records, and a confidence score.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"The email address to verify."},"timeout":{"type":"integer","description":"Optional per-request timeout in seconds (Clearout default applies if omitted). Useful when batching from a queue."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bulk.verify.start","description":"Start a bulk email verification job for a previously-uploaded list. Returns a list_id to poll for status.","parameters":{"type":"object","properties":{"list_id":{"type":"string","description":"Clearout list_id returned by the file upload endpoint."}},"required":["list_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bulk.verify.cancel","description":"Cancel a running bulk email verification job by its list_id.","parameters":{"type":"object","properties":{"list_id":{"type":"string","description":"Clearout list_id of the running bulk job to cancel."}},"required":["list_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"clearoutphone","displayName":"ClearoutPhone","description":"Phone number validation, verification, and carrier detection via ClearoutPhone REST API.","auth":{"kind":"api-key","hint":"ClearoutPhone API token. Sent as Bearer."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"find.phone.number.carrier","description":"Identify the carrier of a phone number.","parameters":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"The phone number to validate (e.g., +447766733573)."}},"required":["phoneNumber"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"find.phone.number.is.mobile","description":"Determine if a phone number is mobile.","parameters":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"The phone number to validate (e.g., +447766733573)."}},"required":["phoneNumber"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"validate.phone.number","description":"Validate a phone number. Returns validation status, carrier info, and mobile flag.","parameters":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"The phone number to validate (e.g., +447766733573)."}},"required":["phoneNumber"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bulk.verify.start","description":"Start a bulk phone verification job for a previously-uploaded list. Returns a list_id to poll for status.","parameters":{"type":"object","properties":{"list_id":{"type":"string","description":"ClearoutPhone list_id returned by the file upload endpoint."}},"required":["list_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bulk.verify.cancel","description":"Cancel a running bulk phone verification job by its list_id.","parameters":{"type":"object","properties":{"list_id":{"type":"string","description":"ClearoutPhone list_id of the running bulk job to cancel."}},"required":["list_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"clicdata","displayName":"ClicData","description":"Connect, transform, automate, visualize and share data from 300+ sources via the ClicData analytics platform.","auth":{"kind":"oauth2","authorizationUrl":"https://app.clicdata.com/oauth/authorize","tokenUrl":"https://api.clicdata.com/oauth/token","scopes":["read","write"],"clientIdEnv":"CLICDATA_OAUTH_CLIENT_ID","clientSecretEnv":"CLICDATA_OAUTH_CLIENT_SECRET"},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.get","description":"Get the authenticated ClicData account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"datasets.list","description":"List ClicData datasets visible to the authenticated account.","parameters":{"type":"object","properties":{"page":{"type":"integer"},"page_size":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"datasets.get","description":"Retrieve a single ClicData dataset by id.","parameters":{"type":"object","properties":{"datasetId":{"type":"string"}},"required":["datasetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"datasets.rows","description":"Read rows from a ClicData dataset.","parameters":{"type":"object","properties":{"datasetId":{"type":"string"},"page":{"type":"integer"},"page_size":{"type":"integer"}},"required":["datasetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"dashboards.list","description":"List ClicData dashboards in the workspace.","parameters":{"type":"object","properties":{"page":{"type":"integer"},"page_size":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"dashboards.get","description":"Retrieve a single ClicData dashboard.","parameters":{"type":"object","properties":{"dashboardId":{"type":"string"}},"required":["dashboardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"datasets.rows.append","description":"Append rows to a ClicData dataset.","parameters":{"type":"object","properties":{"datasetId":{"type":"string"},"rows":{"type":"array"}},"required":["datasetId","rows"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"datasets.rows.replace","description":"Replace all rows in a ClicData dataset.","parameters":{"type":"object","properties":{"datasetId":{"type":"string"},"rows":{"type":"array"}},"required":["datasetId","rows"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"datasets.refresh","description":"Trigger a refresh of a ClicData dataset against its source.","parameters":{"type":"object","properties":{"datasetId":{"type":"string"}},"required":["datasetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"datasets.clear","description":"Clear all rows from a ClicData dataset.","parameters":{"type":"object","properties":{"datasetId":{"type":"string"}},"required":["datasetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"datasets.create","description":"Create a new ClicData dataset.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"category_id":{"type":"integer"},"columns":{"type":"array"}},"required":["name","columns"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"datasets.delete","description":"Delete a ClicData dataset by id.","parameters":{"type":"object","properties":{"datasetId":{"type":"string"}},"required":["datasetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"dashboards.refresh","description":"Trigger a refresh of all data backing a ClicData dashboard.","parameters":{"type":"object","properties":{"dashboardId":{"type":"string"}},"required":["dashboardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"clickfunnels","displayName":"ClickFunnels","description":"Create and manage contacts, opportunities, and tags in ClickFunnels.","auth":{"kind":"api-key","hint":"ClickFunnels API key from account settings."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.search","description":"Search contacts by email or ID.","parameters":{"type":"object","properties":{"searchTerm":{"type":"string"}},"required":["searchTerm"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create or update a contact.","parameters":{"type":"object","properties":{"emailAddress":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"phoneNumber":{"type":"string"},"customAttributes":{"type":"object"}},"required":["emailAddress"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.create","description":"Create an opportunity.","parameters":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"number"},"closedAt":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.apply","description":"Apply a tag to a contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"tagId":{"type":"string"}},"required":["contactId","tagId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.remove","description":"Remove a tag from a contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"tagId":{"type":"string"}},"required":["contactId","tagId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"courses.enroll","description":"Enroll a contact into a course.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"courseId":{"type":"string"}},"required":["contactId","courseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"clicksend","displayName":"ClickSend","description":"Send and track SMS or voice messages, and manage ClickSend contact lists.","auth":{"kind":"api-key","hint":"JSON containing username and apiKey from the ClickSend dashboard."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.get","description":"Read account details and balance.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.list","description":"List contact lists.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.get","description":"Read one contact list.","parameters":{"type":"object","properties":{"listId":{"type":"integer"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.create","description":"Create a contact list.","parameters":{"type":"object","properties":{"listName":{"type":"string"}},"required":["listName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"lists.update","description":"Rename a contact list.","parameters":{"type":"object","properties":{"listId":{"type":"integer"},"listName":{"type":"string"}},"required":["listId","listName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"lists.delete","description":"Delete a contact list.","parameters":{"type":"object","properties":{"listId":{"type":"integer"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.list","description":"List contacts in a list.","parameters":{"type":"object","properties":{"listId":{"type":"integer"},"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1},"updatedAfter":{"type":"integer"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.get","description":"Read one contact.","parameters":{"type":"object","properties":{"listId":{"type":"integer"},"contactId":{"type":"integer"}},"required":["listId","contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Add a contact to a list.","parameters":{"type":"object","properties":{"listId":{"type":"integer"},"contact":{"type":"object","description":"ClickSend Contact model including phone_number."}},"required":["listId","contact"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"contacts.update","description":"Update a contact.","parameters":{"type":"object","properties":{"listId":{"type":"integer"},"contactId":{"type":"integer"},"contact":{"type":"object","description":"ClickSend Contact model."}},"required":["listId","contactId","contact"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.delete","description":"Delete a contact from a list.","parameters":{"type":"object","properties":{"listId":{"type":"integer"},"contactId":{"type":"integer"}},"required":["listId","contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"sms.history","description":"List sent SMS history.","parameters":{"type":"object","properties":{"query":{"type":"string"},"dateFrom":{"type":"integer"},"dateTo":{"type":"integer"},"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sms.inbound.list","description":"List inbound SMS messages.","parameters":{"type":"object","properties":{"query":{"type":"string"},"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sms.receipts.list","description":"List SMS delivery receipts.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sms.send","description":"Send up to 1,000 SMS messages in one request.","parameters":{"type":"object","properties":{"messages":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object"}}},"required":["messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"sms.cancel","description":"Cancel a scheduled SMS message.","parameters":{"type":"object","properties":{"messageId":{"type":"string"}},"required":["messageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"voice.history","description":"List voice message history.","parameters":{"type":"object","properties":{"dateFrom":{"type":"integer"},"dateTo":{"type":"integer"},"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"voice.send","description":"Send voice messages.","parameters":{"type":"object","properties":{"messages":{"type":"array","minItems":1,"items":{"type":"object"}}},"required":["messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"voice.cancel","description":"Cancel a scheduled voice message.","parameters":{"type":"object","properties":{"messageId":{"type":"string"}},"required":["messageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"clickup","displayName":"ClickUp","description":"Read and mutate ClickUp workspaces, spaces, folders, lists, tasks, comments, and time entries via the ClickUp REST v2 API.","auth":{"kind":"one_of","preferred":"oauth2","options":[{"kind":"api-key","hint":"ClickUp personal API token (starts with pk_)."},{"kind":"oauth2","authorizationUrl":"https://app.clickup.com/api","tokenUrl":"https://api.clickup.com/api/v2/oauth/token","scopes":[],"clientIdEnv":"CLICKUP_OAUTH_CLIENT_ID","clientSecretEnv":"CLICKUP_OAUTH_CLIENT_SECRET"}]},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"user.get","description":"Return the ClickUp user that authorized the connection.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"teams.list","description":"List the Workspaces (ClickUp calls these \"teams\" on the wire) the authorized user belongs to.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"spaces.list","description":"List Spaces inside a Workspace.","parameters":{"type":"object","properties":{"teamId":{"type":"string","description":"Workspace id."},"archived":{"type":"boolean"}},"required":["teamId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"spaces.get","description":"Read a single Space by id.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"}},"required":["spaceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"folders.list","description":"List Folders inside a Space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"archived":{"type":"boolean"}},"required":["spaceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.list","description":"List Lists inside a Folder.","parameters":{"type":"object","properties":{"folderId":{"type":"string"},"archived":{"type":"boolean"}},"required":["folderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.folderless","description":"List Lists that live directly under a Space (no Folder).","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"archived":{"type":"boolean"}},"required":["spaceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.get","description":"Read a single List by id.","parameters":{"type":"object","properties":{"listId":{"type":"string"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.list","description":"List tasks in a List with optional filters (status, assignee, date range, custom fields).","parameters":{"type":"object","properties":{"listId":{"type":"string"},"archived":{"type":"boolean"},"page":{"type":"integer","minimum":0},"order_by":{"type":"string","enum":["id","created","updated","due_date"]},"reverse":{"type":"boolean"},"subtasks":{"type":"boolean"},"include_closed":{"type":"boolean"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.get","description":"Read a single task by id, with optional subtasks expansion.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"custom_task_ids":{"type":"boolean"},"team_id":{"type":"string"},"include_subtasks":{"type":"boolean"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.search","description":"Search tasks across a Workspace with filtered views (assignees, statuses, tags, due window, etc.).","parameters":{"type":"object","properties":{"teamId":{"type":"string"},"page":{"type":"integer","minimum":0},"order_by":{"type":"string","enum":["id","created","updated","due_date"]},"reverse":{"type":"boolean"},"include_closed":{"type":"boolean"}},"required":["teamId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.create","description":"Create a task inside a List.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"task":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"assignees":{"type":"array","items":{"type":"integer"}},"tags":{"type":"array","items":{"type":"string"}},"status":{"type":"string"},"priority":{"type":"integer","minimum":1,"maximum":4},"due_date":{"type":"integer","description":"Unix epoch ms."},"due_date_time":{"type":"boolean"},"time_estimate":{"type":"integer","description":"Milliseconds."},"start_date":{"type":"integer"},"start_date_time":{"type":"boolean"},"notify_all":{"type":"boolean"},"parent":{"type":"string","description":"Task id of the parent for a subtask."},"links_to":{"type":"string"},"custom_fields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"value":{}},"required":["id","value"]}}},"required":["name"]}},"required":["listId","task"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update fields on an existing task.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"patch":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string"},"priority":{"type":"integer","minimum":1,"maximum":4},"due_date":{"type":"integer"},"due_date_time":{"type":"boolean"},"time_estimate":{"type":"integer"},"start_date":{"type":"integer"},"start_date_time":{"type":"boolean"},"assignees":{"type":"object","properties":{"add":{"type":"array","items":{"type":"integer"}},"rem":{"type":"array","items":{"type":"integer"}}}},"archived":{"type":"boolean"}}}},"required":["taskId","patch"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.delete","description":"Delete a task by id.","parameters":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"tasks.setCustomField","description":"Set or replace a custom field value on a task. Body shape depends on field type — pass the documented `value` payload verbatim.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"fieldId":{"type":"string"},"payload":{"type":"object","properties":{"value":{},"value_options":{"type":"object"}},"required":["value"]}},"required":["taskId","fieldId","payload"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"comments.list","description":"List comments on a task.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"start":{"type":"integer","description":"Pagination cursor — comment date in ms."},"start_id":{"type":"string"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"comments.create","description":"Post a comment on a task.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"comment":{"type":"object","properties":{"comment_text":{"type":"string"},"assignee":{"type":"integer"},"notify_all":{"type":"boolean"}},"required":["comment_text"]}},"required":["taskId","comment"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"timeEntries.list","description":"List time entries in a Workspace within an optional date window.","parameters":{"type":"object","properties":{"teamId":{"type":"string"},"start_date":{"type":"integer","description":"Unix epoch ms."},"end_date":{"type":"integer","description":"Unix epoch ms."},"assignee":{"type":"string","description":"Comma-separated user ids."},"include_task_tags":{"type":"boolean"},"include_location_names":{"type":"boolean"},"space_id":{"type":"string"},"folder_id":{"type":"string"},"list_id":{"type":"string"},"task_id":{"type":"string"}},"required":["teamId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"timeEntries.create","description":"Create a tracked time entry in a Workspace.","parameters":{"type":"object","properties":{"teamId":{"type":"string"},"entry":{"type":"object","properties":{"description":{"type":"string"},"tags":{"type":"array"},"start":{"type":"integer","description":"Unix epoch ms."},"billable":{"type":"boolean"},"duration":{"type":"integer","description":"Milliseconds."},"assignee":{"type":"integer"},"tid":{"type":"string","description":"Task id."}},"required":["start","duration"]}},"required":["teamId","entry"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"clio","displayName":"Clio","description":"Read and mutate Clio Manage contacts, matters, tasks, time-entry activities, and notes via the Clio v4 REST API.","auth":{"kind":"oauth2","authorizationUrl":"https://app.clio.com/oauth/authorize","tokenUrl":"https://app.clio.com/oauth/token","scopes":[],"clientIdEnv":"CLIO_OAUTH_CLIENT_ID","clientSecretEnv":"CLIO_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.whoami","description":"Return the Clio user whose token is currently authorizing the connection.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.list","description":"List Clio contacts (people and companies). Supports the Clio query parameter for free-text search and the standard limit/page pagination.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search term."},"type":{"type":"string","enum":["Person","Company"],"description":"Filter to people or companies only."},"limit":{"type":"integer","minimum":1,"maximum":200},"page_token":{"type":"string","description":"Cursor returned by a prior page."},"fields":{"type":"string","description":"Comma-separated v4 field selector (e.g. \"id,name,primary_email_address\")."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.get","description":"Read a single Clio contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"fields":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create a Clio contact (person or company). Body must be wrapped in Clio's {data: {...}} envelope.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Clio contact attributes (name, type, email_addresses, phone_numbers, etc.)."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update a Clio contact by id. Uses etag If-Match for optimistic concurrency.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"data":{"type":"object"}},"required":["contactId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"matters.list","description":"List Clio matters (cases). Filter by status, responsible attorney, client, or free-text query.","parameters":{"type":"object","properties":{"query":{"type":"string"},"status":{"type":"string","enum":["Open","Pending","Closed"]},"client_id":{"type":"string"},"responsible_attorney_id":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":200},"page_token":{"type":"string"},"fields":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"matters.get","description":"Read a single Clio matter by id.","parameters":{"type":"object","properties":{"matterId":{"type":"string"},"fields":{"type":"string"}},"required":["matterId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"matters.create","description":"Create a Clio matter (legal case).","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Clio matter attributes: description, client (object with id), practice_area (object with id), responsible_attorney, status, etc."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"matters.update","description":"Update a Clio matter by id.","parameters":{"type":"object","properties":{"matterId":{"type":"string"},"data":{"type":"object"}},"required":["matterId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"tasks.list","description":"List Clio tasks. Filter by matter, assignee, status, or due date.","parameters":{"type":"object","properties":{"matter_id":{"type":"string"},"assignee_id":{"type":"string"},"status":{"type":"string","enum":["pending","in_progress","complete"]},"due_at_from":{"type":"string","description":"ISO 8601 lower bound."},"due_at_to":{"type":"string","description":"ISO 8601 upper bound."},"limit":{"type":"integer","minimum":1,"maximum":200},"page_token":{"type":"string"},"fields":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.get","description":"Read a single Clio task by id.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"fields":{"type":"string"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.create","description":"Create a Clio task.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Clio task attributes: name, description, due_at, priority, assignee (object with id), matter (object with id), status."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update a Clio task by id.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"data":{"type":"object"}},"required":["taskId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"activities.list","description":"List Clio activities (time and expense entries). Filter by matter, user, type, or date range.","parameters":{"type":"object","properties":{"matter_id":{"type":"string"},"user_id":{"type":"string"},"type":{"type":"string","enum":["TimeEntry","ExpenseEntry"]},"date_from":{"type":"string","description":"ISO 8601 date lower bound."},"date_to":{"type":"string","description":"ISO 8601 date upper bound."},"limit":{"type":"integer","minimum":1,"maximum":200},"page_token":{"type":"string"},"fields":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"activities.create","description":"Log a Clio activity (billable time or expense entry) against a matter.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Clio activity attributes: type (\"TimeEntry\"|\"ExpenseEntry\"), date, quantity (seconds for time / units for expense), price, matter (object with id), activity_description (object with id), note, non_billable."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.list","description":"List Clio notes scoped to a matter or contact.","parameters":{"type":"object","properties":{"matter_id":{"type":"string"},"contact_id":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":200},"page_token":{"type":"string"},"fields":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"notes.create","description":"Create a Clio note attached to a matter or contact.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Clio note attributes: subject, detail, type (\"Matter\"|\"Contact\"), and the parent reference (matter or contact object with id)."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"clockify","displayName":"Clockify","description":"Create tasks and time entries, start/stop timers, and look up running timers in Clockify.","auth":{"kind":"api-key","hint":"Clockify API key (Profile Settings → API)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"task.create","description":"Create a task on a project within a workspace.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"projectId":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"}},"required":["workspaceId","projectId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"time.entry.create","description":"Create a time entry in a workspace.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"},"description":{"type":"string"},"projectId":{"type":"string"},"taskId":{"type":"string"},"billable":{"type":"boolean"}},"required":["workspaceId","start","end"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"timer.running.find","description":"Find the currently running timer for a user in a workspace.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"userId":{"type":"string"}},"required":["workspaceId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"task.find","description":"Search tasks on a project by name.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"projectId":{"type":"string"},"name":{"type":"string"},"exactMatch":{"type":"boolean"}},"required":["workspaceId","projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"time.entry.find","description":"List a user’s time entries in a workspace, optionally filtered by description.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"userId":{"type":"string"},"description":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"}},"required":["workspaceId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"timer.start","description":"Start a timer (open-ended time entry) for the authenticated user.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"start":{"type":"string"},"description":{"type":"string"},"projectId":{"type":"string"},"taskId":{"type":"string"},"billable":{"type":"boolean"}},"required":["workspaceId","start"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"timer.stop","description":"Stop the currently running timer for a user by setting its end time.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"userId":{"type":"string"},"end":{"type":"string"}},"required":["workspaceId","userId","end"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"time.entry.update","description":"Edit an existing time entry in a workspace by id.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"id":{"type":"string","description":"Time entry id."},"start":{"type":"string"},"end":{"type":"string"},"description":{"type":"string"},"projectId":{"type":"string"},"taskId":{"type":"string"},"billable":{"type":"boolean"}},"required":["workspaceId","id","start"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"time.entry.delete","description":"Delete a time entry from a workspace by id.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"id":{"type":"string","description":"Time entry id to delete."}},"required":["workspaceId","id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"project.create","description":"Create a project in a workspace.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"name":{"type":"string"},"clientId":{"type":"string"},"isPublic":{"type":"boolean"},"billable":{"type":"boolean"},"color":{"type":"string"},"note":{"type":"string"}},"required":["workspaceId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"clockodo","displayName":"Clockodo","description":"Read and manage Clockodo time entries, customers, projects, services, users, and absences for time-tracking automation.","auth":{"kind":"api-key","hint":"Clockodo API user email and API key, sent as X-ClockodoApiUser and X-ClockodoApiKey headers."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"entries.find","description":"List time entries within a date range, optionally filtered by user, customer, project, service, billable, or billed flags.","parameters":{"type":"object","properties":{"time_since":{"type":"string"},"time_until":{"type":"string"},"users_id":{"type":"integer"},"customers_id":{"type":"integer"},"projects_id":{"type":"integer"},"services_id":{"type":"integer"},"billable":{"type":"integer"},"billed":{"type":"boolean"},"page":{"type":"integer"}},"required":["time_since","time_until"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"entries.get","description":"Fetch a single Clockodo time entry by id.","parameters":{"type":"object","properties":{"entryId":{"type":"integer"}},"required":["entryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"entries.create","description":"Create a Clockodo time entry for a customer/project/service.","parameters":{"type":"object","properties":{"customers_id":{"type":"integer"},"projects_id":{"type":"integer"},"services_id":{"type":"integer"},"users_id":{"type":"integer"},"billable":{"type":"integer"},"time_since":{"type":"string"},"time_until":{"type":"string"},"text":{"type":"string"},"hourly_rate":{"type":"number"}},"required":["customers_id","services_id","billable","time_since","time_until"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"entries.update","description":"Update a Clockodo time entry.","parameters":{"type":"object","properties":{"entryId":{"type":"integer"},"customers_id":{"type":"integer"},"projects_id":{"type":"integer"},"services_id":{"type":"integer"},"billable":{"type":"integer"},"time_since":{"type":"string"},"time_until":{"type":"string"},"text":{"type":"string"},"hourly_rate":{"type":"number"}},"required":["entryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"entries.delete","description":"Delete a Clockodo time entry by id.","parameters":{"type":"object","properties":{"entryId":{"type":"integer"}},"required":["entryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.find","description":"List Clockodo customers, optionally filtered by active status.","parameters":{"type":"object","properties":{"active":{"type":"boolean"},"page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.get","description":"Fetch a single Clockodo customer by id.","parameters":{"type":"object","properties":{"customerId":{"type":"integer"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.create","description":"Create a Clockodo customer.","parameters":{"type":"object","properties":{"name":{"type":"string"},"number":{"type":"string"},"active":{"type":"boolean"},"billable_default":{"type":"boolean"},"note":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.find","description":"List Clockodo projects, optionally scoped to a customer.","parameters":{"type":"object","properties":{"customers_id":{"type":"integer"},"active":{"type":"boolean"},"page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.create","description":"Create a Clockodo project under a customer.","parameters":{"type":"object","properties":{"name":{"type":"string"},"customers_id":{"type":"integer"},"active":{"type":"boolean"},"billable_default":{"type":"boolean"},"note":{"type":"string"}},"required":["name","customers_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"services.find","description":"List Clockodo services.","parameters":{"type":"object","properties":{"active":{"type":"boolean"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.find","description":"List Clockodo users (co-workers) in the account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"absences.find","description":"List Clockodo absences in a given year, optionally filtered by user.","parameters":{"type":"object","properties":{"year":{"type":"integer"},"users_id":{"type":"integer"}},"required":["year"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"absences.create","description":"Create a Clockodo absence (vacation, sick day, etc.) for a user.","parameters":{"type":"object","properties":{"date_since":{"type":"string"},"date_until":{"type":"string"},"type":{"type":"integer"},"users_id":{"type":"integer"},"status":{"type":"integer"},"note":{"type":"string"},"half_days":{"type":"boolean"},"sick_note":{"type":"boolean"}},"required":["date_since","date_until","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"absences.delete","description":"Delete a Clockodo absence by id.","parameters":{"type":"object","properties":{"absenceId":{"type":"integer"}},"required":["absenceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"close","displayName":"Close","description":"Search and mutate Close CRM leads, contacts, and opportunities.","auth":{"kind":"oauth2","authorizationUrl":"https://app.close.com/oauth2/authorize/","tokenUrl":"https://api.close.com/oauth2/token/","scopes":["offline_access"],"clientIdEnv":"CLOSE_OAUTH_CLIENT_ID","clientSecretEnv":"CLOSE_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"leads.search","description":"List or search Close leads using the leads endpoint query string.","parameters":{"type":"object","properties":{"query":{"type":"string"},"_limit":{"type":"integer","minimum":1,"maximum":200},"_skip":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.get","description":"Read a single Close lead by id.","parameters":{"type":"object","properties":{"leadId":{"type":"string"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.create","description":"Create a Close lead.","parameters":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"},"description":{"type":"string"},"status_id":{"type":"string"},"contacts":{"type":"array","items":{"type":"object"}},"custom":{"type":"object"}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update","description":"Update a Close lead by id.","parameters":{"type":"object","properties":{"leadId":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"description":{"type":"string"},"status_id":{"type":"string"},"custom":{"type":"object"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.create","description":"Create a Close contact attached to a lead.","parameters":{"type":"object","properties":{"lead_id":{"type":"string"},"name":{"type":"string"},"title":{"type":"string"},"emails":{"type":"array","items":{"type":"object"}},"phones":{"type":"array","items":{"type":"object"}}},"required":["lead_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.create","description":"Create a Close opportunity on a lead.","parameters":{"type":"object","properties":{"lead_id":{"type":"string"},"note":{"type":"string"},"confidence":{"type":"integer","minimum":0,"maximum":100},"value":{"type":"integer","minimum":0},"value_period":{"type":"string","enum":["one_time","monthly","annual"]},"status_id":{"type":"string"}},"required":["lead_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.update","description":"Update a Close opportunity by id.","parameters":{"type":"object","properties":{"opportunityId":{"type":"string"},"note":{"type":"string"},"confidence":{"type":"integer","minimum":0,"maximum":100},"value":{"type":"integer","minimum":0},"value_period":{"type":"string","enum":["one_time","monthly","annual"]},"status_id":{"type":"string"}},"required":["opportunityId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"cloudconvert","displayName":"CloudConvert","description":"File conversion and processing platform supporting 200+ formats — convert, capture, merge, optimize, and archive files.","auth":{"kind":"oauth2","authorizationUrl":"https://cloudconvert.com/oauth/authorize","tokenUrl":"https://cloudconvert.com/oauth/token","scopes":["user.read","user.write","task.read","task.write"],"clientIdEnv":"CLOUDCONVERT_OAUTH_CLIENT_ID","clientSecretEnv":"CLOUDCONVERT_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"convert.file","description":"Convert a file from one format to another. Creates a job containing an import/url, convert, and export/url task chain.","parameters":{"type":"object","properties":{"input":{"type":"string","description":"Source URL or task id whose output to consume."},"input_format":{"type":"string","description":"Source format (e.g. \"docx\", \"png\"). Auto-detected when omitted."},"output_format":{"type":"string","description":"Target format (e.g. \"pdf\", \"jpg\")."},"filename":{"type":"string","description":"Output filename (without path)."},"engine":{"type":"string","description":"Specific conversion engine, e.g. \"office\", \"imagemagick\"."},"engine_version":{"type":"string"},"options":{"type":"object","description":"Engine-specific options (quality, dpi, page_range, etc.)."}},"required":["input","output_format"]},"requiredScopes":["task.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"capture.website","description":"Capture a website as PDF, PNG, or JPG by rendering the URL in CloudConvert's headless browser.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Fully-qualified URL to capture."},"output_format":{"type":"string","enum":["pdf","png","jpg"]},"filename":{"type":"string"},"pages":{"type":"string","description":"Page range for PDF output (e.g. \"1-3\")."},"zoom":{"type":"number"},"page_width":{"type":"number"},"page_height":{"type":"number"},"margin_top":{"type":"number"},"margin_bottom":{"type":"number"},"margin_left":{"type":"number"},"margin_right":{"type":"number"},"print_background":{"type":"boolean"},"display_header_footer":{"type":"boolean"},"wait_until":{"type":"string","enum":["load","domcontentloaded","networkidle0","networkidle2"]},"wait_for_element":{"type":"string","description":"CSS selector to wait for before capturing."},"wait_time":{"type":"integer","description":"Additional delay in ms after page load."}},"required":["url","output_format"]},"requiredScopes":["task.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"merge.pdf","description":"Merge multiple input PDFs into a single output PDF, preserving page order.","parameters":{"type":"object","properties":{"input":{"type":"array","items":{"type":"string"},"description":"Array of source URLs or task ids to merge."},"output_format":{"type":"string","enum":["pdf"],"default":"pdf"},"filename":{"type":"string"},"engine":{"type":"string"}},"required":["input"]},"requiredScopes":["task.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"download.file","description":"Read a task by id to obtain its status and, for export tasks, the signed download URL(s) under result.files.","parameters":{"type":"object","properties":{"taskId":{"type":"string","description":"Task id (typically the export/url task on a finished job)."},"include":{"type":"string","description":"Comma-separated relations to expand (e.g. \"job,depends_on_tasks\")."}},"required":["taskId"]},"requiredScopes":["task.read"],"class":"read"},{"name":"archive.file","description":"Archive (delete) a task. CloudConvert retains task results for 24h by default; this removes them and any associated stored file early.","parameters":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"]},"requiredScopes":["task.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"optimize.file","description":"Optimize a PDF or image to reduce file size while preserving acceptable quality. Engine and profile choose the trade-off.","parameters":{"type":"object","properties":{"input":{"type":"string","description":"Source URL or task id whose output to optimize."},"input_format":{"type":"string"},"output_format":{"type":"string","description":"Target format. Defaults to input_format."},"filename":{"type":"string"},"engine":{"type":"string"},"engine_version":{"type":"string"},"profile":{"type":"string","description":"Optimization profile (e.g. \"web\", \"print\", \"archive\", \"max\")."},"options":{"type":"object"}},"required":["input"]},"requiredScopes":["task.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"jobs.list","description":"List jobs filtered by status — backs the new.job / job.finished / job.failed triggers via polling.","parameters":{"type":"object","properties":{"status":{"type":"string","enum":["waiting","processing","finished","error"]},"tag":{"type":"string","description":"Filter by user-supplied job tag."},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}}},"requiredScopes":["task.read"],"class":"read"},{"name":"jobs.get","description":"Read a single job by id with its task graph, status, and any error payload.","parameters":{"type":"object","properties":{"jobId":{"type":"string"},"include":{"type":"string","description":"Comma-separated relations to expand (e.g. \"tasks,tasks.depends_on_tasks\")."}},"required":["jobId"]},"requiredScopes":["task.read"],"class":"read"}]},{"kind":"cloudflare","displayName":"Cloudflare","description":"Inspect Cloudflare accounts and zones, then manage DNS records with a dedicated scoped API token.","auth":{"kind":"api-key","hint":"Create a dedicated Cloudflare API token for Tangle Integration Hub. Grant Account Settings Read, Zone Read, Zone Settings Read, and DNS Read or DNS Edit only on selected resources. Never reuse a Tangle deployment, Workers, Terraform, or infrastructure token."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"auth.verify","description":"Verify that the current API token is valid and active.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.get","description":"Read one Cloudflare account and its settings.","parameters":{"type":"object","properties":{"accountId":{"type":"string","minLength":1}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"zones.list","description":"List or filter zones by account, domain, status, and type.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"perPage":{"type":"integer","minimum":5,"maximum":50},"accountId":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["initializing","pending","active","moved"]},"type":{"type":"string","description":"Comma-separated zone types."},"match":{"type":"string","enum":["any","all"]},"order":{"type":"string","enum":["name","status","account.id","account.name","plan.id"]},"direction":{"type":"string","enum":["asc","desc"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"zones.get","description":"Read one zone with status, nameservers, plan, and ownership metadata.","parameters":{"type":"object","properties":{"zoneId":{"type":"string","minLength":1,"description":"Cloudflare zone identifier."}},"required":["zoneId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"zones.settings.list","description":"List all settings for one zone.","parameters":{"type":"object","properties":{"zoneId":{"type":"string","minLength":1,"description":"Cloudflare zone identifier."}},"required":["zoneId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"zones.settings.get","description":"Read one setting for a zone.","parameters":{"type":"object","properties":{"zoneId":{"type":"string","minLength":1,"description":"Cloudflare zone identifier."},"settingId":{"type":"string","minLength":1}},"required":["zoneId","settingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"dns.records.list","description":"List and filter DNS records in one zone.","parameters":{"type":"object","properties":{"zoneId":{"type":"string","minLength":1,"description":"Cloudflare zone identifier."},"page":{"type":"integer","minimum":1},"perPage":{"type":"integer","minimum":5,"maximum":50},"type":{"type":"string"},"name":{"type":"string","description":"Exact record name."},"content":{"type":"string","description":"Exact record content."},"proxied":{"type":"boolean"},"match":{"type":"string","enum":["any","all"]},"order":{"type":"string","enum":["type","name","content","ttl","proxied"]},"direction":{"type":"string","enum":["asc","desc"]}},"required":["zoneId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"dns.records.get","description":"Read one DNS record by zone and record ID.","parameters":{"type":"object","properties":{"zoneId":{"type":"string","minLength":1,"description":"Cloudflare zone identifier."},"recordId":{"type":"string","minLength":1,"description":"Cloudflare DNS record identifier."}},"required":["zoneId","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"dns.records.export","description":"Export the current zone records as a BIND zone file before a change.","parameters":{"type":"object","properties":{"zoneId":{"type":"string","minLength":1,"description":"Cloudflare zone identifier."}},"required":["zoneId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"dns.records.create","description":"Create one DNS record in a selected zone.","parameters":{"type":"object","properties":{"zoneId":{"type":"string","minLength":1,"description":"Cloudflare zone identifier."},"record":{"type":"object","properties":{"type":{"type":"string","enum":["A","AAAA","CAA","CERT","CNAME","DNSKEY","DS","HTTPS","LOC","MX","NAPTR","NS","OPENPGPKEY","PTR","SMIMEA","SRV","SSHFP","SVCB","TLSA","TXT","URI"]},"name":{"type":"string","minLength":1,"description":"Complete DNS record name."},"content":{"type":"string","description":"Provider-native record content."},"ttl":{"type":"integer","minimum":1,"maximum":86400,"description":"TTL in seconds. Use 1 for automatic."},"proxied":{"type":"boolean"},"priority":{"type":"integer"},"comment":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"data":{"type":"object","description":"Provider-native structured data for records such as SRV or CAA."},"settings":{"type":"object","description":"Provider-native DNS record settings."}},"required":["type","name"],"additionalProperties":false}},"required":["zoneId","record"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"dns.records.update","description":"Partially update one DNS record.","parameters":{"type":"object","properties":{"zoneId":{"type":"string","minLength":1,"description":"Cloudflare zone identifier."},"recordId":{"type":"string","minLength":1,"description":"Cloudflare DNS record identifier."},"changes":{"type":"object","properties":{"type":{"type":"string","enum":["A","AAAA","CAA","CERT","CNAME","DNSKEY","DS","HTTPS","LOC","MX","NAPTR","NS","OPENPGPKEY","PTR","SMIMEA","SRV","SSHFP","SVCB","TLSA","TXT","URI"]},"name":{"type":"string","minLength":1,"description":"Complete DNS record name."},"content":{"type":"string","description":"Provider-native record content."},"ttl":{"type":"integer","minimum":1,"maximum":86400,"description":"TTL in seconds. Use 1 for automatic."},"proxied":{"type":"boolean"},"priority":{"type":"integer"},"comment":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"data":{"type":"object","description":"Provider-native structured data for records such as SRV or CAA."},"settings":{"type":"object","description":"Provider-native DNS record settings."}},"additionalProperties":false}},"required":["zoneId","recordId","changes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"dns.records.delete","description":"Permanently delete one DNS record.","parameters":{"type":"object","properties":{"zoneId":{"type":"string","minLength":1,"description":"Cloudflare zone identifier."},"recordId":{"type":"string","minLength":1,"description":"Cloudflare DNS record identifier."}},"required":["zoneId","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"cloudinary","displayName":"Cloudinary","description":"Upload, transform, query, and delete media assets in the Cloudinary cloud-based image and video management platform.","auth":{"kind":"api-key","hint":"Cloudinary API key/secret pair scoped to a cloud_name (Basic auth against api.cloudinary.com)."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"upload.resource","description":"Upload a file (image, video, or raw asset) to Cloudinary. Maps to the Cloudinary upload endpoint.","parameters":{"type":"object","properties":{"file":{"type":"string","description":"Local path, remote URL, or base64 data URI of the asset to upload."},"public_id":{"type":"string","description":"Optional public ID to assign to the uploaded asset."},"folder":{"type":"string","description":"Cloudinary folder to upload into."},"tags":{"type":"string","description":"Comma-separated tags to attach to the uploaded asset."},"resource_type":{"type":"string","enum":["image","video","raw","auto"],"description":"Asset class. Defaults to image."},"overwrite":{"type":"boolean","description":"Overwrite an existing asset at the same public_id."}},"required":["file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"delete.resource","description":"Delete Cloudinary assets by explicit public IDs, by tag, or by prefix. Destructive — affected derived assets are also dropped unless keep_original is set.","parameters":{"type":"object","properties":{"deletion_mode":{"type":"string","enum":["public_ids","tag","prefix","all"],"description":"Strategy used to select assets for deletion."},"public_ids_manual":{"type":"string","description":"Comma-separated public IDs (up to 100) when deletion_mode=public_ids."},"tag_manual":{"type":"string","description":"Tag name when deletion_mode=tag (deletes up to 1000 assets)."},"prefix":{"type":"string","description":"Public-ID prefix when deletion_mode=prefix (deletes up to 1000 assets)."},"resource_type":{"type":"string","enum":["image","video","raw"],"description":"Asset class to target. Defaults to image."},"type":{"type":"string","enum":["upload","private","authenticated"],"description":"Delivery type of the assets to delete."},"keep_original":{"type":"boolean","description":"Delete only derived assets, keep the original."},"invalidate":{"type":"boolean","description":"Invalidate CDN cached copies after deletion (takes a few minutes to propagate)."}},"required":["deletion_mode"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.usage.report","description":"Generate a Cloudinary account usage report for a given date. Returns aggregate counters plus an optional per-transformation breakdown.","parameters":{"type":"object","properties":{"date":{"type":"string","description":"Report date in DD-MM-YYYY format. Must be within the last 3 months. Omit for the current date."},"include_breakdown":{"type":"boolean","description":"Include the detailed breakdown of transformation types and add-on usage."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"find.resource.by.public.id","description":"Look up a Cloudinary asset by its public ID and return its full metadata (size, format, URLs, tags).","parameters":{"type":"object","properties":{"public_id_manual":{"type":"string","description":"The asset public ID to look up."},"resource_type":{"type":"string","enum":["image","video","raw"],"description":"Asset class. Defaults to image."},"delivery_type":{"type":"string","enum":["upload","private","authenticated","fetch"],"description":"Delivery type of the asset."}},"required":["public_id_manual"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transform.resource","description":"Apply a transformation (resize, crop, format conversion, quality, border, rotation, opacity, raw chain) to an existing Cloudinary asset. Set generate_url_only=true to skip eager generation and only return the derived URL.","parameters":{"type":"object","properties":{"public_id_manual":{"type":"string","description":"Source asset public ID."},"resource_type":{"type":"string","enum":["image","video"],"description":"Source asset class. Defaults to image."},"delivery_type":{"type":"string","enum":["upload","private","authenticated","fetch"],"description":"Delivery type of the source asset."},"width":{"type":"number","description":"Target width in pixels."},"height":{"type":"number","description":"Target height in pixels."},"crop_mode":{"type":"string","enum":["scale","fit","fill","limit","thumb","crop","pad"],"description":"How to handle resizing when aspect ratios differ."},"gravity":{"type":"string","description":"Which part of the asset to focus on when cropping."},"format":{"type":"string","enum":["jpg","png","webp","avif","gif","auto"],"description":"Output format."},"quality":{"type":"string","description":"Image quality / compression level."},"border":{"type":"string","description":"Border specification (e.g. \"5px_solid_red\")."},"radius":{"type":"string","description":"Corner radius — number, list, or \"max\" for a circle."},"opacity":{"type":"number","description":"Transparency level (0–100, where 100 is fully opaque)."},"rotation":{"type":"number","description":"Rotation in degrees (0–360)."},"raw_transformation":{"type":"string","description":"Advanced: raw Cloudinary transformation string applied verbatim."},"generate_url_only":{"type":"boolean","description":"If true, only return the derived URL without forcing eager generation."}},"required":["public_id_manual"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"cloutly","displayName":"Cloutly","description":"Send review-invite requests to Cloutly customers via the public review-management API.","auth":{"kind":"api-key","hint":"Cloutly API key, forwarded as the x-api-key header alongside a fixed x-app identifier."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"reviews.sendInvite","description":"Send a review invite for a customer through a Cloutly campaign. Either email or phoneNumber must be provided as the delivery channel.","parameters":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string","description":"Customer email; required if phoneNumber is empty."},"phoneNumber":{"type":"string","description":"Customer phone number; required if email is empty."},"sourceCustomerId":{"type":"string"},"businessId":{"type":"string"},"campaignId":{"type":"string"},"inviteDelayDays":{"type":"integer","description":"Days to delay the invite before send."},"salesRepEmail":{"type":"string","description":"Email of the sales rep to associate with the review and customer."}},"required":["firstName","businessId","campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"coda","displayName":"Coda","description":"Read Coda docs and manipulate table rows: list docs, walk tables and columns, upsert and update rows, and create pages.","auth":{"kind":"api-key","hint":"Coda API token from https://coda.io/account."},"category":"spreadsheet","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.whoami","description":"Return information about the user associated with the API token.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"docs.list","description":"List Coda docs accessible to the token holder.","parameters":{"type":"object","properties":{"isOwner":{"type":"boolean"},"isPublished":{"type":"boolean"},"query":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"pageToken":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"docs.get","description":"Read metadata for a single Coda doc.","parameters":{"type":"object","properties":{"docId":{"type":"string"}},"required":["docId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pages.list","description":"List pages inside a doc.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"pageToken":{"type":"string"}},"required":["docId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tables.list","description":"List tables and views inside a doc.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"tableTypes":{"type":"string","description":"Comma-separated set of table|view."},"limit":{"type":"integer","minimum":1,"maximum":100},"pageToken":{"type":"string"}},"required":["docId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tables.get","description":"Read metadata for a specific table or view inside a doc.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"tableIdOrName":{"type":"string"}},"required":["docId","tableIdOrName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"columns.list","description":"List the columns of a table.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"tableIdOrName":{"type":"string"},"visibleOnly":{"type":"boolean"},"limit":{"type":"integer","minimum":1,"maximum":100},"pageToken":{"type":"string"}},"required":["docId","tableIdOrName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rows.list","description":"List rows from a table or view with optional filtering.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"tableIdOrName":{"type":"string"},"query":{"type":"string","description":"Filter expression of form <column>:<value>."},"sortBy":{"type":"string","enum":["createdAt","natural","updatedAt"]},"useColumnNames":{"type":"boolean"},"valueFormat":{"type":"string","enum":["simple","simpleWithArrays","rich"]},"visibleOnly":{"type":"boolean"},"limit":{"type":"integer","minimum":1,"maximum":500},"pageToken":{"type":"string"},"syncToken":{"type":"string"}},"required":["docId","tableIdOrName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rows.get","description":"Read a single row from a table.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"tableIdOrName":{"type":"string"},"rowIdOrName":{"type":"string"},"useColumnNames":{"type":"boolean"},"valueFormat":{"type":"string","enum":["simple","simpleWithArrays","rich"]}},"required":["docId","tableIdOrName","rowIdOrName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"formulas.get","description":"Return the computed value of a named formula inside a doc.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"formulaIdOrName":{"type":"string"},"valueFormat":{"type":"string","enum":["simple","simpleWithArrays","rich"]}},"required":["docId","formulaIdOrName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rows.upsert","description":"Insert or update rows in a table. Pass keyColumns to merge on a natural key; without it every row is appended.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"tableIdOrName":{"type":"string"},"rows":{"type":"array","description":"Each row is { cells: [{ column, value }] }.","items":{"type":"object"}},"keyColumns":{"type":"array","description":"Column IDs or names that uniquely identify a row for upsert merging.","items":{"type":"string"}},"disableParsing":{"type":"boolean"}},"required":["docId","tableIdOrName","rows"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rows.update","description":"Update an existing row in a table.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"tableIdOrName":{"type":"string"},"rowIdOrName":{"type":"string"},"row":{"type":"object","description":"Row payload of shape { cells: [{ column, value }] }."},"disableParsing":{"type":"boolean"}},"required":["docId","tableIdOrName","rowIdOrName","row"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"rows.delete","description":"Delete a row from a table.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"tableIdOrName":{"type":"string"},"rowIdOrName":{"type":"string"}},"required":["docId","tableIdOrName","rowIdOrName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rows.pushButton","description":"Trigger a button column on a row, executing the configured action.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"tableIdOrName":{"type":"string"},"rowIdOrName":{"type":"string"},"columnIdOrName":{"type":"string"}},"required":["docId","tableIdOrName","rowIdOrName","columnIdOrName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pages.create","description":"Create a new page inside a doc.","parameters":{"type":"object","properties":{"docId":{"type":"string"},"name":{"type":"string"},"subtitle":{"type":"string"},"iconName":{"type":"string"},"imageUrl":{"type":"string"},"parentPageId":{"type":"string"},"pageContent":{"type":"object","description":"Content payload as documented under PageContent in the Coda API reference."}},"required":["docId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"cody","displayName":"Cody","description":"Interact with Cody AI: manage conversations, send messages, upload documents, and search bots.","auth":{"kind":"api-key","hint":"Cody API key from your account settings."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"conversations.create","description":"Create a new conversation with optional focus documents.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Conversation name"},"document_ids":{"type":"array","items":{"type":"string"},"description":"Optional document IDs to focus the conversation"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.find","description":"Find conversations by name or list all conversations.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Search query for conversation name"},"limit":{"type":"integer","description":"Maximum results to return"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.send","description":"Send a message in a conversation.","parameters":{"type":"object","properties":{"conversation_id":{"type":"string","description":"Conversation ID"},"content":{"type":"string","description":"Message content"}},"required":["conversation_id","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.create","description":"Create a document from text content.","parameters":{"type":"object","properties":{"content":{"type":"string","description":"Text or HTML content (max 768 KB)"},"title":{"type":"string","description":"Document title"}},"required":["content","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.upload","description":"Upload a file document (txt, md, rtf, pdf, ppt, docx).","parameters":{"type":"object","properties":{"file":{"type":"string","description":"File path or base64-encoded content"},"title":{"type":"string","description":"Document title"}},"required":["file","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bots.find","description":"Find and list available bots.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Search query for bot name"},"limit":{"type":"integer","description":"Maximum results to return"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"cognism","displayName":"Cognism","description":"B2B sales intelligence: search and enrich contacts and companies against the Cognism database, then redeem records for full contact data (emails, phones, firmographics).","auth":{"kind":"api-key","hint":"Cognism API token from Profile Settings → API. Sent as the `Authorization: Bearer <token>` header."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contact.search","description":"Search the Cognism contact database by persona/firmographic filters. Returns a preview list with data-presence flags and a redeemId per record (no PII). Free. Follow with contact.redeem to fetch full data.","parameters":{"type":"object","properties":{"filters":{"type":"object","description":"Search filter body, e.g. { jobTitles: [\"CTO\"], excludeJobTitles: [\"CEO\"], regions: [\"EMEA\"], countries: [\"US\"], emailQuality: { highPlus: true }, account: { names: [\"Acme\"] } }. All fields optional; pass {} to match broadly."},"lastReturnedKey":{"type":"string","description":"Pagination cursor from a previous page (linear only)."},"indexSize":{"type":"integer","description":"Page size, 20–100 (default 20)."}},"required":["filters"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contact.enrich","description":"Match a single contact by known identifiers (email, linkedinUrl, domain, name + company). Returns one best-match preview with matchScore, data-presence flags, and a redeemId (no PII). Free. Follow with contact.redeem.","parameters":{"type":"object","properties":{"match":{"type":"object","description":"Identifier body, e.g. { email: \"jane@acme.com\", linkedinUrl: \"...\", domain: \"acme.com\", minMatchScore: 30, firstName, lastName, jobTitle, companyName }. At least one identifier recommended."}},"required":["match"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contact.redeem","description":"Fetch full contact profiles (email, mobile, direct dial, LinkedIn, seniority, …) for redeemIds obtained from contact.search/contact.enrich. CONSUMES 1 credit per contact redeemed. 1–20 redeemIds per call.","parameters":{"type":"object","properties":{"redeemIds":{"type":"array","items":{"type":"string"},"description":"redeemId values from contact.search/contact.enrich (1–20)."}},"required":["redeemIds"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"account.search","description":"Search the Cognism company/account database by name, industry, location, size, revenue. Returns matching accounts with data-presence flags and redeemIds. Free. Follow with account.redeem.","parameters":{"type":"object","properties":{"filters":{"type":"object","description":"Account filter body, e.g. { names: [\"Acme Corp\"], industries: [\"SaaS\"], countries: [\"US\"], regions: [\"EMEA\"], employeeCount: {...}, revenue: {...} }. All fields optional."},"lastReturnedKey":{"type":"string"},"indexSize":{"type":"integer","description":"Page size, 20–100."}},"required":["filters"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"account.enrich","description":"Match a company/account by domain, website, linkedinUrl, or name. Returns one best-match preview with data-presence flags and a redeemId. Free. Follow with account.redeem.","parameters":{"type":"object","properties":{"match":{"type":"object","description":"Identifier body, e.g. { domain: \"cognism.com\" } or { website, linkedinUrl, name }."}},"required":["match"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"account.redeem","description":"Fetch full company/account profiles (domain, revenue, employeeCount, industry, …) for redeemIds from account.search/account.enrich. Free (account redeem does not consume credits).","parameters":{"type":"object","properties":{"redeemIds":{"type":"array","items":{"type":"string"},"description":"redeemId values from account.search/account.enrich."}},"required":["redeemIds"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"cognito-forms","displayName":"Cognito Forms","description":"Create, read, update, and delete entries in Cognito Forms — an online form builder for collecting structured submissions.","auth":{"kind":"api-key","hint":"Cognito Forms API key from Settings → Integrations → API. Sent as a Bearer token."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"entries.create","description":"Create a new entry on the specified Cognito Forms form.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"entry":{"type":"object"}},"required":["formId","entry"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"entries.update","description":"Update an existing entry on a Cognito Forms form by entry id.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"entryId":{"type":"string"},"entry":{"type":"object"}},"required":["formId","entryId","entry"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"entries.delete","description":"Delete an existing entry on a Cognito Forms form by entry id.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"entryId":{"type":"string"}},"required":["formId","entryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"entries.get","description":"Read a single Cognito Forms entry by id.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"entryId":{"type":"string"}},"required":["formId","entryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"cohere","displayName":"Cohere","description":"Generate text using Cohere AI language models.","auth":{"kind":"api-key","hint":"Cohere API key (Bearer token)."},"category":"other","defaultConsistencyModel":"cache","capabilities":[{"name":"generate.text","description":"Generate text from a prompt using a Cohere chat model. Mirrors the activepieces \"Generate Text\" action.","parameters":{"type":"object","properties":{"prompt":{"type":"string","description":"The user message to send to the model."},"model":{"type":"string","description":"The Cohere model to use for generation (e.g., command-r-plus, command-r)."},"temperature":{"type":"number","description":"Controls randomness (0.0 = deterministic, 1.0 = maximum randomness)."},"maxTokens":{"type":"integer","description":"Maximum number of tokens to generate."}},"required":["prompt","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":false}]},{"kind":"cometapi","displayName":"CometAPI","description":"Access multiple AI models (GPT, Claude, Gemini, Llama, Mistral, …) through CometAPI’s unified OpenAI-compatible inference gateway.","auth":{"kind":"api-key","hint":"CometAPI key (sent as Authorization: Bearer …). Create one at https://www.cometapi.com/."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"models.list","description":"List every model id CometAPI will route to.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"models.get","description":"Fetch metadata for a single routed model id.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model id, e.g. gpt-4o, claude-sonnet-4-5, gemini-2.5-pro."}},"required":["model"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"chat.completions.create","description":"Ask CometAPI — the catalog’s primary action. Generate a chat completion against any routed model by setting `model` on the body. OpenAI-compatible request schema.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Routed model id (gpt-4o, claude-sonnet-4-5, gemini-2.5-pro, llama-3.3-70b, …)."},"messages":{"type":"array","description":"Ordered chat turns; each item is { role, content }.","items":{"type":"object"}},"temperature":{"type":"number","minimum":0,"maximum":2},"top_p":{"type":"number","minimum":0,"maximum":1},"max_tokens":{"type":"integer","minimum":1},"stop":{},"stream":{"type":"boolean"},"n":{"type":"integer","minimum":1},"presence_penalty":{"type":"number","minimum":-2,"maximum":2},"frequency_penalty":{"type":"number","minimum":-2,"maximum":2},"tools":{"type":"array","items":{"type":"object"}},"tool_choice":{},"response_format":{"type":"object"},"user":{"type":"string"}},"required":["model","messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"completions.create","description":"Legacy text-completion endpoint kept for models that still expose it.","parameters":{"type":"object","properties":{"model":{"type":"string"},"prompt":{},"temperature":{"type":"number","minimum":0,"maximum":2},"top_p":{"type":"number","minimum":0,"maximum":1},"max_tokens":{"type":"integer","minimum":1},"stop":{},"stream":{"type":"boolean"},"n":{"type":"integer","minimum":1}},"required":["model","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"embeddings.create","description":"Generate an embedding vector for one or more input strings.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Embedding model id (e.g. text-embedding-3-large)."},"input":{"description":"String or array of strings to embed."},"encoding_format":{"type":"string","enum":["float","base64"]},"dimensions":{"type":"integer","minimum":1},"user":{"type":"string"}},"required":["model","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"images.generate","description":"Generate an image from a text prompt via a routed image model.","parameters":{"type":"object","properties":{"model":{"type":"string"},"prompt":{"type":"string"},"n":{"type":"integer","minimum":1},"size":{"type":"string"},"quality":{"type":"string"},"response_format":{"type":"string","enum":["url","b64_json"]},"user":{"type":"string"}},"required":["prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"comfyicu","displayName":"Comfy.ICU","description":"Submit ComfyUI workflow runs on Comfy.ICU and poll run status / output.","auth":{"kind":"api-key","hint":"Comfy.ICU API key from account settings."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"list.workflows","description":"List the ComfyUI workflows visible to the account.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.run.status","description":"Fetch the status of a specific workflow run.","parameters":{"type":"object","properties":{"workflow_id":{"type":"string"},"run_id":{"type":"string"}},"required":["workflow_id","run_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.run.output","description":"Fetch the rendered output (images / files / JSON) of a completed workflow run.","parameters":{"type":"object","properties":{"workflow_id":{"type":"string"},"run_id":{"type":"string"}},"required":["workflow_id","run_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"submit.workflow.run","description":"Submit a workflow execution. `prompt` is the API workflow JSON copied from the Comfy.ICU History page; `webhook` is an optional callback URL.","parameters":{"type":"object","properties":{"workflow_id":{"type":"string"},"prompt":{"type":"object"},"webhook":{"type":"string"},"files":{"type":"object"},"accelerator":{"type":"string"}},"required":["workflow_id","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"common-room","displayName":"Common Room","description":"Look up community and customer contacts, their activity, segments, and tags from your Common Room workspace.","auth":{"kind":"api-key","hint":"Core API token from Common Room Settings -> API tokens (created by a workspace Admin). Sent as the Authorization: Bearer header."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contact.get_by_email","description":"Return a contact's full Common Room profile given their email address.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the contact to look up."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contact.search","description":"Find contacts by email or linked social handles (Twitter, GitHub, LinkedIn).","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address to search by."},"github":{"type":"string","description":"GitHub username to search by."},"twitter":{"type":"string","description":"Twitter/X handle to search by."},"linkedin":{"type":"string","description":"LinkedIn profile URL or handle to search by."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"activity_types.list","description":"List the activity types available in the workspace.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"segments.list","description":"List the segments defined in the workspace.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contact.upsert","description":"Create or update a contact in a destination source, optionally setting fields and custom fields.","parameters":{"type":"object","properties":{"destinationSourceId":{"type":"string","description":"ID of the destination source to write the contact into."},"fullName":{"type":"string","description":"Full name of the contact."},"email":{"type":"string","description":"Email address of the contact."}},"required":["destinationSourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"confluence","displayName":"Confluence","description":"Search Confluence with CQL, read and update Confluence Cloud pages and spaces, and create new pages in authorized Atlassian sites.","auth":{"kind":"oauth2","authorizationUrl":"https://auth.atlassian.com/authorize","tokenUrl":"https://auth.atlassian.com/oauth/token","scopes":["offline_access","read:confluence-content.all","read:confluence-content.summary","read:confluence-space.summary","write:confluence-content","search:confluence"],"clientIdEnv":"ATLASSIAN_OAUTH_CLIENT_ID","clientSecretEnv":"ATLASSIAN_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"resources.list","description":"List the Atlassian sites authorized for this connection. Returns each site cloudId, URL, name, avatar, and granted product scopes so callers can select the cloudId required by every page, space, and search action.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pages.list","description":"List Confluence pages in a site, optionally scoped to a single space-id. Uses the v2 cursor-paginated endpoint.","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from /oauth/token/accessible-resources."},"spaceId":{"type":"string","description":"Optional space-id filter."},"limit":{"type":"integer","minimum":1,"maximum":250},"cursor":{"type":"string","description":"Opaque pagination cursor from a previous response."}},"required":["cloudId"]},"requiredScopes":["read:confluence-content.all"],"class":"read"},{"name":"pages.get","description":"Read a single Confluence page by id, including its body in storage format.","parameters":{"type":"object","properties":{"cloudId":{"type":"string"},"pageId":{"type":"string","description":"Confluence page id."},"bodyFormat":{"type":"string","enum":["storage","atlas_doc_format","view"],"description":"Page-body representation to return (defaults to storage)."}},"required":["cloudId","pageId"]},"requiredScopes":["read:confluence-content.all"],"class":"read"},{"name":"pages.create","description":"Create a new Confluence page in a site. Caller assembles the full v2 page envelope (`spaceId`, `title`, optional `parentId`/`status`, and `body`) and passes it as `page`; the adapter forwards the envelope unchanged so optional fields like `parentId` can be omitted cleanly.","parameters":{"type":"object","properties":{"cloudId":{"type":"string"},"page":{"type":"object","description":"Full v2 page-create envelope.","properties":{"spaceId":{"type":"string","description":"Target space id."},"title":{"type":"string"},"parentId":{"type":"string","description":"Optional parent page id; omit for a top-level page."},"status":{"type":"string","enum":["current","draft"]},"body":{"type":"object","properties":{"representation":{"type":"string","enum":["storage","atlas_doc_format","wiki"]},"value":{"type":"string"}},"required":["representation","value"]}},"required":["spaceId","title","body"]}},"required":["cloudId","page"]},"requiredScopes":["write:confluence-content"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pages.update","description":"Update an existing Confluence page. Caller assembles the full v2 page-update envelope as `page` and must include the next version number — Confluence rejects mismatched versions which surfaces as a 409 conflict response.","parameters":{"type":"object","properties":{"cloudId":{"type":"string"},"pageId":{"type":"string"},"page":{"type":"object","description":"Full v2 page-update envelope including `id`, `title`, `body`, `version`, optional `status`.","properties":{"id":{"type":"string"},"title":{"type":"string"},"status":{"type":"string","enum":["current","draft","archived"]},"body":{"type":"object","properties":{"representation":{"type":"string","enum":["storage","atlas_doc_format","wiki"]},"value":{"type":"string"}},"required":["representation","value"]},"version":{"type":"object","properties":{"number":{"type":"integer","minimum":1},"message":{"type":"string"}},"required":["number"]}},"required":["id","title","body","version"]}},"required":["cloudId","pageId","page"]},"requiredScopes":["write:confluence-content"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"pages.delete","description":"Delete a Confluence page (moves it to trash for current pages).","parameters":{"type":"object","properties":{"cloudId":{"type":"string"},"pageId":{"type":"string"}},"required":["cloudId","pageId"]},"requiredScopes":["write:confluence-content"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Add a footer comment to a Confluence page. Posts to the v2 /footer-comments endpoint; caller assembles the full v2 footer-comment envelope (pageId, body, optional parentCommentId) and passes it as `comment` so optional fields can be omitted cleanly.","parameters":{"type":"object","properties":{"cloudId":{"type":"string"},"comment":{"type":"object","description":"Full v2 footer-comment envelope.","properties":{"pageId":{"type":"string","description":"Confluence page id the comment is attached to."},"parentCommentId":{"type":"string","description":"Optional id of a parent footer comment to reply to."},"body":{"type":"object","properties":{"representation":{"type":"string","enum":["storage","atlas_doc_format","wiki"]},"value":{"type":"string"}},"required":["representation","value"]}},"required":["pageId","body"]}},"required":["cloudId","comment"]},"requiredScopes":["write:confluence-content"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"spaces.list","description":"List spaces in a Confluence site.","parameters":{"type":"object","properties":{"cloudId":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":250},"cursor":{"type":"string"},"type":{"type":"string","enum":["global","personal","collaboration","knowledge_base"]},"status":{"type":"string","enum":["current","archived"]}},"required":["cloudId"]},"requiredScopes":["read:confluence-space.summary"],"class":"read"},{"name":"spaces.get","description":"Read a single Confluence space by id.","parameters":{"type":"object","properties":{"cloudId":{"type":"string"},"spaceId":{"type":"string"}},"required":["cloudId","spaceId"]},"requiredScopes":["read:confluence-space.summary"],"class":"read"},{"name":"search.cql","description":"Run a Confluence Query Language (CQL) search across pages, attachments, and spaces. Backed by the v1 /wiki/rest/api/search endpoint, which remains the only supported CQL surface on Confluence Cloud.","parameters":{"type":"object","properties":{"cloudId":{"type":"string"},"cql":{"type":"string","description":"CQL expression, e.g. 'type = \"page\" AND space = \"ENG\"'."},"limit":{"type":"integer","minimum":1,"maximum":100},"start":{"type":"integer","minimum":0,"description":"Offset for non-cursor pagination on the v1 endpoint."},"excerpt":{"type":"string","enum":["indexed","highlight","none","highlight_unescaped","indexed_highlighted"],"description":"Excerpt style returned in search hits."}},"required":["cloudId","cql"]},"requiredScopes":["search:confluence"],"class":"read"}]},{"kind":"constant-contact","displayName":"Constant Contact","description":"Upsert Constant Contact contacts and manage subscriber lists via the V3 API.","auth":{"kind":"oauth2","authorizationUrl":"https://authz.constantcontact.com/oauth2/default/v1/authorize","tokenUrl":"https://authz.constantcontact.com/oauth2/default/v1/token","scopes":["contact_data","campaign_data","offline_access"],"clientIdEnv":"CONSTANT_CONTACT_OAUTH_CLIENT_ID","clientSecretEnv":"CONSTANT_CONTACT_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.upsert","description":"Create a contact or update an existing one by email address, subscribing it to the supplied list ids. Mirrors the activepieces `createOrUpdateContact` action.","parameters":{"type":"object","properties":{"email_address":{"type":"string","description":"Email address used as the dedupe key."},"first_name":{"type":"string"},"last_name":{"type":"string"},"job_title":{"type":"string"},"company_name":{"type":"string"},"phone_number":{"type":"string"},"birthday_month":{"type":"integer","minimum":1,"maximum":12},"birthday_day":{"type":"integer","minimum":1,"maximum":31},"anniversary":{"type":"string","description":"ISO-8601 date."},"list_memberships":{"type":"array","items":{"type":"string"},"description":"List ids the contact should be added to."},"custom_fields":{"type":"array","items":{"type":"object"},"description":"Custom field id / value pairs."},"street_addresses":{"type":"array","items":{"type":"object"}}},"required":["email_address","list_memberships"]},"requiredScopes":["contact_data"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.search","description":"Page through contacts, optionally filtered by email, status, or list id.","parameters":{"type":"object","properties":{"email":{"type":"string"},"status":{"type":"string","enum":["all","active","unsubscribed","deleted"]},"lists":{"type":"string","description":"Comma-separated list ids."},"limit":{"type":"integer","minimum":1,"maximum":500}}},"requiredScopes":["contact_data"],"class":"read"},{"name":"contacts.get","description":"Read a single contact by its V3 contact id.","parameters":{"type":"object","properties":{"contact_id":{"type":"string"},"include":{"type":"string","description":"Comma-separated sub-resources (e.g. \"custom_fields,list_memberships\")."}},"required":["contact_id"]},"requiredScopes":["contact_data"],"class":"read"},{"name":"contacts.update","description":"Replace a contact by id (PUT semantics — supply the full resource).","parameters":{"type":"object","properties":{"contact_id":{"type":"string"},"email_address":{"type":"object"},"first_name":{"type":"string"},"last_name":{"type":"string"},"job_title":{"type":"string"},"company_name":{"type":"string"},"phone_numbers":{"type":"array","items":{"type":"object"}},"list_memberships":{"type":"array","items":{"type":"string"}},"custom_fields":{"type":"array","items":{"type":"object"}},"update_source":{"type":"string","enum":["Account","Contact"]}},"required":["contact_id","email_address","update_source"]},"requiredScopes":["contact_data"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.delete","description":"Soft-delete a contact (status becomes \"deleted\").","parameters":{"type":"object","properties":{"contact_id":{"type":"string"}},"required":["contact_id"]},"requiredScopes":["contact_data"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.search","description":"Page through contact lists in the account.","parameters":{"type":"object","properties":{"include_count":{"type":"boolean"},"include_membership_count":{"type":"string","enum":["all","active"]},"limit":{"type":"integer","minimum":1,"maximum":1000}}},"requiredScopes":["contact_data"],"class":"read"},{"name":"lists.get","description":"Read a single contact list by id.","parameters":{"type":"object","properties":{"list_id":{"type":"string"},"include_membership_count":{"type":"string","enum":["all","active"]}},"required":["list_id"]},"requiredScopes":["contact_data"],"class":"read"},{"name":"lists.create","description":"Create a contact list.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"favorite":{"type":"boolean"}},"required":["name"]},"requiredScopes":["contact_data"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contact.create","description":"Create a new V3 contact with no upsert semantics. Use contacts.upsert when you want email-address dedupe + list-subscribe in one call; use this when you already know the contact does not exist.","parameters":{"type":"object","properties":{"email_address":{"type":"object","description":"V3 email envelope, e.g. { address, permission_to_send }."},"first_name":{"type":"string"},"last_name":{"type":"string"},"job_title":{"type":"string"},"company_name":{"type":"string"},"phone_numbers":{"type":"array","items":{"type":"object"}},"list_memberships":{"type":"array","items":{"type":"string"}},"custom_fields":{"type":"array","items":{"type":"object"}},"create_source":{"type":"string","enum":["Account","Contact"]}},"required":["email_address","create_source"]},"requiredScopes":["contact_data"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaign.create","description":"Create a Constant Contact email campaign. Caller assembles the V3 /emails envelope (name, type, scheduled_date, email_campaign_activities, etc.) and passes it as campaign; the adapter forwards it unchanged.","parameters":{"type":"object","properties":{"campaign":{"type":"object","description":"Full V3 /emails campaign-create envelope."}},"required":["campaign"]},"requiredScopes":["campaign_data"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaign.send","description":"Schedule (send) a drafted Constant Contact email campaign activity. POSTs to /emails/activities/{campaign_activity_id}/schedules with a scheduled_date — passing an immediate date (or \"0\") sends now per the V3 API.","parameters":{"type":"object","properties":{"campaign_activity_id":{"type":"string","description":"Campaign activity id from the /emails envelope."},"scheduled_date":{"type":"string","description":"ISO-8601 timestamp to send at, or \"0\" to send immediately per the V3 API."}},"required":["campaign_activity_id","scheduled_date"]},"requiredScopes":["campaign_data"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"contactout","displayName":"ContactOut","description":"Find and enrich professional and personal emails, phone numbers, and LinkedIn data for prospects.","auth":{"kind":"api-key","hint":"API token from your ContactOut account. Sent as the 'token' header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"people.search","description":"Search for people profiles matching criteria such as name, job title, company, and location.","parameters":{"type":"object","properties":{"name":{"type":"string"},"job_title":{"type":"array","items":{"type":"string"}},"company":{"type":"array","items":{"type":"string"}},"location":{"type":"array","items":{"type":"string"}},"page":{"type":"integer","description":"Result page number."},"reveal_info":{"type":"boolean","description":"Include contact data (consumes email/phone credits)."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"linkedin.enrich","description":"Look up a LinkedIn profile URL and return contact data including emails and phones. Consumes credits when contact info is found.","parameters":{"type":"object","properties":{"profile":{"type":"string","description":"URL-encoded LinkedIn profile URL."},"profile_only":{"type":"boolean","description":"If true, return profile data without contact info."}},"required":["profile"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"people.enrich","description":"Enrich a person from a LinkedIn URL, email, or name plus company. Returns work/personal emails and phones; consumes credits when found.","parameters":{"type":"object","properties":{"linkedin_url":{"type":"string"},"email":{"type":"string"},"full_name":{"type":"string"},"company":{"type":"string"},"company_domain":{"type":"string"},"include":{"type":"array","description":"Data types to include, e.g. work_email, personal_email, phone.","items":{"type":"string"}}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"email.verify","description":"Verify the deliverability of an email address. Consumes a verifier credit for definitive results.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false}]},{"kind":"contentful","displayName":"Contentful","description":"Read, create, update, and publish Contentful entries through the Content Management API for a given space and environment.","auth":{"kind":"oauth2","authorizationUrl":"https://be.contentful.com/oauth/authorize","tokenUrl":"https://be.contentful.com/oauth/token","scopes":["content_management_read","content_management_manage"],"clientIdEnv":"CONTENTFUL_OAUTH_CLIENT_ID","clientSecretEnv":"CONTENTFUL_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"entries.list","description":"List entries in a Contentful environment, optionally filtered by content type and a CMA query string.","parameters":{"type":"object","properties":{"spaceId":{"type":"string","description":"Contentful space ID."},"environmentId":{"type":"string","description":"Contentful environment ID, e.g. \"master\"."},"contentType":{"type":"string","description":"Restrict the listing to a single content type ID."},"query":{"type":"string","description":"Full-text query passed as the CMA `query` parameter."},"limit":{"type":"integer","minimum":1,"maximum":1000},"skip":{"type":"integer","minimum":0}},"required":["spaceId","environmentId"]},"requiredScopes":["content_management_read"],"class":"read"},{"name":"entries.get","description":"Fetch a single Contentful entry by ID.","parameters":{"type":"object","properties":{"spaceId":{"type":"string","description":"Contentful space ID."},"environmentId":{"type":"string","description":"Contentful environment ID, e.g. \"master\"."},"entryId":{"type":"string"}},"required":["spaceId","environmentId","entryId"]},"requiredScopes":["content_management_read"],"class":"read"},{"name":"entries.create","description":"Create a draft entry of the given content type. The `fields` map mirrors the CMA `fields` body field (locale-keyed values).","parameters":{"type":"object","properties":{"spaceId":{"type":"string","description":"Contentful space ID."},"environmentId":{"type":"string","description":"Contentful environment ID, e.g. \"master\"."},"contentType":{"type":"string","description":"Content type ID; sent via the X-Contentful-Content-Type header."},"fields":{"type":"object","description":"Locale-keyed field values, e.g. `{ title: { \"en-US\": \"Hello\" } }`.","additionalProperties":true}},"required":["spaceId","environmentId","contentType","fields"]},"requiredScopes":["content_management_manage"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"entries.update","description":"Update an existing entry. `version` must be the current `sys.version` from a prior read; mismatched versions return 409.","parameters":{"type":"object","properties":{"spaceId":{"type":"string","description":"Contentful space ID."},"environmentId":{"type":"string","description":"Contentful environment ID, e.g. \"master\"."},"entryId":{"type":"string"},"version":{"type":"integer","description":"Current sys.version of the entry."},"fields":{"type":"object","description":"Replacement locale-keyed field values.","additionalProperties":true}},"required":["spaceId","environmentId","entryId","version","fields"]},"requiredScopes":["content_management_manage"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"entries.publish","description":"Publish an entry. `version` must be the current `sys.version`; mismatched versions return 409.","parameters":{"type":"object","properties":{"spaceId":{"type":"string","description":"Contentful space ID."},"environmentId":{"type":"string","description":"Contentful environment ID, e.g. \"master\"."},"entryId":{"type":"string"},"version":{"type":"integer","description":"Current sys.version of the entry."}},"required":["spaceId","environmentId","entryId","version"]},"requiredScopes":["content_management_manage"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"entries.unpublish","description":"Unpublish an entry, reverting it to draft. `version` must be the current `sys.version`; mismatched versions return 409.","parameters":{"type":"object","properties":{"spaceId":{"type":"string","description":"Contentful space ID."},"environmentId":{"type":"string","description":"Contentful environment ID, e.g. \"master\"."},"entryId":{"type":"string"},"version":{"type":"integer","description":"Current sys.version of the entry."}},"required":["spaceId","environmentId","entryId","version"]},"requiredScopes":["content_management_manage"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"entries.delete","description":"Permanently delete an entry. The entry must already be unpublished; publishing state is enforced upstream.","parameters":{"type":"object","properties":{"spaceId":{"type":"string","description":"Contentful space ID."},"environmentId":{"type":"string","description":"Contentful environment ID, e.g. \"master\"."},"entryId":{"type":"string"}},"required":["spaceId","environmentId","entryId"]},"requiredScopes":["content_management_manage"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"contextual-ai","displayName":"Contextual AI","description":"Integrate with Contextual AI to automate document processing and AI workflows.","auth":{"kind":"api-key","hint":"Your Contextual AI API key."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"query.agent","description":"Query an agent with a message.","parameters":{"type":"object","properties":{"agentId":{"type":"string","description":"The ID of the agent to query"},"message":{"type":"string","description":"The message to send to the agent"},"conversationId":{"type":"string","description":"Optional conversation ID to continue an existing conversation"},"includeRetrievalContent":{"type":"boolean","description":"Include the text of retrieved contents in the response"}},"required":["agentId","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"generate","description":"Generate a response using Contextual AI models.","parameters":{"type":"object","properties":{"prompt":{"type":"string","description":"The text prompt to generate a response for"},"model":{"type":"string","description":"The version of Contextual AI to use"},"maxTokens":{"type":"integer","description":"Maximum number of tokens to generate (default: 1024)"},"temperature":{"type":"number","description":"Sampling temperature (0.0 to 1.0)"},"topP":{"type":"number","description":"Nucleus sampling parameter (0.0 to 1.0)"},"systemPrompt":{"type":"string","description":"Optional system prompt for the model"},"knowledge":{"type":"object","description":"Optional knowledge sources to ground the generation"},"avoidCommentary":{"type":"boolean","description":"Avoid providing additional conversational commentary not grounded in context"}},"required":["prompt","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"ingest.document","description":"Upload a document to a datastore for ingestion.","parameters":{"type":"object","properties":{"datastoreId":{"type":"string","description":"The ID of the datastore to upload to"},"file":{"type":"string","description":"The document file to upload (PDF, HTML, DOC, DOCX, PPT, PPTX)"},"customMetadata":{"type":"object","description":"Optional custom metadata as key-value pairs"},"configuration":{"type":"string","description":"Optional configuration override in JSON format"}},"required":["datastoreId","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"parse.file","description":"Parse a document file with configurable parsing modes.","parameters":{"type":"object","properties":{"file":{"type":"string","description":"The document file to parse"},"parseMode":{"type":"string","description":"Parsing mode - basic for simple text, standard for complex documents"},"pageRange":{"type":"string","description":"Optional page range to parse (e.g., 1-10)"},"enableDocumentHierarchy":{"type":"boolean","description":"Add table of contents with document structure"},"enableSplitTables":{"type":"boolean","description":"Split large tables into multiple tables with headers"},"maxSplitTableCells":{"type":"integer","description":"Threshold for splitting large tables"},"figureCaptionMode":{"type":"string","description":"How thorough figure captions should be"}},"required":["file","parseMode"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.agent","description":"Create a new agent with optional configuration.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Name for the new agent"},"description":{"type":"string","description":"Optional description of the agent"},"systemPrompt":{"type":"string","description":"Optional system prompt for the agent"},"filterPrompt":{"type":"string","description":"Optional prompt for filtering retrieved chunks"},"datastoreIds":{"type":"array","items":{"type":"string"},"description":"Datastores to associate with the agent"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invite.users","description":"Invite users to a tenant.","parameters":{"type":"object","properties":{"tenantShortName":{"type":"string","description":"The short name of the tenant/workspace"},"users":{"type":"array","items":{"type":"object"},"description":"List of users to invite"},"email":{"type":"string","description":"Email address of the user to invite"}},"required":["tenantShortName","users"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.datastore","description":"Create a new datastore for document storage and retrieval.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Name for the new datastore"},"description":{"type":"string","description":"Optional description of the datastore"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"contiguity","displayName":"Contiguity","description":"Send email, text and iMessage through Contiguity. Acceptance is not delivery; unresolved sends require reconciliation.","auth":{"kind":"api-key","hint":"Contiguity API key from console.contiguity.com/dashboard/tokens"},"category":"crm","defaultConsistencyModel":"advisory","capabilities":[{"name":"messages.send_text","description":"Send SMS from an explicitly selected owned number. Do not retry ambiguous outcomes blindly.","parameters":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":320},"from":{"type":"string","minLength":1,"maxLength":320},"message":{"type":"string","minLength":1,"maxLength":18000}},"required":["to","from","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"sms.send","description":"Send SMS from an explicitly selected owned number. Do not retry ambiguous outcomes blindly.","parameters":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":320},"from":{"type":"string","minLength":1,"maxLength":320},"message":{"type":"string","minLength":1,"maxLength":18000}},"required":["to","from","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"messages.send_imessage","description":"Send iMessage from an owned number; fallback is opt-in and must name its sender.","parameters":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":320},"from":{"type":"string","minLength":1,"maxLength":320},"message":{"type":"string","minLength":1,"maxLength":18000},"attachments":{"type":"array","maxItems":10,"items":{"type":"string","pattern":"^https://"}},"fallback":{"type":"object","properties":{"from":{"type":"string","minLength":1,"maxLength":320},"when":{"type":"array","items":{"type":"string","enum":["imessage_unsupported","imessage_fails"]}}},"required":["from","when"],"additionalProperties":false}},"required":["to","from","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"email.send","description":"Send an email from a verified sender. Legacy body/contentType inputs are translated to the documented text/html fields.","parameters":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":320},"from":{"type":"string","minLength":1,"maxLength":320},"subject":{"type":"string","maxLength":998},"body":{"type":"string","minLength":1,"maxLength":18000},"contentType":{"type":"string","enum":["text/plain","text/html"]},"replyTo":{"type":"string","minLength":1,"maxLength":320}},"required":["to","from","subject","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"numbers.list","description":"List numbers already leased by this account; does not purchase a number.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"convertkit","displayName":"ConvertKit","description":"Manage ConvertKit subscribers, tags, forms, sequences, broadcasts, and purchases via the v3 API.","auth":{"kind":"api-key","hint":"ConvertKit API Secret (from Account → Advanced)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"fields.create","description":"Create a custom field on a subscriber profile.","parameters":{"type":"object","properties":{"label":{"type":"string"}},"required":["label"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"fields.delete","description":"Delete a custom field.","parameters":{"type":"object","properties":{"fieldId":{"type":"string"}},"required":["fieldId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"fields.list","description":"List all custom fields.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"fields.update","description":"Update a custom field label.","parameters":{"type":"object","properties":{"fieldId":{"type":"string"},"label":{"type":"string"}},"required":["fieldId","label"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.getByEmail","description":"Look up a subscriber by email address.","parameters":{"type":"object","properties":{"emailAddress":{"type":"string"}},"required":["emailAddress"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.getById","description":"Fetch a subscriber by id.","parameters":{"type":"object","properties":{"subscriberId":{"type":"string"}},"required":["subscriberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.list","description":"List subscribers with optional status filter and pagination.","parameters":{"type":"object","properties":{"page":{"type":"integer"},"from":{"type":"string"},"to":{"type":"string"},"updatedFrom":{"type":"string"},"updatedTo":{"type":"string"},"sortOrder":{"type":"string"},"sortField":{"type":"string"},"emailAddress":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.tags.listByEmail","description":"List tags applied to a subscriber by email address.","parameters":{"type":"object","properties":{"emailAddress":{"type":"string"}},"required":["emailAddress"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.tags.listById","description":"List tags applied to a subscriber by id.","parameters":{"type":"object","properties":{"subscriberId":{"type":"string"}},"required":["subscriberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.unsubscribe","description":"Unsubscribe a subscriber by email address.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.update","description":"Update subscriber profile fields.","parameters":{"type":"object","properties":{"subscriberId":{"type":"string"},"firstName":{"type":"string"},"emailAddress":{"type":"string"},"fields":{"type":"object"}},"required":["subscriberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.create","description":"Create an automation webhook (outbound notification).","parameters":{"type":"object","properties":{"targetUrl":{"type":"string"},"event":{"type":"object"}},"required":["targetUrl","event"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Delete an automation webhook.","parameters":{"type":"object","properties":{"ruleId":{"type":"string"}},"required":["ruleId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"broadcasts.stats","description":"Get open and click stats for a broadcast.","parameters":{"type":"object","properties":{"broadcastId":{"type":"string"}},"required":["broadcastId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"broadcasts.create","description":"Create a new broadcast.","parameters":{"type":"object","properties":{"subject":{"type":"string"},"content":{"type":"string"},"description":{"type":"string"},"public":{"type":"boolean"},"publishedAt":{"type":"string"},"sendAt":{"type":"string"},"emailAddress":{"type":"string"},"emailLayoutTemplate":{"type":"string"},"thumbnailAlt":{"type":"string"},"thumbnailUrl":{"type":"string"}},"required":["subject","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"broadcasts.delete","description":"Delete a broadcast.","parameters":{"type":"object","properties":{"broadcastId":{"type":"string"}},"required":["broadcastId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"broadcasts.getById","description":"Fetch a single broadcast by id.","parameters":{"type":"object","properties":{"broadcastId":{"type":"string"}},"required":["broadcastId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"broadcasts.list","description":"List broadcasts.","parameters":{"type":"object","properties":{"page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"broadcasts.update","description":"Update an existing broadcast.","parameters":{"type":"object","properties":{"broadcastId":{"type":"string"},"subject":{"type":"string"},"content":{"type":"string"},"description":{"type":"string"},"public":{"type":"boolean"},"publishedAt":{"type":"string"},"sendAt":{"type":"string"},"emailAddress":{"type":"string"},"emailLayoutTemplate":{"type":"string"},"thumbnailAlt":{"type":"string"},"thumbnailUrl":{"type":"string"}},"required":["broadcastId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.subscribers.add","description":"Subscribe an email to a form.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"email":{"type":"string"},"firstName":{"type":"string"},"fields":{"type":"object"},"tags":{"type":"array"}},"required":["formId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.list","description":"List all forms on the account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.subscriptions.list","description":"List subscriptions to a form.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"page":{"type":"integer"},"subscriberState":{"type":"string"},"sortOrder":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sequences.subscribers.add","description":"Subscribe an email to a sequence.","parameters":{"type":"object","properties":{"sequenceId":{"type":"string"},"email":{"type":"string"},"firstName":{"type":"string"},"fields":{"type":"object"},"tags":{"type":"array"}},"required":["sequenceId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sequences.list","description":"List all sequences on the account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sequences.subscriptions.list","description":"List subscriptions to a sequence.","parameters":{"type":"object","properties":{"sequenceId":{"type":"string"},"page":{"type":"integer"},"subscriberState":{"type":"string"},"sortOrder":{"type":"string"}},"required":["sequenceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tags.create","description":"Create a new tag.","parameters":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.subscriptions.list","description":"List subscriptions tagged with the given tag.","parameters":{"type":"object","properties":{"tagId":{"type":"string"},"page":{"type":"integer"},"subscriberState":{"type":"string"},"sortOrder":{"type":"string"}},"required":["tagId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tags.list","description":"List all tags on the account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tags.removeBySubscriberEmail","description":"Remove a tag from a subscriber identified by email address.","parameters":{"type":"object","properties":{"tagId":{"type":"string"},"email":{"type":"string"}},"required":["tagId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.removeBySubscriberId","description":"Remove a tag from a subscriber identified by id.","parameters":{"type":"object","properties":{"tagId":{"type":"string"},"subscriberId":{"type":"string"}},"required":["tagId","subscriberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.apply","description":"Tag a subscriber by email address.","parameters":{"type":"object","properties":{"tagId":{"type":"string"},"email":{"type":"string"},"firstName":{"type":"string"},"fields":{"type":"object"}},"required":["tagId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"purchases.createBatch","description":"Create or upsert a batch of purchases.","parameters":{"type":"object","properties":{"purchases":{"type":"array"}},"required":["purchases"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"purchases.create","description":"Create or upsert a single purchase.","parameters":{"type":"object","properties":{"purchase":{"type":"object"}},"required":["purchase"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"purchases.getById","description":"Fetch a purchase by id.","parameters":{"type":"object","properties":{"purchaseId":{"type":"string"}},"required":["purchaseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"purchases.list","description":"List purchases.","parameters":{"type":"object","properties":{"page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"copper","displayName":"Copper","description":"Copper CRM: create and update people, leads, companies, opportunities, projects, tasks, and activities; search across the full entity set.","auth":{"kind":"api-key","hint":"Copper API key from Settings → Integrations → API Keys. Sent as the X-PW-AccessToken header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.person","description":"Create a person record in Copper.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Full name of the person."},"email":{"type":"string"},"emails":{"type":"array","items":{"type":"object"}},"phone_numbers":{"type":"array","items":{"type":"object"}},"tags":{"type":"array","items":{"type":"string"}},"details":{"type":"string"},"fields":{"type":"object","description":"Additional / custom fields."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.person","description":"Update an existing person record.","parameters":{"type":"object","properties":{"personId":{"type":"string","description":"Copper person ID."},"updateFields":{"type":"object","description":"Fields to update."}},"required":["personId","updateFields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.lead","description":"Create a lead in Copper.","parameters":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"phone_numbers":{"type":"array","items":{"type":"object"}},"details":{"type":"string"},"fields":{"type":"object"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.lead","description":"Update an existing lead.","parameters":{"type":"object","properties":{"leadId":{"type":"string"},"updateFields":{"type":"object"}},"required":["leadId","updateFields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"convert.lead","description":"Convert a lead into a person, company, and/or opportunity.","parameters":{"type":"object","properties":{"leadId":{"type":"string"},"details":{"type":"object","description":"Conversion options payload."}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.company","description":"Create a company record.","parameters":{"type":"object","properties":{"name":{"type":"string"},"email_domain":{"type":"string"},"phone_numbers":{"type":"array","items":{"type":"object"}},"details":{"type":"string"},"fields":{"type":"object"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.company","description":"Update a company record.","parameters":{"type":"object","properties":{"companyId":{"type":"string"},"updateFields":{"type":"object"}},"required":["companyId","updateFields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.opportunity","description":"Create an opportunity.","parameters":{"type":"object","properties":{"name":{"type":"string"},"primary_contact_id":{"type":"string"},"pipelineStageId":{"type":"string"},"priority":{"type":"string"},"details":{"type":"string"},"fields":{"type":"object"}},"required":["name","primary_contact_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.opportunity","description":"Update an opportunity.","parameters":{"type":"object","properties":{"opportunityId":{"type":"string"},"updateFields":{"type":"object"}},"required":["opportunityId","updateFields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.project","description":"Create a project.","parameters":{"type":"object","properties":{"name":{"type":"string"},"details":{"type":"string"},"fields":{"type":"object"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.project","description":"Update a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"updateFields":{"type":"object"}},"required":["projectId","updateFields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.task","description":"Create a task. Optionally attach to a parent entity (person, lead, opportunity, ...).","parameters":{"type":"object","properties":{"name":{"type":"string"},"entity":{"type":"string","description":"Parent entity type (person, lead, company, opportunity, project)."},"entityItemId":{"type":"string","description":"Parent entity resource ID."},"due_date":{"type":"string","description":"Unix epoch seconds."},"reminder_date":{"type":"string","description":"Unix epoch seconds."},"priority":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"details":{"type":"string"},"fields":{"type":"object"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.activity","description":"Log an activity (note, call, meeting, etc.) against a Copper entity (parent resource).","parameters":{"type":"object","properties":{"entity":{"type":"string","description":"Parent entity type (person, lead, company, opportunity, project)."},"entityItemId":{"type":"string","description":"Parent entity resource ID."},"activity_type":{"type":"object","description":"Activity type { category, id } per Copper activity_types."},"details":{"type":"string","description":"Activity body."},"activity_date":{"type":"string","description":"Unix epoch seconds."}},"required":["entity","entityItemId","activity_type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"search.for.an.activity","description":"Search activities, with optional parent + date-range filters.","parameters":{"type":"object","properties":{"parent":{"type":"object","description":"Optional parent entity reference { type, id }."},"minimum_activity_date":{"type":"integer","description":"Unix epoch seconds."},"maximum_activity_date":{"type":"integer","description":"Unix epoch seconds."},"full_result":{"type":"boolean"},"page_size":{"type":"integer","minimum":1,"maximum":200},"page_number":{"type":"integer","minimum":1},"sort_by":{"type":"string"},"sort_direction":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.for.aperson","description":"Search for people by name, email, phone, address, or interaction filters.","parameters":{"type":"object","properties":{"name":{"type":"string"},"emails":{"type":"array","items":{"type":"string"}},"phone_number":{"type":"string"},"email_domains":{"type":"array","items":{"type":"string"}},"city":{"type":"string"},"state":{"type":"string"},"postal_code":{"type":"string"},"country":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"followed":{"type":"string"},"age":{"type":"integer"},"minimum_interaction_count":{"type":"integer"},"maximum_interaction_count":{"type":"integer"},"minimum_interaction_date":{"type":"integer"},"maximum_interaction_date":{"type":"integer"},"minimum_created_date":{"type":"integer"},"maximum_created_date":{"type":"integer"},"page_size":{"type":"integer","minimum":1,"maximum":200},"page_number":{"type":"integer","minimum":1},"sort_by":{"type":"string"},"sort_direction":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.for.alead","description":"Search leads by status, monetary value, modified date, or other filters.","parameters":{"type":"object","properties":{"name":{"type":"string"},"emails":{"type":"array","items":{"type":"string"}},"phone_number":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"postal_code":{"type":"string"},"country":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"include_converted_leads":{"type":"boolean"},"minimum_monetary_value":{"type":"number"},"maximum_monetary_value":{"type":"number"},"minimum_modified_date":{"type":"integer"},"maximum_modified_date":{"type":"integer"},"minimum_interaction_count":{"type":"integer"},"maximum_interaction_count":{"type":"integer"},"page_size":{"type":"integer","minimum":1,"maximum":200},"page_number":{"type":"integer","minimum":1},"sort_by":{"type":"string"},"sort_direction":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.for.acompany","description":"Search companies by name, domain, location, socials, or interaction filters.","parameters":{"type":"object","properties":{"name":{"type":"string"},"phone_number":{"type":"string"},"email_domains":{"type":"array","items":{"type":"string"}},"city":{"type":"string"},"state":{"type":"string"},"postal_code":{"type":"string"},"country":{"type":"string"},"socials":{"type":"array","items":{"type":"object"}},"tags":{"type":"array","items":{"type":"string"}},"followed":{"type":"string"},"age":{"type":"integer"},"minimum_interaction_count":{"type":"integer"},"maximum_interaction_count":{"type":"integer"},"minimum_interaction_date":{"type":"integer"},"maximum_interaction_date":{"type":"integer"},"minimum_created_date":{"type":"integer"},"maximum_created_date":{"type":"integer"},"page_size":{"type":"integer","minimum":1,"maximum":200},"page_number":{"type":"integer","minimum":1},"sort_by":{"type":"string"},"sort_direction":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.for.an.opportunity","description":"Search opportunities by status, priority, stage, close-date, or other filters.","parameters":{"type":"object","properties":{"name":{"type":"string"},"status_ids":{"type":"array","items":{"type":"string"}},"priorities":{"type":"array","items":{"type":"string"}},"pipeline_stage_ids":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"followed":{"type":"string"},"minimum_monetary_value":{"type":"number"},"maximum_monetary_value":{"type":"number"},"minimum_close_date":{"type":"integer"},"maximum_close_date":{"type":"integer"},"minimum_stage_change_date":{"type":"integer"},"maximum_stage_change_date":{"type":"integer"},"minimum_interaction_count":{"type":"integer"},"maximum_interaction_count":{"type":"integer"},"minimum_interaction_date":{"type":"integer"},"maximum_interaction_date":{"type":"integer"},"minimum_created_date":{"type":"integer"},"maximum_created_date":{"type":"integer"},"page_size":{"type":"integer","minimum":1,"maximum":200},"page_number":{"type":"integer","minimum":1},"sort_by":{"type":"string"},"sort_direction":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.for.aproject","description":"Search projects by name, status, or tag filters.","parameters":{"type":"object","properties":{"name":{"type":"string"},"status":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"followed":{"type":"string"},"minimum_interaction_count":{"type":"integer"},"maximum_interaction_count":{"type":"integer"},"minimum_interaction_date":{"type":"integer"},"maximum_interaction_date":{"type":"integer"},"minimum_created_date":{"type":"integer"},"maximum_created_date":{"type":"integer"},"page_size":{"type":"integer","minimum":1,"maximum":200},"page_number":{"type":"integer","minimum":1},"sort_by":{"type":"string"},"sort_direction":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"copy-ai","displayName":"Copy.ai","description":"Run Copy.ai workflows from agents and read back run status and outputs. Workflows are configured in the Copy.ai UI and triggered here by workflowId with a JSON input payload.","auth":{"kind":"api-key","hint":"Copy.ai workspace API key (Workspace Settings → API). Sent in the x-copy-ai-api-key header on every request."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"workflow.run","description":"Trigger a Copy.ai workflow by ID with a JSON inputs object. Returns the workflowRunId that subsequent status and outputs reads use to track the asynchronous run.","parameters":{"type":"object","properties":{"workflowId":{"type":"string","description":"Copy.ai workflow ID copied from the workflow editor URL or the Workflows list."},"startVariables":{"type":"object","description":"Inputs payload for the workflow. Keys must match the input variable names declared in the Copy.ai workflow editor."},"metadata":{"type":"object","description":"Optional caller-supplied metadata attached to the run record; surfaces back in status and outputs reads."}},"required":["workflowId","startVariables"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"workflow.run.status","description":"Read the current status of a Copy.ai workflow run (queued, running, completed, failed) by workflowRunId.","parameters":{"type":"object","properties":{"workflowRunId":{"type":"string","description":"workflowRunId returned by workflow.run; identifies the run whose status is being polled."}},"required":["workflowRunId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workflow.run.outputs","description":"Read the final outputs of a completed Copy.ai workflow run. Returns the workflow output variables keyed by name; callers should first confirm status is completed via workflow.run.status.","parameters":{"type":"object","properties":{"workflowRunId":{"type":"string","description":"workflowRunId returned by workflow.run; identifies the completed run whose outputs are being read."}},"required":["workflowRunId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"couchbase","displayName":"Couchbase","description":"Query documents, read/write/delete records, and manage Couchbase buckets and clusters.","auth":{"kind":"api-key","hint":"Couchbase username and password for cluster access."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"cluster.info","description":"Get cluster information and node status.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"buckets.list","description":"List all buckets in the cluster.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.query","description":"Execute a N1QL query to search and retrieve documents.","parameters":{"type":"object","properties":{"statement":{"type":"string"},"timeout":{"type":"string"},"consistency":{"type":"string"}},"required":["statement"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.get","description":"Retrieve a document by its key.","parameters":{"type":"object","properties":{"bucket":{"type":"string"},"scope":{"type":"string"},"collection":{"type":"string"},"docId":{"type":"string"}},"required":["bucket","docId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.create","description":"Insert a new document into a bucket.","parameters":{"type":"object","properties":{"bucket":{"type":"string"},"scope":{"type":"string"},"collection":{"type":"string"},"docId":{"type":"string"},"content":{"type":"object"}},"required":["bucket","docId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.update","description":"Update an existing document by ID.","parameters":{"type":"object","properties":{"bucket":{"type":"string"},"scope":{"type":"string"},"collection":{"type":"string"},"docId":{"type":"string"},"content":{"type":"object"}},"required":["bucket","docId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"documents.delete","description":"Delete a document by its key.","parameters":{"type":"object","properties":{"bucket":{"type":"string"},"scope":{"type":"string"},"collection":{"type":"string"},"docId":{"type":"string"}},"required":["bucket","docId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"document.upsert","description":"Upsert (insert or replace) a document by key. Idempotent: re-runs with the same key and content produce the same final state.","parameters":{"type":"object","properties":{"bucket":{"type":"string"},"scope":{"type":"string"},"collection":{"type":"string"},"docId":{"type":"string"},"content":{"type":"object"}},"required":["bucket","docId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"index.create","description":"Create a primary or secondary index by executing a CREATE INDEX statement against the N1QL query service.","parameters":{"type":"object","properties":{"statement":{"type":"string","description":"Full CREATE [PRIMARY] INDEX statement, e.g. `CREATE PRIMARY INDEX ON `bucket`` or `CREATE INDEX ix_name ON `bucket`(field)`."},"timeout":{"type":"string"}},"required":["statement"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"query.run","description":"Execute an arbitrary N1QL query against the query service. Canonical query-execution verb; mirrors documents.query but is not scoped to document retrieval semantics.","parameters":{"type":"object","properties":{"statement":{"type":"string"},"timeout":{"type":"string"},"consistency":{"type":"string"}},"required":["statement"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"crisp","displayName":"Crisp","description":"Manage Crisp customer-support conversations and contacts: create conversations, post operator notes, upsert contact people, find user profiles, and transition conversation state.","auth":{"kind":"api-key","hint":"Crisp API token identifier + key (HTTP Basic). Connection metadata must include websiteId — the Crisp website ID against which actions run."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"conversation.create","description":"Create a new conversation thread on the connected Crisp website.","parameters":{"type":"object","properties":{"websiteId":{"type":"string"}},"required":["websiteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversation.note.add","description":"Append an internal operator note to an existing conversation. Notes are visible to operators only.","parameters":{"type":"object","properties":{"websiteId":{"type":"string"},"sessionId":{"type":"string"},"content":{"type":"string"},"from":{"type":"string","enum":["operator","user"],"description":"Who the note is attributed to. Defaults to operator."},"origin":{"type":"string"}},"required":["websiteId","sessionId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contact.upsert","description":"Create or update a Crisp People contact identified by email. Sets profile fields (name, phone, company, address, website, notepad).","parameters":{"type":"object","properties":{"websiteId":{"type":"string"},"email":{"type":"string"},"person":{"type":"object","properties":{"nickname":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"website":{"type":"string"}}},"company":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"}}},"notepad":{"type":"string"}},"required":["websiteId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"user.profile.find","description":"Fetch a Crisp People profile by its peopleId (email-hash or contact identifier).","parameters":{"type":"object","properties":{"websiteId":{"type":"string"},"peopleId":{"type":"string"}},"required":["websiteId","peopleId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversation.state.update","description":"Transition the state of an existing conversation: pending, unresolved, or resolved.","parameters":{"type":"object","properties":{"websiteId":{"type":"string"},"sessionId":{"type":"string"},"state":{"type":"string","enum":["pending","unresolved","resolved"]}},"required":["websiteId","sessionId","state"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"conversation.find","description":"List conversations on the website, optionally filtered by free-text search query and paginated by page number.","parameters":{"type":"object","properties":{"websiteId":{"type":"string"},"searchQuery":{"type":"string"},"pageNumber":{"type":"integer"}},"required":["websiteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.send","description":"Post a user-visible text message into an existing conversation, attributed by default to an operator.","parameters":{"type":"object","properties":{"websiteId":{"type":"string"},"sessionId":{"type":"string"},"content":{"type":"string","description":"Message content (plain text)."},"from":{"type":"string","enum":["operator","user"],"description":"Who the message is attributed to. Defaults to operator."},"origin":{"type":"string","description":"Origin tag for the message (e.g. \"chat\", \"email\")."}},"required":["websiteId","sessionId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversation.assign","description":"Assign a conversation to an operator (and optionally pin it to a routing assignment list).","parameters":{"type":"object","properties":{"websiteId":{"type":"string"},"sessionId":{"type":"string"},"assigned":{"type":"object","description":"Routing target. Provide `user_id` to assign to a specific operator.","properties":{"user_id":{"type":"string"}}}},"required":["websiteId","sessionId","assigned"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"crustdata","displayName":"Crustdata","description":"Real-time B2B company and people data API for enriching, identifying, and searching companies and professional profiles.","auth":{"kind":"api-key","hint":"API key (token) from the Crustdata dashboard. Sent as the Authorization: Bearer header. Requests also send the x-api-version: 2025-11-01 header."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"company.identify","description":"Resolve company domains to Crustdata company records.","parameters":{"type":"object","properties":{"domains":{"type":"array","items":{"type":"string"}}},"required":["domains"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.enrich","description":"Retrieve full company profiles for one or more domains.","parameters":{"type":"object","properties":{"domains":{"type":"array","items":{"type":"string"}},"fields":{"type":"array","items":{"type":"string"}}},"required":["domains"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.search","description":"Search companies with filters and sorting.","parameters":{"type":"object","properties":{"filters":{"type":"object"},"page":{"type":"integer"}},"required":["filters"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"person.enrich","description":"Enrich people by LinkedIn profile URL or business email; optionally select returned fields.","parameters":{"type":"object","properties":{"professional_network_profile_urls":{"type":"array","items":{"type":"string"}},"business_emails":{"type":"array","items":{"type":"string"}},"fields":{"type":"array","items":{"type":"string"}}},"required":["professional_network_profile_urls"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"person.search","description":"Search people with filters and sorting.","parameters":{"type":"object","properties":{"filters":{"type":"object"},"page":{"type":"integer"}},"required":["filters"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"cryptolens","displayName":"Cryptolens","description":"Manage Cryptolens customers and software license keys.","auth":{"kind":"api-key","hint":"Cryptolens access token with the relevant key/customer scopes."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"customer.add","description":"Create a customer record, optionally enabling the customer portal with activation management.","parameters":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"companyName":{"type":"string"},"notes":{"type":"string"},"enableCustomerAssociation":{"type":"boolean"},"allowActivationManagement":{"type":"boolean"},"allowMultipleUserAssociation":{"type":"boolean"}},"required":["name","email","companyName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"key.block","description":"Block a license key so the Activation method will reject it until the key is unblocked.","parameters":{"type":"object","properties":{"productId":{"type":"number"},"key":{"type":"string"}},"required":["productId","key"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"key.activate","description":"Activate a license key against a machine. Verifies the key, records the activation under the supplied MachineCode, and returns the cryptographically-signed license payload.","parameters":{"type":"object","properties":{"productId":{"type":"number"},"key":{"type":"string"},"machineCode":{"type":"string"},"friendlyName":{"type":"string"},"fieldsToReturn":{"type":"number"},"metadata":{"type":"boolean"},"floatingTimeInterval":{"type":"number"},"maxOverdraft":{"type":"number"}},"required":["productId","key","machineCode"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"key.deactivate","description":"Deactivate (or float-release) a license key activation for the supplied MachineCode, freeing the seat for re-use.","parameters":{"type":"object","properties":{"productId":{"type":"number"},"key":{"type":"string"},"machineCode":{"type":"string"},"floating":{"type":"boolean"}},"required":["productId","key","machineCode"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"key.create","description":"Create one or more license keys for a product with optional feature flags, machine limits, and customer/reseller binding.","parameters":{"type":"object","properties":{"productId":{"type":"number"},"period":{"type":"number"},"f1":{"type":"boolean"},"f2":{"type":"boolean"},"f3":{"type":"boolean"},"f4":{"type":"boolean"},"f5":{"type":"boolean"},"f6":{"type":"boolean"},"f7":{"type":"boolean"},"f8":{"type":"boolean"},"notes":{"type":"string"},"block":{"type":"boolean"},"customerId":{"type":"number"},"newCustomer":{"type":"boolean"},"trialActivation":{"type":"boolean"},"maxNoOfMachines":{"type":"number"},"allowedMachines":{"type":"string"},"resellerId":{"type":"number"},"noOfKeys":{"type":"number"}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"csv-files","displayName":"CSV Files","description":"Parse bounded CSV files into records and create CSV files from structured records.","auth":{"kind":"none"},"defaultConsistencyModel":"advisory","category":"database","capabilities":[{"name":"csv.parse","class":"read","description":"Parse a base64-encoded CSV file into object records or row arrays.","parameters":{"type":"object","properties":{"fileBase64":{"type":"string","description":"CSV file content encoded as canonical base64."},"delimiter":{"type":"string","minLength":1,"maxLength":1,"default":","},"header":{"type":"boolean","default":true}},"required":["fileBase64"],"additionalProperties":false}},{"name":"csv.create","class":"mutation","description":"Create a base64-encoded CSV file from object records.","parameters":{"type":"object","properties":{"records":{"type":"array","minItems":1,"maxItems":10000,"items":{"type":"object"}},"columns":{"type":"array","maxItems":256,"items":{"type":"string","minLength":1}},"delimiter":{"type":"string","minLength":1,"maxLength":1,"default":","},"header":{"type":"boolean","default":true}},"required":["records"],"additionalProperties":false},"cas":"none","externalEffect":true}]},{"kind":"customer-io","displayName":"Customer.io","description":"Trigger Customer.io campaigns, send transactional email, and read customers / segments / messages through the App API (Bearer).","auth":{"kind":"api-key","hint":"Customer.io App API key (Workspace Settings → API Credentials → App API Keys). For EU workspaces also set metadata.region=\"eu\"."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"customers.search","description":"Search customers by attribute filter (App API customer search).","parameters":{"type":"object","properties":{"filter":{"type":"object","description":"Customer.io filter expression (e.g. { and: [{ attribute: { field: \"email\", operator: \"eq\", value: \"ada@example.com\" } }] })."},"start":{"type":"string","description":"Pagination cursor returned by previous response."},"limit":{"type":"integer","minimum":1,"maximum":1000}},"required":["filter"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.get","description":"Read a single customer profile and its tracked attributes by ID.","parameters":{"type":"object","properties":{"customerId":{"type":"string"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.segments","description":"List the segments a customer belongs to.","parameters":{"type":"object","properties":{"customerId":{"type":"string"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"segments.search","description":"List all segments in the workspace.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"segments.get","description":"Read a single segment definition.","parameters":{"type":"object","properties":{"segmentId":{"type":"integer"}},"required":["segmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.search","description":"List campaigns (newsletters and triggered) defined in the workspace.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.get","description":"Read a single campaign by ID.","parameters":{"type":"object","properties":{"campaignId":{"type":"integer"}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.search","description":"List sent messages (delivery records) with optional filters.","parameters":{"type":"object","properties":{"start":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":1000},"type":{"type":"string","enum":["email","push","sms","webhook","slack","in_app"]},"metric":{"type":"string","enum":["delivered","sent","opened","clicked","bounced","failed","unsubscribed","spammed"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.trigger","description":"Trigger an API-triggered broadcast campaign for a set of recipients or segments.","parameters":{"type":"object","properties":{"campaignId":{"type":"integer"},"ids":{"type":"array","items":{"type":"string"},"description":"Customer IDs to target."},"emails":{"type":"array","items":{"type":"string"}},"per_user_data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"data":{"type":"object"}},"required":["id"]}},"data_file_url":{"type":"string","description":"CSV/URL data file for high-volume broadcasts."},"data":{"type":"object","description":"Shared trigger data merged into the campaign template."},"recipients":{"type":"object","description":"Segment-targeting filter (mutually exclusive with ids/emails)."}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactional.send-email","description":"Send a transactional email via /v1/send/email (uses a configured transactional message template).","parameters":{"type":"object","properties":{"message":{"type":"object","properties":{"transactional_message_id":{"type":["string","integer"]},"to":{"type":"string"},"identifiers":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"cio_id":{"type":"string"}}},"from":{"type":"string"},"reply_to":{"type":"string"},"subject":{"type":"string"},"body":{"type":"string"},"plaintext_body":{"type":"string"},"preheader":{"type":"string"},"fake_bcc":{"type":"boolean"},"disable_message_retention":{"type":"boolean"},"send_to_unsubscribed":{"type":"boolean"},"tracked":{"type":"boolean"},"queue_draft":{"type":"boolean"},"message_data":{"type":"object"},"headers":{"type":"object"},"attachments":{"type":"object"}},"required":["identifiers"]}},"required":["message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"segments.add-customers","description":"Add customers to a manual segment.","parameters":{"type":"object","properties":{"segmentId":{"type":"integer"},"ids":{"type":"array","items":{"type":"string"}},"id_type":{"type":"string","enum":["id","email","cio_id"]}},"required":["segmentId","ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"segments.remove-customers","description":"Remove customers from a manual segment.","parameters":{"type":"object","properties":{"segmentId":{"type":"integer"},"ids":{"type":"array","items":{"type":"string"}},"id_type":{"type":"string","enum":["id","email","cio_id"]}},"required":["segmentId","ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"customgpt","displayName":"CustomGPT","description":"Create and manage CustomGPT agents (chatbots), drive conversations, and export transcripts.","auth":{"kind":"api-key","hint":"CustomGPT API token (Profile → API → Create API Key)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"agents.create","description":"Create a new CustomGPT agent (project) seeded from a sitemap URL or uploaded file.","parameters":{"type":"object","properties":{"project_name":{"type":"string","description":"Display name for the new agent/project."},"sitemap_path":{"type":"string","description":"URL to a sitemap to import as agent knowledge. Omit if uploading a file."},"file":{"type":"string","description":"Base64-encoded file payload (text/audio/video) to seed agent knowledge. Omit if using sitemap."},"is_shared":{"type":"boolean","description":"Whether the agent is public."}},"required":["project_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"agents.update","description":"Update an existing CustomGPT agent (project) — rename, change sharing, or replace knowledge source.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Target project ID."},"project_name":{"type":"string","description":"New display name."},"sitemap_path":{"type":"string","description":"New sitemap URL."},"is_shared":{"type":"boolean","description":"Whether the agent is public."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"agents.delete","description":"Permanently delete a CustomGPT agent (project) and its associated knowledge.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Target project ID."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"agents.updateSettings","description":"Update chatbot UI/behavior settings for a CustomGPT agent (persona, colors, citations, branding).","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Target project ID."},"custom_persona":{"type":"string","description":"Custom persona instructions."},"chatbot_model":{"type":"string","description":"Underlying model identifier."},"response_source":{"type":"string","description":"Source for generating responses (e.g. own_content, default)."},"chatbot_msg_lang":{"type":"string","description":"Language code for chatbot messages."},"chatbot_color":{"type":"string","description":"Hex color code for chatbot UI."},"chatbot_toolbar_color":{"type":"string","description":"Hex color code for toolbar."},"default_prompt":{"type":"string","description":"Default prompt shown to users."},"persona_instructions":{"type":"string","description":"Chatbot persona instructions."},"no_answer_message":{"type":"string","description":"Message when no answer is found."},"ending_message":{"type":"string","description":"Message shown at end of conversation."},"hang_in_there_msg":{"type":"string","description":"Message for long processing times."},"chatbot_siesta_msg":{"type":"string","description":"Message when chatbot is unavailable."},"enable_citations":{"type":"boolean","description":"Show citations in responses."},"enable_feedbacks":{"type":"boolean","description":"Collect user feedback."},"citations_view_type":{"type":"string","description":"Citation display style."},"citations_answer_source_label_msg":{"type":"string","description":"Label for the citation answer source."},"citations_sources_label_msg":{"type":"string","description":"Label for the citation sources list."},"is_loading_indicator_enabled":{"type":"boolean","description":"Show loading indicator during responses."},"remove_branding":{"type":"boolean","description":"Remove CustomGPT branding."},"enable_recaptcha_for_public_chatbots":{"type":"boolean","description":"Enable reCAPTCHA on public chatbots."},"is_selling_enabled":{"type":"boolean","description":"Enable selling features."},"is_ocr_enabled":{"type":"boolean","description":"Enable OCR for image inputs."},"is_anonymized":{"type":"boolean","description":"Anonymize stored data."},"file_data_retension":{"type":"boolean","description":"Enable file data retention."},"are_licenses_allowed":{"type":"boolean","description":"Whether project licenses are allowed."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"conversations.create","description":"Open a new conversation thread with a CustomGPT agent so subsequent messages share a session.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Target agent (project) ID."},"name":{"type":"string","description":"Optional human-readable conversation name."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.sendMessage","description":"Send a message to a CustomGPT conversation and receive the agent reply.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Owning agent (project) ID."},"session_id":{"type":"string","description":"Conversation session ID."},"prompt":{"type":"string","description":"Message/question to send."},"stream":{"type":"boolean","description":"Stream the response in real time."},"custom_persona":{"type":"string","description":"Per-message persona override (optional)."},"chatbot_model":{"type":"string","description":"Override the agent model for this turn."},"response_source":{"type":"string","description":"Source for generating the response (own_content, default)."},"agent_capability":{"type":"string","description":"Capability mode (fastest-responses, premium-responses, etc)."},"lang":{"type":"string","description":"Language code for the prompt (default en)."},"custom_context":{"type":"string","description":"Extra context appended to the conversation."}},"required":["projectId","session_id","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.find","description":"Find conversations for an agent — optionally filtered by user, freshness, or session ID.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Owning agent (project) ID."},"session_id":{"type":"string","description":"Exact conversation session ID."},"userFilter":{"type":"string","description":"Filter by user who created the conversation."},"lastUpdatedAfter":{"type":"string","description":"ISO-8601 timestamp; return conversations updated after this point."},"limit":{"type":"integer","description":"Maximum conversations to return."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversations.export","description":"Export the full message history of a CustomGPT conversation as a downloadable transcript.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Owning agent (project) ID."},"session_id":{"type":"string","description":"Conversation session to export."}},"required":["projectId","session_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.list.recent","description":"List recently created conversations for an agent — backs the newConversation polling trigger upstream.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Owning agent (project) ID."},"since":{"type":"string","description":"ISO-8601 timestamp; only return conversations created after this point."},"limit":{"type":"integer","description":"Maximum conversations to return."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"dappier","displayName":"Dappier","description":"Real-time web search, sports news, stock market data, and lifestyle news search.","auth":{"kind":"api-key","hint":"Dappier API Key from https://platform.dappier.com/profile/api-keys"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"search.realTimeWeb","description":"Perform a real-time web search with optional domain filtering.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Natural language query or URL"},"similarity_top_k":{"type":"integer","description":"Number of results to return (default: 9)"},"ref":{"type":"string","description":"Preferred domain to restrict results"},"num_articles_ref":{"type":"integer","description":"Minimum articles from the preferred domain"},"search_algorithm":{"type":"string","description":"Search algorithm to use for matching"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.sportsNews","description":"Search sports news with optional domain filtering.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Natural language query or URL"},"similarity_top_k":{"type":"integer","description":"Number of results to return (default: 9)"},"ref":{"type":"string","description":"Preferred domain to restrict results"},"num_articles_ref":{"type":"integer","description":"Minimum articles from the preferred domain"},"search_algorithm":{"type":"string","description":"Search algorithm to use for matching"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.stockMarketData","description":"Search stock market data and financial information.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Natural language query or stock symbol"},"similarity_top_k":{"type":"integer","description":"Number of results to return (default: 9)"},"ref":{"type":"string","description":"Preferred domain to restrict results"},"num_articles_ref":{"type":"integer","description":"Minimum articles from the preferred domain"},"search_algorithm":{"type":"string","description":"Search algorithm to use for matching"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.lifestyleNews","description":"Search lifestyle news and entertainment content.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Natural language query or URL"},"similarity_top_k":{"type":"integer","description":"Number of results to return (default: 9)"},"ref":{"type":"string","description":"Preferred domain to restrict results"},"num_articles_ref":{"type":"integer","description":"Minimum articles from the preferred domain"},"search_algorithm":{"type":"string","description":"Search algorithm to use for matching"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"dashworks","displayName":"Dashworks","description":"Query a Dashworks Bot for a federated-search answer grounded in the workspace’s connected knowledge sources, with optional inline source citations.","auth":{"kind":"api-key","hint":"Dashworks API key (Settings → API Keys). Sent as a bearer token on every request."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"generate.answer","description":"Ask a configured Dashworks Bot a question and receive a synthesized answer drawn from the bot’s connected sources. When inlineSources is true (default) the answer text contains inline markdown citations.","parameters":{"type":"object","properties":{"botId":{"type":"string","description":"Bot ID copied from Dashworks → Bots → (select bot) → settings. Identifies which knowledge-source bundle the question is routed to."},"message":{"type":"string","description":"The question or prompt to send to the bot."},"inlineSources":{"type":"boolean","description":"When true (default), sources are cited inline in markdown formatting within the answer text. When false, the answer omits inline citations."}},"required":["botId","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"datadog","displayName":"Datadog","description":"Submit logs, metrics, events, and service checks to Datadog (DD-API-KEY ingest surface). The DD-APPLICATION-KEY-gated management surface (monitors, dashboards, query) is intentionally out of scope.","auth":{"kind":"api-key","hint":"Datadog DD-API-KEY (Organization Settings → API Keys). Also set metadata.intakeUrl to the regional intake host for your Datadog site (e.g. https://api.datadoghq.com for US1, https://api.datadoghq.eu for EU, https://api.us3.datadoghq.com for US3, https://api.us5.datadoghq.com for US5, https://api.ap1.datadoghq.com for AP1, https://api.ddog-gov.com for US1-FED)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"auth.validate","description":"Probe credentials against the Datadog API (GET /api/v1/validate).","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"logs.submit","description":"Send one or more structured log entries to Datadog Logs (POST /api/v2/logs). Each entry takes ddsource, ddtags, hostname, message, service, and any additional structured attributes.","parameters":{"type":"object","properties":{"logs":{"type":"array","description":"Array of log entries. Datadog accepts up to 1000 entries or 5 MB per request.","items":{"type":"object","properties":{"ddsource":{"type":"string","description":"The integration name (e.g. nginx, agent-runtime)."},"ddtags":{"type":"string","description":"Comma-separated tag list (env:prod,team:foo)."},"hostname":{"type":"string"},"message":{"type":"string","description":"Log body. JSON-encoded strings are parsed into structured attributes."},"service":{"type":"string"}},"required":["message"],"additionalProperties":true}}},"required":["logs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"metrics.submit","description":"Submit metric series points to Datadog (POST /api/v2/series). Each series carries metric name, type, unit, points, resources, and tags.","parameters":{"type":"object","properties":{"series":{"type":"array","items":{"type":"object","properties":{"metric":{"type":"string","description":"Dot-delimited metric name (e.g. system.cpu.user)."},"type":{"type":"integer","description":"Metric intake type: 0=unspecified, 1=count, 2=rate, 3=gauge. Datadog rejects unknown values.","enum":[0,1,2,3]},"interval":{"type":"integer","description":"Aggregation interval in seconds (required for rate/count)."},"unit":{"type":"string"},"points":{"type":"array","description":"Array of [timestampSeconds, value] pairs OR { timestamp, value } objects per v2 API.","items":{"type":"object","properties":{"timestamp":{"type":"integer","description":"POSIX seconds."},"value":{"type":"number"}},"required":["timestamp","value"]}},"resources":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","description":"e.g. host."}},"required":["name","type"]}},"tags":{"type":"array","items":{"type":"string"}},"metadata":{"type":"object"}},"required":["metric","type","points"]}}},"required":["series"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"metrics.submit.v1","description":"Submit metrics via the v1 intake (POST /api/v1/series) for clients still on the legacy payload shape (points as [[ts, value], ...]).","parameters":{"type":"object","properties":{"series":{"type":"array","items":{"type":"object","properties":{"metric":{"type":"string"},"type":{"type":"string","enum":["count","rate","gauge"],"description":"v1 metric type string (NOT the v2 integer)."},"interval":{"type":"integer"},"host":{"type":"string"},"points":{"type":"array","description":"Array of [timestampSeconds, value] tuples.","items":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2}},"tags":{"type":"array","items":{"type":"string"}}},"required":["metric","points"]}}},"required":["series"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"metrics.distribution.submit","description":"Submit distribution points (histogram-style metrics) to Datadog (POST /api/v1/distribution_points).","parameters":{"type":"object","properties":{"series":{"type":"array","items":{"type":"object","properties":{"metric":{"type":"string"},"host":{"type":"string"},"points":{"type":"array","description":"Array of [timestampSeconds, [values...]] tuples."},"tags":{"type":"array","items":{"type":"string"}},"type":{"type":"string","enum":["distribution"]}},"required":["metric","points"]}}},"required":["series"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"events.post","description":"Post a custom event to the Datadog event stream (POST /api/v1/events). Use for deploys, incidents, agent-significant transitions.","parameters":{"type":"object","properties":{"title":{"type":"string"},"text":{"type":"string","description":"Markdown-formatted body, 4000 char max."},"aggregation_key":{"type":"string","description":"Use a deterministic key to dedupe in the event stream."},"alert_type":{"type":"string","enum":["error","warning","info","success","user_update","recommendation","snapshot"]},"date_happened":{"type":"integer","description":"POSIX seconds. Defaults to now."},"host":{"type":"string"},"priority":{"type":"string","enum":["normal","low"]},"related_event_id":{"type":"integer"},"source_type_name":{"type":"string","description":"Source integration name (e.g. github, jenkins)."},"tags":{"type":"array","items":{"type":"string"}},"device_name":{"type":"string"}},"required":["title","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.list","description":"Stream events from the Datadog event stream within a time window (GET /api/v1/events). Filter by priority, sources, tags, or unaggregated mode.","parameters":{"type":"object","properties":{"start":{"type":"integer","description":"POSIX seconds (required). Window start."},"end":{"type":"integer","description":"POSIX seconds (required). Window end."},"priority":{"type":"string","enum":["normal","low"]},"sources":{"type":"string","description":"Comma-separated list of source names to filter on."},"tags":{"type":"string","description":"Comma-separated list of tags to filter on (host:foo,env:prod)."},"unaggregated":{"type":"boolean"},"exclude_aggregate":{"type":"boolean"},"page":{"type":"integer","minimum":0}},"required":["start","end"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"events.get","description":"Fetch a single event by ID (GET /api/v1/events/{eventId}).","parameters":{"type":"object","properties":{"eventId":{"type":"integer"}},"required":["eventId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"checks.submit","description":"Submit a service-check status (POST /api/v1/check_run). Use 0=OK, 1=WARNING, 2=CRITICAL, 3=UNKNOWN. Service checks back monitor types of class \"service check\".","parameters":{"type":"object","properties":{"check":{"type":"string","description":"Service check name (e.g. app.is_ok)."},"host_name":{"type":"string"},"status":{"type":"integer","enum":[0,1,2,3]},"message":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"timestamp":{"type":"integer","description":"POSIX seconds. Defaults to now."}},"required":["check","host_name","status"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"datafuel","displayName":"DataFuel","description":"Crawl and scrape websites into markdown / structured JSON via the DataFuel API.","auth":{"kind":"api-key","hint":"DataFuel API key (sent as Bearer token)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"crawl.website","description":"Start a crawl job over a website and convert pages to markdown / structured data.","parameters":{"type":"object","properties":{"url":{"type":"string"},"ai_prompt":{"type":"string"},"json_schema":{"type":"object"},"depth":{"type":"integer"},"limit":{"type":"integer"}},"required":["url","depth","limit"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"scrape.website","description":"Scrape a single URL and convert its content to markdown / structured data.","parameters":{"type":"object","properties":{"url":{"type":"string"},"ai_prompt":{"type":"string"},"json_schema":{"type":"object"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.scrape","description":"Fetch the result of a previously-started scrape / crawl job by job_id.","parameters":{"type":"object","properties":{"job_id":{"type":"string"},"markdown":{"type":"boolean"},"ai_response":{"type":"boolean"}},"required":["job_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"datocms","displayName":"DatoCMS","description":"Read and mutate DatoCMS records (items), models (item types), uploads, environments, users, and webhooks via the Content Management API.","auth":{"kind":"api-key","hint":"DatoCMS full-access API token (Settings → API tokens). Sent as a Bearer token; sandbox environment selection is forwarded via the X-Environment header on capabilities that accept an `environment` parameter."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"site.get","description":"Fetch the current DatoCMS project (site) metadata.","parameters":{"type":"object","properties":{"environment":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"items.list","description":"List records (items), optionally filtered by item type and paginated.","parameters":{"type":"object","properties":{"itemTypeId":{"type":"string"},"environment":{"type":"string"},"locale":{"type":"string"},"version":{"type":"string"},"pageOffset":{"type":"integer"},"pageLimit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"items.get","description":"Fetch a single record by id.","parameters":{"type":"object","properties":{"itemId":{"type":"string"},"environment":{"type":"string"},"version":{"type":"string"}},"required":["itemId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"items.create","description":"Create a record (item) of a given item type.","parameters":{"type":"object","properties":{"itemTypeId":{"type":"string"},"attributes":{"type":"object"},"environment":{"type":"string"}},"required":["itemTypeId","attributes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"items.update","description":"Update an existing record.","parameters":{"type":"object","properties":{"itemId":{"type":"string"},"attributes":{"type":"object"},"environment":{"type":"string"}},"required":["itemId","attributes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"items.delete","description":"Delete a record.","parameters":{"type":"object","properties":{"itemId":{"type":"string"},"environment":{"type":"string"}},"required":["itemId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"items.publish","description":"Publish a draft record.","parameters":{"type":"object","properties":{"itemId":{"type":"string"},"environment":{"type":"string"}},"required":["itemId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"items.unpublish","description":"Unpublish a published record.","parameters":{"type":"object","properties":{"itemId":{"type":"string"},"environment":{"type":"string"}},"required":["itemId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"itemTypes.list","description":"List item types (models) defined in the project.","parameters":{"type":"object","properties":{"environment":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"itemTypes.get","description":"Fetch a single item type (model) by id.","parameters":{"type":"object","properties":{"itemTypeId":{"type":"string"},"environment":{"type":"string"}},"required":["itemTypeId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"uploads.list","description":"List media uploads.","parameters":{"type":"object","properties":{"environment":{"type":"string"},"pageOffset":{"type":"integer"},"pageLimit":{"type":"integer"},"query":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"uploads.get","description":"Fetch a single upload by id.","parameters":{"type":"object","properties":{"uploadId":{"type":"string"},"environment":{"type":"string"}},"required":["uploadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"uploads.create","description":"Register a previously uploaded S3 path as a DatoCMS upload (call /upload-requests first to obtain the path).","parameters":{"type":"object","properties":{"path":{"type":"string"},"author":{"type":"string"},"copyright":{"type":"string"},"notes":{"type":"string"},"defaultFieldMetadata":{"type":"object"},"environment":{"type":"string"}},"required":["path"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"uploads.requestUrl","description":"Request a signed S3 upload URL for a new media file. Returned URL is uploaded to with a separate PUT, then registered via uploads.create.","parameters":{"type":"object","properties":{"filename":{"type":"string"},"environment":{"type":"string"}},"required":["filename"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"uploads.delete","description":"Delete an upload.","parameters":{"type":"object","properties":{"uploadId":{"type":"string"},"environment":{"type":"string"}},"required":["uploadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"environments.list","description":"List sandbox environments for the project.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"environments.get","description":"Fetch a single environment by id.","parameters":{"type":"object","properties":{"environmentId":{"type":"string"}},"required":["environmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"environments.fork","description":"Fork an existing environment to create a new sandbox.","parameters":{"type":"object","properties":{"sourceEnvironmentId":{"type":"string"},"newEnvironmentId":{"type":"string"},"fast":{"type":"boolean"}},"required":["sourceEnvironmentId","newEnvironmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.list","description":"List collaborator users on the project.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.get","description":"Fetch a single collaborator by id.","parameters":{"type":"object","properties":{"userId":{"type":"string"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"webhooks.list","description":"List configured webhooks on the project.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"webhooks.get","description":"Fetch a single webhook by id.","parameters":{"type":"object","properties":{"webhookId":{"type":"string"}},"required":["webhookId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"webhooks.create","description":"Create a webhook subscription.","parameters":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"},"events":{"type":"array"},"headers":{"type":"object"},"enabled":{"type":"boolean"}},"required":["name","url","events"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Delete a webhook subscription.","parameters":{"type":"object","properties":{"webhookId":{"type":"string"}},"required":["webhookId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"deepgram","displayName":"Deepgram","description":"Transcribe audio to text, synthesize text to speech, and analyze audio content with AI-powered speech recognition.","auth":{"kind":"api-key","hint":"Deepgram API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"transcription.create","description":"Transcribe audio from a URL or file upload to text.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"URL of the audio file to transcribe."},"model":{"type":"string","description":"Model to use (nova-2, nova-2-general, nova-2-meeting, etc.)."},"language":{"type":"string","description":"BCP-47 language code (e.g., en, es, fr)."},"punctuate":{"type":"boolean","description":"Enable punctuation in transcript."},"paragraphs":{"type":"boolean","description":"Enable paragraph breaks."},"diarize":{"type":"boolean","description":"Enable speaker diarization."},"smart_format":{"type":"boolean","description":"Enable smart formatting."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transcription.get","description":"Get the status and result of a transcription request.","parameters":{"type":"object","properties":{"requestId":{"type":"string","description":"ID of the transcription request."}},"required":["requestId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"speak.generate","description":"Convert text to speech with AI-powered voice synthesis.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"Text to synthesize into speech."},"model":{"type":"string","description":"Voice model to use (aura-asteria-en, aura-luna-en, etc.)."},"encoding":{"type":"string","description":"Output audio encoding (linear16, pcm, ulaw, etc.)."},"sample_rate":{"type":"integer","description":"Sample rate in Hz (e.g., 16000, 24000)."}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.list","description":"List all projects in your Deepgram account.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.get","description":"Get details of a specific project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"UUID of the project."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"usage.list","description":"Get usage analytics and billing information for a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"UUID of the project."},"startDateTime":{"type":"string","description":"Start date in ISO 8601 format."},"endDateTime":{"type":"string","description":"End date in ISO 8601 format."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"keys.list","description":"List all API keys for a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"UUID of the project."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"keys.create","description":"Create a new API key for a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"UUID of the project."},"comment":{"type":"string","description":"Comment or description for the key."},"scopes":{"type":"array","description":"List of scopes (e.g., [\"admin\", \"member\"])."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"deepseek","displayName":"DeepSeek","description":"Generate completions with DeepSeek chat models via the DeepSeek API.","auth":{"kind":"api-key","hint":"DeepSeek API key (Bearer token from platform.deepseek.com)."},"category":"other","defaultConsistencyModel":"cache","capabilities":[{"name":"ask.deepseek","description":"Run a DeepSeek chat completion. Mirrors the activepieces \"Ask Deepseek\" action and accepts the same generation knobs.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"The DeepSeek model that will generate the completion (e.g. deepseek-chat, deepseek-reasoner)."},"prompt":{"type":"string","description":"The user question to send to the model."},"frequencyPenalty":{"type":"number","description":"Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far."},"maxTokens":{"type":"integer","description":"Maximum number of tokens to generate. Between 1 and 8192."},"presencePenalty":{"type":"number","description":"Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far."},"responseFormat":{"type":"string","description":"Response format: \"text\" or \"json_object\". JSON mode requires the prompt to also instruct JSON output.","enum":["text","json_object"]},"temperature":{"type":"number","description":"Sampling temperature between 0 and 2. Lower values produce more deterministic output."},"topP":{"type":"number","description":"Nucleus sampling cutoff. Values <= 1. Generally alter this OR temperature, not both."},"memoryKey":{"type":"string","description":"Optional key that shares chat history across runs. Leave empty to invoke the model statelessly."},"roles":{"type":"array","description":"Optional array of role messages prepended to the conversation (e.g. system / assistant / user turns).","items":{"type":"object","properties":{"role":{"type":"string","enum":["system","user","assistant"]},"content":{"type":"string"}},"required":["role","content"]}}},"required":["model","prompt","maxTokens","responseFormat"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":false},{"name":"models.list","description":"List the chat models the DeepSeek account can invoke.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"demandbase","displayName":"Demandbase","description":"Manage Demandbase platform users (list, get, create) through the Admin API using client-credentials auth.","auth":{"kind":"oauth2","grantType":"client_credentials","tokenUrl":"https://uapi.demandbase.com/auth/v1/token","scopes":[],"clientIdEnv":"DEMANDBASE_OAUTH_CLIENT_ID","clientSecretEnv":"DEMANDBASE_OAUTH_CLIENT_SECRET"},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.list","description":"List platform users. Paginate with limit/offset; filter by status/role.","parameters":{"type":"object","properties":{"limit":{"type":"number","description":"Max records to return (max 100)."},"offset":{"type":"number","description":"Pagination offset."},"status":{"type":"string","description":"Filter by user status."},"role":{"type":"string","description":"Filter by user role."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.get","description":"Get a single platform user by id.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"The user's unique identifier."}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.create","description":"Create a platform user. email, first_name, last_name, and role are required.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"User email address."},"first_name":{"type":"string","description":"User first name."},"last_name":{"type":"string","description":"User last name."},"role":{"type":"string","description":"User role within the platform."}},"required":["email","first_name","last_name","role"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"denser-ai","displayName":"Denser.ai","description":"Query Denser.ai chatbots against a tenant's document and website corpus and receive synthesized answers with optional citations.","auth":{"kind":"api-key","hint":"Denser.ai API key (workspace dashboard → API keys). Sent as a bearer token on every chat request."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"process.input.text","description":"Send a user question to a configured Denser.ai chatbot and receive a synthesized answer drawn from the chatbot's retrieval corpus. Optional knobs select the underlying model, override the system prompt, and toggle inline citations.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"Identifier of the target chatbot, copied from the Denser dashboard at https://denser.ai/u/chatbots."},"question":{"type":"string","description":"The user question to be processed by the chatbot."},"prompt":{"type":"string","description":"Optional system prompt that overrides the chatbot's default instructions for this single call."},"model":{"type":"string","description":"Optional model identifier (for example gpt-3.5, gpt-4). When omitted, Denser uses the chatbot default."},"citation":{"type":"boolean","description":"When true, the response includes inline citations linking back to the source documents used to synthesize the answer."}},"required":["chatbotId","question"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"descript","displayName":"Descript","description":"AI-powered video and podcast editor. Run Underlord edits on a project, import media, list/get projects, and publish.","auth":{"kind":"api-key","hint":"Descript personal API token (workspace settings → API)."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"projects.list","description":"List projects in the workspace, optionally filtered by name, creator, and created/updated date range.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Substring filter on project name (case-insensitive)."},"created_by":{"type":"string","description":"Filter by creator user ID, or \"me\"."},"sort":{"type":"string","enum":["name","created_at","updated_at"],"description":"Field to sort results by."},"direction":{"type":"string","enum":["asc","desc"]},"created_after":{"type":"string","description":"ISO 8601 lower bound on created_at."},"created_before":{"type":"string","description":"ISO 8601 upper bound on created_at."},"updated_after":{"type":"string","description":"ISO 8601 lower bound on updated_at."},"updated_before":{"type":"string","description":"ISO 8601 upper bound on updated_at."},"limit":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.get","description":"Fetch a single project by ID, including composition list and Drive folder.","parameters":{"type":"object","properties":{"project_id":{"type":"string"}},"required":["project_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobs.get","description":"Get the status of an Underlord/agent job. Returns state (queued|running|succeeded|failed) plus result payload on success.","parameters":{"type":"object","properties":{"job_id":{"type":"string"}},"required":["job_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"agent.edit","description":"Submit a natural-language Underlord edit job against an existing project, or create a new project first and edit it. Returns a job_id to poll via jobs.get.","parameters":{"type":"object","properties":{"mode":{"type":"string","enum":["existing","new"],"description":"Edit an existing project or create a brand-new one before editing."},"project_id":{"type":"string","description":"Required when mode = \"existing\"."},"project_name":{"type":"string","description":"Name for the new project when mode = \"new\"."},"team_access":{"type":"string","enum":["view","comment","edit"],"description":"Team access level for the newly created project (mode = \"new\" only)."},"folder_name":{"type":"string","description":"Drive folder path for the new project (mode = \"new\" only)."},"prompt":{"type":"string","description":"Natural-language instruction for Underlord (e.g. \"Remove filler words and silences\")."},"model":{"type":"string","description":"Optional Underlord model override. Blank uses the Descript default."},"callback_url":{"type":"string","format":"uri","description":"Optional webhook; Descript POSTs job status here on completion/failure."}},"required":["mode","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.import","description":"Import media (video/audio) into a project by URL. Descript fetches the URL server-side, transcribes in the given language, and optionally creates a composition on the timeline.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"media_name":{"type":"string","description":"Display name for the media file."},"media_url":{"type":"string","format":"uri","description":"Public URL of the media; must support HTTP Range and stay live ~12–48h."},"language":{"type":"string","description":"ISO 639-1 transcription language (e.g. \"en\", \"es\"). Defaults to workspace setting."},"composition_name":{"type":"string","description":"If set, create a composition (timeline) with this name from the imported media."},"composition_width":{"type":"integer","description":"Composition width in pixels. Defaults to 1920. Used only with composition_name."},"composition_height":{"type":"integer","description":"Composition height in pixels. Defaults to 1080. Used only with composition_name."}},"required":["project_id","media_name","media_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.delete","description":"Delete a Descript project by ID. Removes the project, its compositions, and any imported media.","parameters":{"type":"object","properties":{"project_id":{"type":"string"}},"required":["project_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"project.publish","description":"Export a project as video or audio and publish it as a Descript share page. Returns the share URL and export job_id.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"media_type":{"type":"string","enum":["video","audio"],"description":"Export format."},"resolution":{"type":"string","enum":["480p","720p","1080p","1440p","2160p"],"description":"Video resolution. Ignored when media_type = \"audio\"."},"access_level":{"type":"string","enum":["public","workspace","invite_only"],"description":"Who can view the share page. Blank inherits Drive default."}},"required":["project_id","media_type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"detecting-ai","displayName":"Detecting.AI","description":"Detect AI-generated content, check plagiarism, and humanize text.","auth":{"kind":"api-key","hint":"Detecting.AI API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"content.detect-ai","description":"Detect if content is AI-generated.","parameters":{"type":"object","properties":{"text":{"type":"string"},"version":{"type":"string"},"model":{"type":"string"}},"required":["text","version","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"plagiarism.check","description":"Check text for plagiarism.","parameters":{"type":"object","properties":{"text":{"type":"string"},"version":{"type":"string"},"model":{"type":"string"}},"required":["text","version","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"text.humanize","description":"Humanize AI-generated text.","parameters":{"type":"object","properties":{"text":{"type":"string"},"version":{"type":"string"},"model":{"type":"string"}},"required":["text","version","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"devin","displayName":"Devin","description":"Create Devin sessions, fetch session details, and post messages to a running session.","auth":{"kind":"api-key","hint":"Devin API key sent as Authorization: Bearer <token>."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.session","description":"Create a new Devin session with an initial prompt.","parameters":{"type":"object","properties":{"prompt":{"type":"string"},"snapshotId":{"type":"string"},"playbookId":{"type":"string"},"unlisted":{"type":"boolean"},"idempotent":{"type":"boolean"}},"required":["prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.session.details","description":"Retrieve details for an existing Devin session.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"}},"required":["sessionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"send.message","description":"Send a follow-up message to an active Devin session.","parameters":{"type":"object","properties":{"sessionId":{"type":"string"},"message":{"type":"string"}},"required":["sessionId","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sessions.list","description":"List Devin sessions visible to the API key. Optional limit/status filters.","parameters":{"type":"object","properties":{"limit":{"type":"number","description":"Maximum number of sessions to return."},"status":{"type":"string","description":"Filter to sessions in the given status."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"attachments.upload","description":"Upload an attachment to an existing Devin session. `content` is the file body; set `encoding=\"base64\"` for binary payloads. `mime_type` defaults upstream when omitted.","parameters":{"type":"object","properties":{"session_id":{"type":"string","description":"Devin session id the attachment belongs to."},"content":{"type":"string","description":"File contents, interpreted per `encoding`."},"encoding":{"type":"string","enum":["utf-8","base64"],"default":"utf-8","description":"Encoding of `content`. Use base64 for binary payloads."},"filename":{"type":"string","description":"Filename including extension."},"mime_type":{"type":"string","description":"Optional MIME type for the upload."}},"required":["session_id","content","filename"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"dialpad","displayName":"Dialpad","description":"Read Dialpad contacts, calls, and users, create contacts, and send SMS through the v2 API.","auth":{"kind":"oauth2","authorizationUrl":"https://dialpad.com/oauth2/authorize","tokenUrl":"https://dialpad.com/oauth2/token","scopes":["calls:list","offline_access"],"clientIdEnv":"DIALPAD_OAUTH_CLIENT_ID","clientSecretEnv":"DIALPAD_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.list","description":"List contacts. Set include_local + owner_id to include a user's local contacts; paginate with cursor.","parameters":{"type":"object","properties":{"cursor":{"type":"string","description":"Pagination token from a previous response."},"include_local":{"type":"boolean","description":"Include company local contacts (default false)."},"owner_id":{"type":"string","description":"User id whose local contacts should be retrieved."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create a contact. first_name and last_name are required. Omit owner_id for a shared company contact.","parameters":{"type":"object","properties":{"first_name":{"type":"string","description":"Contact's first name."},"last_name":{"type":"string","description":"Contact's last name."},"company_name":{"type":"string","description":"Contact's company name."},"job_title":{"type":"string","description":"Contact's job title."},"emails":{"type":"array","description":"Email strings; primary first.","items":{"type":"string"}},"phones":{"type":"array","description":"E.164-formatted phone strings; primary first.","items":{"type":"string"}},"owner_id":{"type":"string","description":"User id to create a local contact for; omit for a shared company contact."}},"required":["first_name","last_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.list","description":"List calls. Filter by started_after/started_before (UTC ms) and target; paginate with cursor.","parameters":{"type":"object","properties":{"cursor":{"type":"string","description":"Pagination token from a previous response."},"started_after":{"type":"number","description":"UTC millisecond timestamp; calls started after this time."},"started_before":{"type":"number","description":"UTC millisecond timestamp; calls started before this time."},"target_id":{"type":"number","description":"Filter calls by target entity id."},"target_type":{"type":"string","description":"Target type: callcenter, callrouter, channel, coaching, team, department, office, user, etc."},"include_anonymized":{"type":"boolean","description":"Include anonymized call records (default false)."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.get","description":"Get a single call by id.","parameters":{"type":"object","properties":{"id":{"type":"number","description":"The call's unique identifier (int64)."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sms.send","description":"Send an SMS/MMS. to_numbers = up to 10 E.164 destinations, text = body. Provide one sender: user_id, from_number, or sender_group_id(+type).","parameters":{"type":"object","properties":{"to_numbers":{"type":"array","description":"Up to 10 E.164-formatted destination numbers.","items":{"type":"string"}},"text":{"type":"string","description":"Message body text."},"user_id":{"type":"number","description":"Sender's Dialpad user id."},"from_number":{"type":"string","description":"Sender's phone number; overrides user_id/sender_group_id."},"sender_group_id":{"type":"number","description":"Office, department, or call-center id to send from."},"sender_group_type":{"type":"string","enum":["callcenter","department","office"],"description":"Sender group type."},"media":{"type":"string","description":"Base64-encoded media attachment (max 500 KiB); triggers MMS."},"infer_country_code":{"type":"boolean","description":"Relax strict E.164 requirement (default false)."}},"required":["to_numbers","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.list","description":"List users. Filter by email/name/state; paginate with cursor.","parameters":{"type":"object","properties":{"cursor":{"type":"string","description":"Pagination token from a previous response."},"email":{"type":"string","description":"Filter by user's email address."},"first_name":{"type":"string","description":"Filter by first-name prefix."},"last_name":{"type":"string","description":"Filter by last-name prefix."},"state":{"type":"string","description":"Filter by state: active, all, cancelled, deleted, pending, suspended."},"company_admin":{"type":"boolean","description":"Return only company admins (true) or non-admins (false)."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"digital-ocean","displayName":"DigitalOcean","description":"Inspect and manage DigitalOcean projects, Droplets, volumes, databases, and App Platform apps.","auth":{"kind":"api-key","hint":"DigitalOcean personal access token with the minimum required scopes."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.get","description":"Read the current account and status.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.list","description":"List projects.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"perPage":{"type":"integer","minimum":1,"maximum":200}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.get","description":"Read one project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.create","description":"Create a project.","parameters":{"type":"object","properties":{"project":{"type":"object"}},"required":["project"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"projects.update","description":"Update a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"project":{"type":"object"}},"required":["projectId","project"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"projects.delete","description":"Delete a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"droplets.list","description":"List Droplets.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"perPage":{"type":"integer","minimum":1,"maximum":200},"tagName":{"type":"string"},"name":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"droplets.get","description":"Read one Droplet.","parameters":{"type":"object","properties":{"dropletId":{"type":"integer"}},"required":["dropletId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"droplets.create","description":"Create one or more Droplets.","parameters":{"type":"object","properties":{"droplet":{"type":"object"}},"required":["droplet"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"droplets.action","description":"Run a provider-native Droplet action such as power_on, shutdown, snapshot, resize, or rebuild.","parameters":{"type":"object","properties":{"dropletId":{"type":"integer"},"action":{"type":"object"}},"required":["dropletId","action"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"droplets.delete","description":"Delete a Droplet.","parameters":{"type":"object","properties":{"dropletId":{"type":"integer"}},"required":["dropletId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"volumes.list","description":"List block-storage volumes.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"perPage":{"type":"integer","minimum":1,"maximum":200},"region":{"type":"string"},"name":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"volumes.create","description":"Create a block-storage volume.","parameters":{"type":"object","properties":{"volume":{"type":"object"}},"required":["volume"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"volumes.delete","description":"Delete a block-storage volume.","parameters":{"type":"object","properties":{"volumeId":{"type":"string"}},"required":["volumeId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"databases.list","description":"List managed database clusters.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"perPage":{"type":"integer","minimum":1,"maximum":200},"tagName":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"databases.get","description":"Read a managed database cluster.","parameters":{"type":"object","properties":{"databaseId":{"type":"string"}},"required":["databaseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"databases.create","description":"Create a managed database cluster.","parameters":{"type":"object","properties":{"database":{"type":"object"}},"required":["database"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"databases.delete","description":"Delete a managed database cluster.","parameters":{"type":"object","properties":{"databaseId":{"type":"string"}},"required":["databaseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"apps.list","description":"List App Platform apps.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"perPage":{"type":"integer","minimum":1,"maximum":200}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"apps.get","description":"Read an App Platform app.","parameters":{"type":"object","properties":{"appId":{"type":"string"}},"required":["appId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"apps.create","description":"Create an App Platform app.","parameters":{"type":"object","properties":{"spec":{"type":"object"}},"required":["spec"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"apps.update","description":"Update an App Platform app specification.","parameters":{"type":"object","properties":{"appId":{"type":"string"},"spec":{"type":"object"}},"required":["appId","spec"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"apps.delete","description":"Delete an App Platform app.","parameters":{"type":"object","properties":{"appId":{"type":"string"}},"required":["appId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"digital-pilot","displayName":"DigitalPilot","description":"Manage target accounts and monitor high-intent visits in DigitalPilot.","auth":{"kind":"api-key","hint":"DigitalPilot API key and account domain."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"target-accounts.add","description":"Add a target account to track in DigitalPilot.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"The account ID to add"},"accountName":{"type":"string","description":"The account name"},"domain":{"type":"string","description":"Account domain"}},"required":["accountId","accountName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"target-accounts.remove","description":"Remove a target account from DigitalPilot.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"The account ID to remove"}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"visits.search","description":"Search high-intent visits from target accounts.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Filter by target account ID"},"intentLevel":{"type":"string","description":"Filter by intent level (high, medium, low)"},"limit":{"type":"integer","description":"Maximum number of results"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"visits.get","description":"Get details of a specific visit.","parameters":{"type":"object","properties":{"visitId":{"type":"string","description":"The visit ID"}},"required":["visitId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"discord","displayName":"Discord","description":"Read Discord guilds, channels, members, and messages, and post or edit messages on behalf of a connected user.","auth":{"kind":"oauth2","authorizationUrl":"https://discord.com/oauth2/authorize","tokenUrl":"https://discord.com/api/oauth2/token","scopes":["identify","email","guilds","guilds.members.read","messages.read","webhook.incoming"],"clientIdEnv":"DISCORD_OAUTH_CLIENT_ID","clientSecretEnv":"DISCORD_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"advisory","capabilities":[{"name":"users.me","description":"Return the connected Discord user (id, username, email if granted, avatar).","parameters":{"type":"object","properties":{}},"requiredScopes":["identify"],"class":"read"},{"name":"guilds.list","description":"List guilds (servers) the connected user is a member of. Pagination via `before`, `after`, `limit` (max 200).","parameters":{"type":"object","properties":{"before":{"type":"string","description":"Snowflake id; return guilds before this id."},"after":{"type":"string","description":"Snowflake id; return guilds after this id."},"limit":{"type":"integer","minimum":1,"maximum":200,"default":200}}},"requiredScopes":["guilds"],"class":"read"},{"name":"guilds.get","description":"Read a single guild by id.","parameters":{"type":"object","properties":{"guildId":{"type":"string"}},"required":["guildId"]},"requiredScopes":["guilds"],"class":"read"},{"name":"guilds.channels.list","description":"List channels in a guild.","parameters":{"type":"object","properties":{"guildId":{"type":"string"}},"required":["guildId"]},"requiredScopes":["guilds"],"class":"read"},{"name":"guilds.members.list","description":"List guild members. Requires `guilds.members.read` scope.","parameters":{"type":"object","properties":{"guildId":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":1000,"default":100},"after":{"type":"string","description":"Snowflake id; pagination cursor."}},"required":["guildId"]},"requiredScopes":["guilds.members.read"],"class":"read"},{"name":"guilds.members.get","description":"Read a single member of a guild by user id.","parameters":{"type":"object","properties":{"guildId":{"type":"string"},"userId":{"type":"string"}},"required":["guildId","userId"]},"requiredScopes":["guilds.members.read"],"class":"read"},{"name":"channels.get","description":"Read a channel by id.","parameters":{"type":"object","properties":{"channelId":{"type":"string"}},"required":["channelId"]},"requiredScopes":["guilds"],"class":"read"},{"name":"channels.messages.list","description":"List messages in a channel. Pagination uses snowflake cursors `before`, `after`, `around`; `limit` max 100.","parameters":{"type":"object","properties":{"channelId":{"type":"string"},"before":{"type":"string"},"after":{"type":"string"},"around":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"required":["channelId"]},"requiredScopes":["messages.read"],"class":"read"},{"name":"channels.messages.get","description":"Read a single message from a channel by id.","parameters":{"type":"object","properties":{"channelId":{"type":"string"},"messageId":{"type":"string"}},"required":["channelId","messageId"]},"requiredScopes":["messages.read"],"class":"read"},{"name":"channels.messages.create","description":"Post a message to a channel. Provide `content` or `embeds`. Append-only — no CAS — the caller owns dedupe via idempotencyKey.","parameters":{"type":"object","properties":{"channelId":{"type":"string"},"content":{"type":"string"},"tts":{"type":"boolean"},"embeds":{"type":"array","items":{"type":"object"},"description":"Discord embed objects."},"allowed_mentions":{"type":"object"},"message_reference":{"type":"object","description":"Reply target: { message_id, channel_id?, guild_id?, fail_if_not_exists? }."},"components":{"type":"array","items":{"type":"object"},"description":"Message components (action rows / buttons)."},"flags":{"type":"integer","description":"Bitfield of message flags."}},"required":["channelId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"channels.messages.update","description":"Edit a previously posted message. Only the message author can edit.","parameters":{"type":"object","properties":{"channelId":{"type":"string"},"messageId":{"type":"string"},"content":{"type":"string"},"embeds":{"type":"array","items":{"type":"object"}},"allowed_mentions":{"type":"object"},"components":{"type":"array","items":{"type":"object"}},"flags":{"type":"integer"}},"required":["channelId","messageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"channels.messages.delete","description":"Delete a message. Idempotent on the message id.","parameters":{"type":"object","properties":{"channelId":{"type":"string"},"messageId":{"type":"string"}},"required":["channelId","messageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"channels.messages.reactions.create","description":"Add a reaction to a message. `emoji` is URL-encoded by the request engine; unicode emoji or `name:id` for custom.","parameters":{"type":"object","properties":{"channelId":{"type":"string"},"messageId":{"type":"string"},"emoji":{"type":"string","description":"Unicode emoji or `name:id` for a custom guild emoji."}},"required":["channelId","messageId","emoji"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"channels.threads.create","description":"Create a thread in a channel without an anchor message.","parameters":{"type":"object","properties":{"channelId":{"type":"string"},"name":{"type":"string"},"type":{"type":"integer","description":"Channel type: 11 = public thread, 12 = private thread, 10 = announcement thread."},"auto_archive_duration":{"type":"integer","enum":[60,1440,4320,10080],"description":"Minutes of inactivity before auto-archive."},"invitable":{"type":"boolean"},"rate_limit_per_user":{"type":"integer","minimum":0,"maximum":21600}},"required":["channelId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"discourse","displayName":"Discourse","description":"Manage Discourse categories, topics, posts, groups, notifications, search, and moderation.","auth":{"kind":"api-key","hint":"JSON containing apiKey and apiUsername. Use a dedicated, narrowly scoped Discourse API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"categories.list","description":"List visible categories and optional subcategories.","parameters":{"type":"object","properties":{"includeSubcategories":{"type":"boolean"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"categories.create","description":"Create a category with provider-native settings and permissions.","parameters":{"type":"object","properties":{"category":{"type":"object","description":"Category definition containing at least name."}},"required":["category"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"categories.update","description":"Update a category.","parameters":{"type":"object","properties":{"categoryId":{"type":"integer"},"category":{"type":"object","description":"Provider-native category patch."}},"required":["categoryId","category"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"topics.latest","description":"List latest topics.","parameters":{"type":"object","properties":{"order":{"type":"string","enum":["default","created","activity","views","posts","category","likes","op_likes","posters"]},"ascending":{"type":"boolean"},"perPage":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"topics.get","description":"Read a topic and its post stream.","parameters":{"type":"object","properties":{"topicId":{"type":"integer","description":"Discourse topic id."}},"required":["topicId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"topics.create","description":"Create a topic.","parameters":{"type":"object","properties":{"title":{"type":"string"},"raw":{"type":"string","description":"Raw Markdown post body."},"categoryId":{"type":"integer"},"externalId":{"type":"string"},"embedUrl":{"type":"string","format":"uri"},"autoTrack":{"type":"boolean"}},"required":["title","raw"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"topics.update","description":"Update a topic title or category.","parameters":{"type":"object","properties":{"topicId":{"type":"integer","description":"Discourse topic id."},"title":{"type":"string"},"categoryId":{"type":"integer"}},"required":["topicId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"topics.set-status","description":"Close, pin, archive, or hide a topic, or reverse that status.","parameters":{"type":"object","properties":{"topicId":{"type":"integer","description":"Discourse topic id."},"status":{"type":"string","enum":["closed","pinned","pinned_globally","archived","visible"]},"enabled":{"type":"boolean"},"until":{"type":"string","description":"Required by Discourse for temporary pinning."}},"required":["topicId","status","enabled"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"topics.delete","description":"Delete a topic.","parameters":{"type":"object","properties":{"topicId":{"type":"integer","description":"Discourse topic id."}},"required":["topicId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"posts.get","description":"Read one post.","parameters":{"type":"object","properties":{"postId":{"type":"integer","description":"Discourse post id."}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"posts.create","description":"Reply to a topic.","parameters":{"type":"object","properties":{"topicId":{"type":"integer","description":"Discourse topic id."},"raw":{"type":"string","description":"Raw Markdown post body."},"replyToPostNumber":{"type":"integer"}},"required":["topicId","raw"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"posts.update","description":"Edit a post with an optional reason.","parameters":{"type":"object","properties":{"postId":{"type":"integer","description":"Discourse post id."},"raw":{"type":"string"},"editReason":{"type":"string"},"bypassBump":{"type":"boolean"}},"required":["postId","raw"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"posts.delete","description":"Delete a post.","parameters":{"type":"object","properties":{"postId":{"type":"integer","description":"Discourse post id."}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"search.query","description":"Search topics, posts, users, and categories using Discourse search syntax.","parameters":{"type":"object","properties":{"query":{"type":"string"},"page":{"type":"integer","minimum":1}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tags.list","description":"List tags.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.get","description":"Read a public user profile.","parameters":{"type":"object","properties":{"username":{"type":"string"}},"required":["username"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.list","description":"List groups.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.get","description":"Read a group by name.","parameters":{"type":"object","properties":{"groupName":{"type":"string"}},"required":["groupName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.members.list","description":"List members of a group.","parameters":{"type":"object","properties":{"groupName":{"type":"string"}},"required":["groupName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.members.add","description":"Add comma-separated usernames to a group.","parameters":{"type":"object","properties":{"groupId":{"type":"integer"},"usernames":{"type":"string"}},"required":["groupId","usernames"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"groups.members.remove","description":"Remove comma-separated usernames from a group.","parameters":{"type":"object","properties":{"groupId":{"type":"integer"},"usernames":{"type":"string"}},"required":["groupId","usernames"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"notifications.list","description":"List notifications for the API username.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1},"recent":{"type":"boolean"},"unread":{"type":"boolean"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"notifications.mark-read","description":"Mark one notification, or all notifications, as read.","parameters":{"type":"object","properties":{"notificationId":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"moderation.users.suspend","description":"Suspend a user until a date with an auditable reason.","parameters":{"type":"object","properties":{"userId":{"type":"integer"},"suspendUntil":{"type":"string","format":"date"},"reason":{"type":"string"},"message":{"type":"string"},"postAction":{"type":"string"}},"required":["userId","suspendUntil","reason"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"dittofeed","displayName":"Dittofeed","description":"Send identify, track, and screen events to a self-hosted or cloud Dittofeed instance for customer messaging segmentation.","auth":{"kind":"api-key","hint":"Dittofeed workspace API key for the public apps API."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.identify","description":"Identify a Dittofeed user, attaching traits to the user profile.","parameters":{"type":"object","properties":{"userId":{"type":"string"},"traits":{"type":"object"},"messageId":{"type":"string"},"timestamp":{"type":"string"},"context":{"type":"object"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.track","description":"Track a named event for a Dittofeed user with optional properties.","parameters":{"type":"object","properties":{"userId":{"type":"string"},"event":{"type":"string"},"properties":{"type":"object"},"messageId":{"type":"string"},"timestamp":{"type":"string"},"context":{"type":"object"}},"required":["userId","event"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"screens.record","description":"Record a screen view for a Dittofeed user with optional screen properties.","parameters":{"type":"object","properties":{"userId":{"type":"string"},"name":{"type":"string"},"properties":{"type":"object"},"messageId":{"type":"string"},"timestamp":{"type":"string"},"context":{"type":"object"}},"required":["userId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.create","description":"Add or update a subscriber by identifying the user and persisting subscriber traits (email, phone, subscription groups).","parameters":{"type":"object","properties":{"userId":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"traits":{"type":"object"},"subscriptionGroupId":{"type":"string"},"messageId":{"type":"string"},"timestamp":{"type":"string"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.delete","description":"Delete a subscriber by emitting a Subscription Cancelled event (Dittofeed has no public hard-delete; this is the documented removal path).","parameters":{"type":"object","properties":{"userId":{"type":"string"},"subscriptionGroupId":{"type":"string"}},"required":["userId","subscriptionGroupId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"broadcast.send","description":"Trigger a Dittofeed broadcast by id. The broadcast must already be defined in the workspace; this dispatches it to the configured audience.","parameters":{"type":"object","properties":{"broadcastId":{"type":"string"},"workspaceId":{"type":"string"}},"required":["broadcastId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"journey.trigger","description":"Trigger a Dittofeed journey for a specific user. The journey id must reference a published journey in the workspace.","parameters":{"type":"object","properties":{"journeyId":{"type":"string"},"userId":{"type":"string"},"workspaceId":{"type":"string"},"context":{"type":"object"}},"required":["journeyId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"docsbot","displayName":"DocsBot","description":"Build AI-powered chatbots that pull answers from your documentation and dynamically update training sources.","auth":{"kind":"api-key","hint":"DocsBot API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"bots.find","description":"Find or list bots in your account.","parameters":{"type":"object","properties":{"botId":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bots.create","description":"Create a new DocsBot.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"language":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sources.create","description":"Create a new training source for a bot.","parameters":{"type":"object","properties":{"botId":{"type":"string"},"type":{"type":"string"},"name":{"type":"string"},"content":{"type":"string"}},"required":["botId","type","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sources.upload","description":"Upload a file as a training source for a bot.","parameters":{"type":"object","properties":{"botId":{"type":"string"},"fileName":{"type":"string"},"fileContent":{"type":"string"}},"required":["botId","fileName","fileContent"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sources.delete","description":"Delete a training source from a bot.","parameters":{"type":"object","properties":{"botId":{"type":"string"},"sourceId":{"type":"string"}},"required":["botId","sourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.ask","description":"Ask a question to a DocsBot.","parameters":{"type":"object","properties":{"botId":{"type":"string"},"question":{"type":"string"},"conversationId":{"type":"string"}},"required":["botId","question"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"doctly","displayName":"Doctly AI","description":"Convert PDFs to markdown via the Doctly document-parse API.","auth":{"kind":"api-key","hint":"Doctly API key (Bearer token)."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"convert.pdf.to.text","description":"Upload a PDF document for markdown conversion. Returns a document handle with `id` and initial `status`; poll documents.get until status is COMPLETED, then fetch output_file_url.","parameters":{"type":"object","properties":{"file":{"type":"string","description":"PDF payload as a base64-encoded string (no data: URL prefix). The Doctly API treats this as the document body."},"filename":{"type":"string","description":"Original filename of the uploaded PDF (used for downstream document naming)."}},"required":["file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.get","description":"Fetch the current state of a Doctly document by id. Use this to poll the upload until status is COMPLETED or FAILED; the COMPLETED payload includes `output_file_url`.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"Document id returned by convert.pdf.to.text."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.delete","description":"Delete a processed document from Doctly. Removes the original upload, the parsed markdown output, and any associated job state.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"Document id returned by convert.pdf.to.text."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"jobs.cancel","description":"Cancel an in-flight Doctly processing job. Doctly tracks one parse job per document; cancelling deletes the document handle and stops any pending OCR/markdown work.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"Document id whose parse job should be cancelled."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"documentpro","displayName":"DocumentPro","description":"Run a DocumentPro extract Workflow against a previously uploaded document and receive the structured fields parsed by the AI pipeline.","auth":{"kind":"api-key","hint":"DocumentPro API key (workspace settings -> API). Sent as the x-api-key header on every request."},"category":"doc","defaultConsistencyModel":"advisory","capabilities":[{"name":"run.extract","description":"Run an extract / Workflow against a previously uploaded document and return the structured fields produced by the configured template. Optional flags toggle OCR, layout / table detection, page selection, and regex-based segmentation.","parameters":{"type":"object","properties":{"document_id":{"type":"string","description":"ID returned by the upload endpoint (POST /v1/documents). Identifies the file to parse."},"template_id":{"type":"string","description":"ID of the Workflow / template to run. Templates are created in the DocumentPro UI and define the fields to extract."},"use_ocr":{"type":"boolean","description":"Enable the OCR pipeline. Required when using gpt-3.5-turbo or any OCR-dependent flag (layout, tables, regex segmentation)."},"query_model":{"type":"string","description":"AI model used for parsing (e.g. \"gpt-4o\", \"gpt-3.5-turbo\"). Defaults to the template setting if omitted."},"detect_layout":{"type":"boolean","description":"Detect document layout (columns, headers, blocks). Requires use_ocr=true."},"detect_tables":{"type":"boolean","description":"Detect tables and emit them as structured rows. Requires use_ocr=true."},"page_ranges":{"type":"string","description":"Which pages to parse, e.g. \"1-3,5,7-9\". Empty / omitted = all pages."},"chunk_by_pages":{"type":"integer","description":"Pages per segment for method-1 segmentation. Pass 0 / omit to disable."},"rolling_window":{"type":"integer","description":"Window size in pages for method-2 segmentation. Pass 0 / omit to disable."},"start_regex":{"type":"string","description":"Regex marking where parsing should begin within the document text. Requires use_ocr=true."},"end_regex":{"type":"string","description":"Regex marking where parsing should stop. Requires use_ocr=true."},"split_regex":{"type":"string","description":"Regex used to split the document into sections before extraction. Requires use_ocr=true."},"use_all_matches":{"type":"boolean","description":"When true, every regex match yields a section; when false, only the first match is used. Requires use_ocr=true."}},"required":["document_id","template_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"documents.delete","description":"Delete a previously uploaded DocumentPro document and its associated extraction history. Cannot be undone.","parameters":{"type":"object","properties":{"document_id":{"type":"string","description":"ID of the document to remove (returned by the upload endpoint)."}},"required":["document_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"extraction.export","description":"Export the structured extraction for a document in the requested format (json, csv, xlsx). The response is the serialized export payload.","parameters":{"type":"object","properties":{"document_id":{"type":"string","description":"ID of the document whose extraction should be exported."},"template_id":{"type":"string","description":"Template / Workflow whose extraction is being exported. Required when a document has multiple templates run against it."},"format":{"type":"string","enum":["json","csv","xlsx"],"description":"Export format. Defaults to json on the upstream when omitted."}},"required":["document_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"documerge","displayName":"DocuMerge","description":"Merge and generate documents with dynamic data via DocuMerge: combine files, convert files to PDF, split PDFs, and run document/data-route merges.","auth":{"kind":"api-key","hint":"DocuMerge API key issued from the workspace settings."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"files.combine","description":"Combine multiple files (by file identifier, URL, or inline contents) into a single output file in the requested format.","parameters":{"type":"object","properties":{"output":{"type":"string","description":"Output format for the combined file (e.g. \"pdf\", \"docx\")."},"files":{"type":"array","description":"Array of file identifiers to combine.","items":{"type":"string"}},"name":{"type":"string","description":"Name for the combined output file."},"url":{"type":"string","format":"uri","description":"URL of an additional file to include in the merge."},"contents":{"type":"string","description":"Additional inline content to include alongside the listed files."}},"required":["output","files"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.convertToPdf","description":"Convert a single file (by file identifier or remote URL) into a PDF.","parameters":{"type":"object","properties":{"fileName":{"type":"string","description":"Name of the file to convert."},"fileUrl":{"type":"string","format":"uri","description":"URL of the source file to convert (if the file is not already uploaded)."}},"required":["fileName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"dataRouteMerge.create","description":"Run a data-route merge using a configured route key and a field-data payload.","parameters":{"type":"object","properties":{"routeKey":{"type":"string","description":"Key of the data route to merge against."},"fields":{"type":"object","description":"Field data to merge into the route template."}},"required":["routeKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documentMerge.create","description":"Run a document merge using a configured document key and a field-data payload.","parameters":{"type":"object","properties":{"documentKey":{"type":"string","description":"Key of the document template to merge."},"fields":{"type":"object","description":"Field data to merge into the document template."}},"required":["documentKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pdf.split","description":"Split a PDF by extracting and/or removing specified page numbers or ranges; returns the resulting PDF(s).","parameters":{"type":"object","properties":{"fileName":{"type":"string","description":"Name of the source PDF file."},"fileUrl":{"type":"string","format":"uri","description":"URL of the source PDF if not already uploaded."},"extract":{"type":"array","description":"Page numbers or ranges to extract (e.g. [\"1\", \"3-5\"]).","items":{"type":"string"}},"remove":{"type":"array","description":"Page numbers or ranges to remove (e.g. [\"2\", \"6-7\"]).","items":{"type":"string"}}},"required":["fileName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"docuseal","displayName":"DocuSeal","description":"Send documents for e-signature via DocuSeal, poll submission status, void in-flight submissions, and react to push events when submitters sign.","auth":{"kind":"api-key","hint":"Paste a DocuSeal personal API key (settings → API). Optional webhook secret enables push-driven workflows."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"get_submission","class":"read","description":"Fetch the current status of a DocuSeal submission and each submitter.","parameters":{"type":"object","properties":{"submissionId":{"type":"string"}},"required":["submissionId"]}},{"name":"create_submission","class":"mutation","description":"Send a template for signature to one or more submitters. external_id is the idempotency key; retries return the original submission.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"templateId":{"type":"string"},"submitters":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"values":{"type":"object","additionalProperties":true}},"required":["email"]}},"sendEmail":{"type":"boolean","default":true},"message":{"type":"string"}},"required":["templateId","submitters"]}},{"name":"void_submission","class":"mutation","description":"Cancel an in-flight submission. CAS via updated_at — concurrent voids return ResourceContention.","cas":"etag-if-match","externalEffect":true,"parameters":{"type":"object","properties":{"submissionId":{"type":"string"},"reason":{"type":"string"}},"required":["submissionId"]}}]},{"kind":"docusign","displayName":"DocuSign","description":"Create, send, and manage DocuSign envelopes; list templates and inspect recipient signing status.","auth":{"kind":"oauth2","authorizationUrl":"https://account.docusign.com/oauth/auth","tokenUrl":"https://account.docusign.com/oauth/token","scopes":["signature","extended"],"clientIdEnv":"DOCUSIGN_OAUTH_CLIENT_ID","clientSecretEnv":"DOCUSIGN_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"envelopes.list","description":"List envelopes for an account, optionally filtered by status, date range, or folder.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"from_date":{"type":"string","description":"ISO-8601 date; only envelopes changed at or after this time are returned."},"to_date":{"type":"string","description":"ISO-8601 upper bound on envelope last-change time."},"status":{"type":"string","description":"Comma-separated list of envelope statuses, e.g. sent,delivered,completed."},"folder_ids":{"type":"string","description":"Comma-separated folder ids to restrict the search."},"search_text":{"type":"string"},"count":{"type":"integer","minimum":1,"maximum":100},"start_position":{"type":"integer","minimum":0}},"required":["accountId","from_date"]},"requiredScopes":["signature"],"class":"read"},{"name":"envelopes.get","description":"Read a single envelope by id. Pass include=recipients,tabs,documents to expand the response.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"envelopeId":{"type":"string"},"include":{"type":"string","description":"Comma-separated expansion list: recipients, tabs, documents, custom_fields."},"advanced_update":{"type":"boolean"}},"required":["accountId","envelopeId"]},"requiredScopes":["signature"],"class":"read"},{"name":"envelopes.create","description":"Create and optionally send an envelope. Set status=\"sent\" to dispatch immediately; status=\"created\" leaves it as a draft.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"emailSubject":{"type":"string"},"emailBlurb":{"type":"string"},"status":{"type":"string","enum":["created","sent"]},"documents":{"type":"array","items":{"type":"object"},"description":"Document descriptors: name, documentId, fileExtension, documentBase64."},"recipients":{"type":"object","description":"Recipients envelope, e.g. { signers: [...], carbonCopies: [...] }."},"templateId":{"type":"string"},"templateRoles":{"type":"array","items":{"type":"object"}},"customFields":{"type":"object"},"eventNotification":{"type":"object"},"brandId":{"type":"string"}},"required":["accountId","emailSubject"]},"requiredScopes":["signature"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"envelopes.update","description":"Update an existing envelope: change status (e.g. created → sent to dispatch a draft), patch metadata, or void it via status=\"voided\" with a voidedReason.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"envelopeId":{"type":"string"},"status":{"type":"string","enum":["sent","voided","created","correct"]},"voidedReason":{"type":"string"},"emailSubject":{"type":"string"},"emailBlurb":{"type":"string"},"purgeState":{"type":"string","enum":["unpurged","documents_queued","documents_and_metadata_queued"]},"advanced_update":{"type":"boolean"}},"required":["accountId","envelopeId"]},"requiredScopes":["signature"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"envelopes.recipients.list","description":"List recipients of an envelope, including signing status, routing order, and tabs when expanded.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"envelopeId":{"type":"string"},"include_tabs":{"type":"boolean"},"include_extended":{"type":"boolean"},"include_metadata":{"type":"boolean"}},"required":["accountId","envelopeId"]},"requiredScopes":["signature"],"class":"read"},{"name":"envelopes.recipients.update","description":"Modify or add recipients on an in-flight envelope. resend_envelope=true triggers a fresh signing notice.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"envelopeId":{"type":"string"},"resend_envelope":{"type":"boolean"},"signers":{"type":"array","items":{"type":"object"}},"carbonCopies":{"type":"array","items":{"type":"object"}},"certifiedDeliveries":{"type":"array","items":{"type":"object"}}},"required":["accountId","envelopeId"]},"requiredScopes":["signature"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"envelopes.documents.list","description":"List documents attached to an envelope.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"envelopeId":{"type":"string"},"include_metadata":{"type":"boolean"},"include_tabs":{"type":"boolean"},"documents_by_userid":{"type":"boolean"}},"required":["accountId","envelopeId"]},"requiredScopes":["signature"],"class":"read"},{"name":"templates.list","description":"List account-level templates, optionally filtered by folder, shared status, or search text.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"folder_ids":{"type":"string"},"search_text":{"type":"string"},"shared":{"type":"string","enum":["shared_with_me","all"]},"order_by":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]},"count":{"type":"integer","minimum":1,"maximum":100},"start_position":{"type":"integer","minimum":0}},"required":["accountId"]},"requiredScopes":["signature"],"class":"read"},{"name":"templates.get","description":"Read a single template definition by id.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"templateId":{"type":"string"},"include":{"type":"string"}},"required":["accountId","templateId"]},"requiredScopes":["signature"],"class":"read"},{"name":"envelope.send","description":"Send a previously-drafted DocuSign envelope by transitioning its status from \"created\" to \"sent\". Idempotent: sending an already-sent envelope is a no-op.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"envelopeId":{"type":"string"}},"required":["accountId","envelopeId"]},"requiredScopes":["signature"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"envelope.void","description":"Void an in-progress DocuSign envelope. Requires a voidedReason string that is recorded on the envelope and shown to signers.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"envelopeId":{"type":"string"},"voidedReason":{"type":"string"}},"required":["accountId","envelopeId","voidedReason"]},"requiredScopes":["signature"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"recipient.resendInvitation","description":"Resend the signing invitation email to one or more recipients of an in-flight envelope. Pass the recipient descriptors that should be re-notified; resend_envelope=true is forced on.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"envelopeId":{"type":"string"},"signers":{"type":"array","items":{"type":"object"}},"carbonCopies":{"type":"array","items":{"type":"object"}},"certifiedDeliveries":{"type":"array","items":{"type":"object"}}},"required":["accountId","envelopeId"]},"requiredScopes":["signature"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"envelopes.views.recipient","description":"Create an embedded-signing recipient view URL. The returned `url` is a one-time link the caller redirects the signer into.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"envelopeId":{"type":"string"},"returnUrl":{"type":"string"},"authenticationMethod":{"type":"string"},"clientUserId":{"type":"string"},"email":{"type":"string"},"userName":{"type":"string"},"frameAncestors":{"type":"array","items":{"type":"string"}},"messageOrigins":{"type":"array","items":{"type":"string"}}},"required":["accountId","envelopeId","returnUrl","authenticationMethod","clientUserId","email","userName"]},"requiredScopes":["signature"],"class":"mutation","cas":"native-idempotency","externalEffect":false}]},{"kind":"drip","displayName":"Drip","description":"Manage subscribers, campaigns, and tags in the Drip e-commerce CRM.","auth":{"kind":"api-key","hint":"Drip API token from account settings. The connection must also store the account_id."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"subscribers.add_to_campaign","description":"Add a subscriber to a Drip campaign.","parameters":{"type":"object","properties":{"account_id":{"type":"string","description":"Drip account ID"},"email":{"type":"string","description":"Subscriber email address"},"campaign_id":{"type":"string","description":"Campaign ID to add to"},"first_name":{"type":"string","description":"Subscriber first name"},"last_name":{"type":"string","description":"Subscriber last name"},"phone":{"type":"string","description":"Subscriber phone number"},"address":{"type":"string","description":"Subscriber address"},"city":{"type":"string","description":"Subscriber city"},"state":{"type":"string","description":"Subscriber state"},"zip":{"type":"string","description":"Subscriber zip code"},"country":{"type":"string","description":"Subscriber country"}},"required":["account_id","email","campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.apply_tag","description":"Apply a tag to a Drip subscriber.","parameters":{"type":"object","properties":{"account_id":{"type":"string","description":"Drip account ID"},"email":{"type":"string","description":"Subscriber email address"},"tag":{"type":"string","description":"Tag to apply"}},"required":["account_id","email","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.upsert","description":"Create or update a Drip subscriber.","parameters":{"type":"object","properties":{"account_id":{"type":"string","description":"Drip account ID"},"email":{"type":"string","description":"Subscriber email address"},"first_name":{"type":"string","description":"Subscriber first name"},"last_name":{"type":"string","description":"Subscriber last name"},"phone":{"type":"string","description":"Subscriber phone number"},"address":{"type":"string","description":"Subscriber address"},"city":{"type":"string","description":"Subscriber city"},"state":{"type":"string","description":"Subscriber state"},"zip":{"type":"string","description":"Subscriber zip code"},"country":{"type":"string","description":"Subscriber country"}},"required":["account_id","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"subscribers.delete","description":"Delete a Drip subscriber by id or email.","parameters":{"type":"object","properties":{"account_id":{"type":"string","description":"Drip account ID"},"id_or_email":{"type":"string","description":"Subscriber id or URL-encoded email to delete."}},"required":["account_id","id_or_email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.record","description":"Record a custom event for a Drip subscriber.","parameters":{"type":"object","properties":{"account_id":{"type":"string","description":"Drip account ID"},"email":{"type":"string","description":"Subscriber email the event belongs to."},"action":{"type":"string","description":"Event action name, e.g. \"Purchased a product\"."},"properties":{"type":"object","description":"Free-form key/value properties to attach to the event."},"occurred_at":{"type":"string","description":"ISO-8601 timestamp the event occurred at."}},"required":["account_id","email","action"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"dropbox","displayName":"Dropbox","description":"Read, organize, search, and share files in a Dropbox account. Standard OAuth2 with refresh tokens against the Dropbox v2 RPC API at api.dropboxapi.com.","auth":{"kind":"oauth2","authorizationUrl":"https://www.dropbox.com/oauth2/authorize","tokenUrl":"https://api.dropboxapi.com/oauth2/token","scopes":["account_info.read","files.metadata.read","files.metadata.write","sharing.read","sharing.write"],"clientIdEnv":"DROPBOX_OAUTH_CLIENT_ID","clientSecretEnv":"DROPBOX_OAUTH_CLIENT_SECRET","extraAuthParams":{"token_access_type":"offline"}},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.get_current_account","description":"Read the currently authenticated Dropbox account (used for connection self-test). Returns account_id, email, name, country, and team membership when applicable.","parameters":{"type":"object","properties":{}},"requiredScopes":["account_info.read"],"class":"read"},{"name":"users.get_space_usage","description":"Read the account-level storage quota and current usage (in bytes). Useful for surfacing capacity warnings before upload mutations.","parameters":{"type":"object","properties":{}},"requiredScopes":["account_info.read"],"class":"read"},{"name":"files.list_folder","description":"List the children of a folder. Use path \"\" (empty string) for the account root; otherwise pass a path beginning with \"/\", e.g. \"/Reports/2026\". Returns a `cursor` for incremental pagination via files.list_folder_continue.","parameters":{"type":"object","properties":{"path":{"type":"string","description":"Path to the folder. Use \"\" (empty string) for the root, otherwise leading slash, e.g. \"/Reports\"."},"recursive":{"type":"boolean","default":false,"description":"Recurse into subfolders. Defaults to false (one level only)."},"include_media_info":{"type":"boolean","default":false},"include_deleted":{"type":"boolean","default":false},"include_has_explicit_shared_members":{"type":"boolean","default":false},"include_mounted_folders":{"type":"boolean","default":true},"limit":{"type":"integer","minimum":1,"maximum":2000,"description":"Page size; Dropbox caps at 2000."}},"required":["path"]},"requiredScopes":["files.metadata.read"],"class":"read"},{"name":"files.list_folder_continue","description":"Continue a previous files.list_folder enumeration by feeding back the `cursor` returned in the prior page. Pages until `has_more` is false.","parameters":{"type":"object","properties":{"cursor":{"type":"string","description":"Cursor returned from list_folder or a prior list_folder_continue."}},"required":["cursor"]},"requiredScopes":["files.metadata.read"],"class":"read"},{"name":"files.get_metadata","description":"Read metadata for a single file, folder, or deleted entry. Returns the `.tag` discriminator (\"file\" | \"folder\" | \"deleted\") on the entry.","parameters":{"type":"object","properties":{"path":{"type":"string","description":"Path or id of the entry. Paths begin with \"/\"; ids look like \"id:abc123\"."},"include_media_info":{"type":"boolean","default":false},"include_deleted":{"type":"boolean","default":false},"include_has_explicit_shared_members":{"type":"boolean","default":false}},"required":["path"]},"requiredScopes":["files.metadata.read"],"class":"read"},{"name":"files.search","description":"Indexed search across the account. `query` is the free-text search string; `options` narrows by path scope, file type, and ordering. Use the returned `cursor` with files.search_continue (not exposed here) for paging.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search string."},"options":{"type":"object","description":"Optional SearchOptions; e.g. { \"path\": \"/Reports\", \"max_results\": 50, \"file_status\": \"active\", \"filename_only\": false }.","properties":{"path":{"type":"string"},"max_results":{"type":"integer","minimum":1,"maximum":1000},"order_by":{"type":"string","enum":["relevance","last_modified_time"]},"file_status":{"type":"string","enum":["active","deleted"]},"filename_only":{"type":"boolean"},"file_extensions":{"type":"array","items":{"type":"string"}},"file_categories":{"type":"array","items":{"type":"string","enum":["image","document","pdf","spreadsheet","presentation","audio","video","folder","paper","others"]}}}},"match_field_options":{"type":"object","properties":{"include_highlights":{"type":"boolean"}}}},"required":["query"]},"requiredScopes":["files.metadata.read"],"class":"read"},{"name":"files.create_folder_v2","description":"Create a folder at the given path. Set `autorename` to true to let Dropbox suffix a counter on collision; otherwise Dropbox returns a `path/conflict/folder` error which the declarative layer surfaces as { status: \"conflict\" }.","parameters":{"type":"object","properties":{"path":{"type":"string","description":"Destination path, e.g. \"/Reports/2026\". Must begin with \"/\"."},"autorename":{"type":"boolean","default":false}},"required":["path"]},"requiredScopes":["files.metadata.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.move_v2","description":"Move or rename a file or folder. Set `allow_shared_folder` and `allow_ownership_transfer` for cross-shared-folder moves. Dropbox returns `to/conflict/...` on a destination collision.","parameters":{"type":"object","properties":{"from_path":{"type":"string","description":"Current path or id."},"to_path":{"type":"string","description":"New path. Must begin with \"/\"."},"allow_shared_folder":{"type":"boolean","default":false},"autorename":{"type":"boolean","default":false},"allow_ownership_transfer":{"type":"boolean","default":false}},"required":["from_path","to_path"]},"requiredScopes":["files.metadata.write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"files.copy_v2","description":"Server-side copy a file or folder to a destination path. Dropbox dedupes on (to_path) and returns `to/conflict/...` on collision.","parameters":{"type":"object","properties":{"from_path":{"type":"string"},"to_path":{"type":"string"},"allow_shared_folder":{"type":"boolean","default":false},"autorename":{"type":"boolean","default":false},"allow_ownership_transfer":{"type":"boolean","default":false}},"required":["from_path","to_path"]},"requiredScopes":["files.metadata.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.delete_v2","description":"Move a file or folder to the deleted state. Dropbox retains deleted items for 30 days on standard plans; pass `parent_rev` to make the delete conditional on a specific revision.","parameters":{"type":"object","properties":{"path":{"type":"string"},"parent_rev":{"type":"string","description":"Optional rev (from get_metadata) to make the delete conditional."}},"required":["path"]},"requiredScopes":["files.metadata.write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"sharing.create_shared_link_with_settings","description":"Mint a public shared link with optional access controls (audience, requested_visibility, expires, password). Dropbox dedupes per (path, settings); a duplicate request 409s with `shared_link_already_exists` carrying the existing link, which the declarative layer surfaces as { status: \"conflict\" }.","parameters":{"type":"object","properties":{"path":{"type":"string","description":"Path to share, e.g. \"/Reports/Q1.pdf\"."},"settings":{"type":"object","description":"SharedLinkSettings; all fields optional.","properties":{"requested_visibility":{"type":"string","enum":["public","team_only","password"]},"link_password":{"type":"string"},"expires":{"type":"string","description":"ISO8601 expiry timestamp."},"audience":{"type":"string","enum":["public","team","no_one","password","members"]},"access":{"type":"string","enum":["viewer","editor","max"]},"allow_download":{"type":"boolean"}}}},"required":["path"]},"requiredScopes":["sharing.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sharing.list_shared_links","description":"List existing shared links. Filter by `path` to scope to one entry, or pass `cursor` to page through prior results. Set `direct_only` to true to exclude inherited links from parent folders.","parameters":{"type":"object","properties":{"path":{"type":"string","description":"Optional path to filter to one entry."},"cursor":{"type":"string","description":"Pagination cursor from a prior call."},"direct_only":{"type":"boolean","default":false}}},"requiredScopes":["sharing.read"],"class":"read"}]},{"kind":"dub","displayName":"Dub","description":"Create, manage, and analyse short links on Dub — the modern link attribution platform for tracking conversions and running affiliate programmes.","auth":{"kind":"api-key","hint":"Dub workspace API key (Bearer token)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"links.create","description":"Create a short link.","parameters":{"type":"object","properties":{"url":{"type":"string"},"domain":{"type":"string"},"key":{"type":"string"},"externalId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"image":{"type":"string"},"video":{"type":"string"},"tagNames":{"type":"array","items":{"type":"string"}},"folderId":{"type":"string"},"expiresAt":{"type":"string"},"expiredUrl":{"type":"string"},"password":{"type":"string"},"trackConversion":{"type":"boolean"},"proxy":{"type":"boolean"},"rewrite":{"type":"boolean"},"doIndex":{"type":"boolean"},"archived":{"type":"boolean"},"ios":{"type":"string"},"android":{"type":"string"},"comments":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"links.get","description":"Retrieve a short link by link ID, external ID, or domain+key slug.","parameters":{"type":"object","properties":{"linkId":{"type":"string"},"externalId":{"type":"string"},"domain":{"type":"string"},"key":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"links.list","description":"List or search short links in the workspace.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"tagNames":{"type":"array","items":{"type":"string"}},"search":{"type":"string"},"userId":{"type":"string"},"showArchived":{"type":"boolean"},"page":{"type":"integer"},"pageSize":{"type":"integer"},"sort":{"type":"string","enum":["createdAt","clicks","lastClicked"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"links.update","description":"Update an existing short link.","parameters":{"type":"object","properties":{"linkId":{"type":"string"},"url":{"type":"string"},"domain":{"type":"string"},"key":{"type":"string"},"externalId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"image":{"type":"string"},"video":{"type":"string"},"tagNames":{"type":"array","items":{"type":"string"}},"folderId":{"type":"string"},"expiresAt":{"type":"string"},"expiredUrl":{"type":"string"},"password":{"type":"string"},"trackConversion":{"type":"boolean"},"proxy":{"type":"boolean"},"rewrite":{"type":"boolean"},"doIndex":{"type":"boolean"},"archived":{"type":"boolean"},"ios":{"type":"string"},"android":{"type":"string"},"comments":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"links.delete","description":"Delete a short link.","parameters":{"type":"object","properties":{"linkId":{"type":"string"}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tags.create","description":"Create a tag in the Dub workspace.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Tag name."},"color":{"type":"string","enum":["red","yellow","green","blue","purple","pink","brown"],"description":"Tag colour (Dub palette)."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"duckdb","displayName":"DuckDB","description":"Load bounded JSON tables into a throwaway in-memory DuckDB database and run a parameterized query.","auth":{"kind":"none"},"defaultConsistencyModel":"advisory","category":"database","capabilities":[{"name":"create.and.query.db","class":"read","description":"Create in-memory tables from JSON arrays and return a bounded parameterized SQL query result.","parameters":{"type":"object","properties":{"tables":{"type":"array","minItems":1,"maxItems":16,"items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Za-z_][A-Za-z0-9_]{0,62}$","maxLength":63},"data":{"type":"array","maxItems":10000,"items":{"type":"object"}},"schema":{"type":"object","maxProperties":256}},"required":["name","data"],"additionalProperties":false}},"query":{"type":"string","minLength":1,"maxLength":20000,"description":"A single relation-returning SQL query. Use $1, $2, and args for dynamic values."},"args":{"type":"array","maxItems":100,"items":{"type":["string","number","boolean","null"]}},"maxRows":{"type":"integer","minimum":1,"maximum":10000,"default":1000}},"required":["tables","query"],"additionalProperties":false}}]},{"kind":"dumpling-ai","displayName":"Dumpling AI","description":"Transform unstructured website content into clean, AI-ready data via Dumpling AI.","auth":{"kind":"api-key","hint":"Dumpling AI API key. Create one in app.dumplingai.com under Settings → API Keys."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"web.crawl","description":"Crawl a website starting from the given URL, returning cleaned content for each page visited.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Base URL to crawl."},"limit":{"type":"integer","description":"Maximum number of pages to crawl."},"depth":{"type":"integer","description":"Distance from the base URL to follow links."},"format":{"type":"string","enum":["markdown","html","text"],"description":"Output content format."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"web.scrape","description":"Scrape a single web page and return its cleaned content.","parameters":{"type":"object","properties":{"url":{"type":"string"},"format":{"type":"string","enum":["markdown","html","text"]},"cleaned":{"type":"boolean","description":"Whether the output should be cleaned of boilerplate."},"renderJs":{"type":"boolean","description":"Render JavaScript before extracting content."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"document.extract","description":"Extract structured data from a document file (URL or base64) given a natural-language prompt.","parameters":{"type":"object","properties":{"file":{"type":"string","description":"File URL or base64-encoded file contents."},"prompt":{"type":"string","description":"Prompt describing what to extract from the document."},"jsonMode":{"type":"boolean","description":"Whether to return the result as JSON."}},"required":["file","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"image.generate","description":"Generate one or more images from a prompt using the specified model.","parameters":{"type":"object","properties":{"prompt":{"type":"string"},"model":{"type":"string","description":"The image-generation model identifier."},"aspect_ratio":{"type":"string","description":"Aspect ratio for the generated image."},"num_outputs":{"type":"integer","description":"Number of images to generate (1–4)."},"seed":{"type":"integer","description":"Seed for reproducible generation."},"output_format":{"type":"string","enum":["png","jpg","webp"]}},"required":["prompt","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"search.news","description":"Search Google News and optionally scrape the top results.","parameters":{"type":"object","properties":{"query":{"type":"string"},"country":{"type":"string","description":"Country code for location bias (e.g. US)."},"location":{"type":"string","description":"Specific location to focus the search."},"language":{"type":"string","description":"Language code for the results (e.g. en)."},"dateRange":{"type":"string","enum":["anyTime","pastHour","pastDay","pastWeek","pastMonth","pastYear"],"description":"Filter results by recency."},"page":{"type":"integer"},"scrapeResults":{"type":"boolean"},"numResultsToScrape":{"type":"integer","description":"Number of top results to scrape (max 10)."},"scrapeFormat":{"type":"string","enum":["markdown","html","text"]},"cleanedOutput":{"type":"boolean"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false}]},{"kind":"dust","displayName":"Dust","description":"Run Dust assistant conversations, attach fragments and files, and manage data-source documents in a Dust workspace.","auth":{"kind":"api-key","hint":"Dust API key (sk-…); the workspace id is supplied per-request via the workspaceId input."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"conversations.create","description":"Create a new Dust assistant conversation, optionally seeding it with a first user message and a title.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"title":{"type":"string"},"visibility":{"type":"string"},"message":{"type":"object","description":"Optional first message — Dust expects { content, mentions, context } where context describes the user identity."},"contentFragment":{"type":"object","description":"Optional content fragment seeded into the conversation (text + content type + name)."}},"required":["workspaceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.reply","description":"Append a user message to an existing Dust conversation, triggering the assistant to reply.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"conversationId":{"type":"string"},"content":{"type":"string"},"mentions":{"type":"array","description":"Assistant mentions — each entry like { configurationId } selects which Dust assistant should answer.","items":{"type":"object","properties":{"configurationId":{"type":"string"}},"required":["configurationId"]}},"context":{"type":"object","description":"Caller identity / locale context Dust attaches to the message (username, timezone, profilePictureUrl, etc)."}},"required":["workspaceId","conversationId","content","mentions"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.get","description":"Fetch a Dust conversation, including its message tree and any attached fragments.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"conversationId":{"type":"string"}},"required":["workspaceId","conversationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversations.addFragment","description":"Attach a content fragment (inline text or a previously uploaded file) to an existing Dust conversation. fileId, when supplied, takes precedence over the inline fragment payload.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"conversationId":{"type":"string"},"title":{"type":"string"},"fragmentName":{"type":"string"},"fileId":{"type":"string","description":"ID of a file previously created with files.upload — supplying it skips the inline content path."},"contentType":{"type":"string"},"content":{"type":"string"},"url":{"type":"string"}},"required":["workspaceId","conversationId","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.upload","description":"Register a file with Dust so it can be referenced from a content fragment by fileId. The caller supplies the descriptor (name, contentType, size, useCase); the returned id is passed to conversations.addFragment.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"fileName":{"type":"string"},"contentType":{"type":"string"},"fileSize":{"type":"integer"},"useCase":{"type":"string","description":"Why the file is being uploaded — typical values include \"conversation\" or \"tool_output\"."}},"required":["workspaceId","fileName","contentType","fileSize","useCase"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.upsert","description":"Insert or replace a document in a Dust data source. documentId is caller-supplied so repeated calls with the same id replace prior content (idempotent by document key).","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"datasource":{"type":"string","description":"Data-source name (slug) within the workspace."},"documentId":{"type":"string"},"content":{"type":"string"},"sourceUrl":{"type":"string"},"tags":{"type":"array","items":{"type":"string"},"description":"Tag strings indexed alongside the document for retrieval filtering."}},"required":["workspaceId","datasource","documentId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"easy-peasy-ai","displayName":"Easy-Peasy.AI","description":"Generate text from tenant-defined custom generators, produce AI images across multiple model backends, and transcribe audio via Easy-Peasy.AI.","auth":{"kind":"api-key","hint":"Easy-Peasy.AI API key from Account → API. Sent as a Bearer token in the Authorization header."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"generator.text.run","description":"Run a custom Easy-Peasy.AI text generator. The generator and its prompt template are configured in the Easy-Peasy.AI UI; this call supplies the keyword payload, optional background context, and model/language switches at invocation time.","parameters":{"type":"object","properties":{"keywords":{"type":"string","description":"Primary input prompt for the generator. Max 1000 characters."},"extra1":{"type":"string","description":"Optional background context that augments the prompt. Max 1000 characters."},"outputs":{"type":"integer","description":"Number of candidate generations to return. Defaults to 1 server-side."},"language":{"type":"string","description":"Target language for the generated text (e.g. English, Spanish, German). Defaults to English."},"shouldUseGPT4":{"type":"boolean","description":"When true, route the generation through the GPT-4 model variant. Higher cost; the default model is the lower-tier backend."}},"required":["keywords"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"image.generate","description":"Generate an AI image from a text prompt. Selects between Easy-Peasy.AI image-model backends and accepts style, artist, dimension, HD, and reference-image controls.","parameters":{"type":"object","properties":{"prompt":{"type":"string","description":"Text description of the image to render."},"model":{"type":"string","description":"Image model identifier (e.g. stable-diffusion, dall-e, flux). Maps to an Easy-Peasy.AI model slug."},"style":{"type":"string","description":"Art style or aesthetic descriptor blended into the prompt (e.g. cinematic, watercolor, neon)."},"artist":{"type":"string","description":"Optional artist whose style the image should imitate."},"dimensions":{"type":"string","description":"Aspect ratio / output dimensions (e.g. 1024x1024, 1792x1024)."},"useHD":{"type":"boolean","description":"When true, render in HD quality. Higher cost than the standard quality default."},"image":{"type":"string","description":"Optional URL to a reference image used to anchor style or composition."}},"required":["prompt","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"transcription.create","description":"Submit a hosted audio URL for asynchronous transcription. Returns a transcription job handle; the result is fetched with transcription.get once processing is complete.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Publicly fetchable URL of the audio file to transcribe."},"name":{"type":"string","description":"Human-readable title used to label this transcription in the Easy-Peasy.AI dashboard."},"audio_type":{"type":"string","description":"Type of audio content (e.g. meeting, podcast, lecture, interview). Drives downstream transcript formatting."},"detect_speakers":{"type":"boolean","description":"When true, run speaker diarization and label each segment with the detected speaker."},"enhanced_quality":{"type":"boolean","description":"When true, use the higher-quality transcription model. Slower and more expensive than the default."}},"required":["url","name","audio_type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"transcription.get","description":"Read the current state of an Easy-Peasy.AI transcription job by ID, including status (queued/processing/completed/failed) and, once finished, the transcript payload.","parameters":{"type":"object","properties":{"transcriptionId":{"type":"string","description":"Transcription job identifier returned by transcription.create."}},"required":["transcriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"ebay","displayName":"eBay","description":"Manage eBay seller inventory items and fulfillment orders, and read the connected user identity.","auth":{"kind":"oauth2","authorizationUrl":"https://auth.ebay.com/oauth2/authorize","tokenUrl":"https://api.ebay.com/identity/v1/oauth2/token","scopes":["https://api.ebay.com/oauth/api_scope","https://api.ebay.com/oauth/api_scope/sell.inventory","https://api.ebay.com/oauth/api_scope/sell.fulfillment","https://api.ebay.com/oauth/api_scope/sell.account","https://api.ebay.com/oauth/api_scope/sell.marketing","https://api.ebay.com/oauth/api_scope/commerce.identity.readonly"],"clientIdEnv":"EBAY_OAUTH_CLIENT_ID","clientSecretEnv":"EBAY_OAUTH_CLIENT_SECRET","tokenClientAuthMethod":"client_secret_basic"},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"inventory_items.search","description":"List inventory items for the connected seller with pagination.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Page size (eBay default 25, max 200)."},"offset":{"type":"integer","minimum":0,"description":"Zero-based offset of the first item to return."}}},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.inventory"],"class":"read"},{"name":"inventory_items.get","description":"Read a single inventory item by SKU.","parameters":{"type":"object","properties":{"sku":{"type":"string","description":"Seller-defined inventory SKU."}},"required":["sku"]},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.inventory"],"class":"read"},{"name":"inventory_items.upsert","description":"Create or fully replace an inventory item identified by SKU (eBay PUT semantics are upsert).","parameters":{"type":"object","properties":{"sku":{"type":"string","description":"Seller-defined inventory SKU."},"marketplaceId":{"type":"string","description":"Marketplace id, e.g. EBAY_US. Defaults to Content-Language en-US."},"item":{"type":"object","description":"Inventory item payload (product, condition, availability, packageWeightAndSize)."}},"required":["sku","item"]},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.inventory"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"inventory_items.delete","description":"Delete an inventory item and all of its offers by SKU.","parameters":{"type":"object","properties":{"sku":{"type":"string"}},"required":["sku"]},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.inventory"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"offers.search","description":"List offers (listings) attached to a given inventory SKU with pagination.","parameters":{"type":"object","properties":{"sku":{"type":"string","description":"Inventory SKU whose offers to list."},"marketplace_id":{"type":"string","description":"Marketplace filter, e.g. EBAY_US."},"format":{"type":"string","enum":["FIXED_PRICE","AUCTION"]},"limit":{"type":"integer","minimum":1,"maximum":200},"offset":{"type":"integer","minimum":0}},"required":["sku"]},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.inventory"],"class":"read"},{"name":"offers.publish","description":"Publish an offer, converting it into an active eBay listing.","parameters":{"type":"object","properties":{"offerId":{"type":"string","description":"Unique identifier of the offer to publish."}},"required":["offerId"]},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.inventory"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.search","description":"List fulfillment orders for the connected seller with optional filters and pagination.","parameters":{"type":"object","properties":{"filter":{"type":"string","description":"eBay fulfillment filter expression, e.g. \"creationdate:[2026-01-01T00:00:00.000Z..]\" or \"orderfulfillmentstatus:{NOT_STARTED|IN_PROGRESS}\"."},"orderIds":{"type":"string","description":"Comma-separated list of order ids to fetch."},"fieldGroups":{"type":"string","description":"Optional response projection, e.g. TAX_BREAKDOWN."},"marketplaceId":{"type":"string","description":"Marketplace id header override, e.g. EBAY_US."},"limit":{"type":"integer","minimum":1,"maximum":1000},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.fulfillment"],"class":"read"},{"name":"orders.get","description":"Read a single fulfillment order by id.","parameters":{"type":"object","properties":{"orderId":{"type":"string"},"fieldGroups":{"type":"string","description":"Optional response projection, e.g. TAX_BREAKDOWN."},"marketplaceId":{"type":"string","description":"Marketplace id header override, e.g. EBAY_US."}},"required":["orderId"]},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.fulfillment"],"class":"read"},{"name":"orders.ship","description":"Create a shipping fulfillment for an order — records carrier, tracking, and the line items shipped.","parameters":{"type":"object","properties":{"orderId":{"type":"string"},"marketplaceId":{"type":"string","description":"Marketplace id header override, e.g. EBAY_US."},"fulfillment":{"type":"object","description":"Shipping fulfillment payload (lineItems, shippedDate, shippingCarrierCode, trackingNumber)."}},"required":["orderId","fulfillment"]},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.fulfillment"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"identity.get","description":"Read the connected eBay user identity (account type, registration marketplace, business / individual flags).","parameters":{"type":"object","properties":{}},"requiredScopes":["https://api.ebay.com/oauth/api_scope/commerce.identity.readonly"],"class":"read"},{"name":"inventory.update","description":"Bulk-update price and/or available quantity for one or more inventory items / offers.","parameters":{"type":"object","properties":{"marketplaceId":{"type":"string","description":"Marketplace id header override, e.g. EBAY_US."},"requests":{"type":"array","description":"eBay PriceQuantity request array. Each entry targets a SKU and/or offerId with new ship-to-locationAvailability / price values.","items":{"type":"object"}}},"required":["requests"]},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.inventory"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.cancel","description":"Request order cancellation via the Post-Order Cancellation API. Sellers can request cancellation on unshipped orders.","parameters":{"type":"object","properties":{"legacyOrderId":{"type":"string","description":"eBay legacy (string) order id the cancellation request applies to."},"cancelReason":{"type":"string","description":"Reason for the cancellation, e.g. OUT_OF_STOCK_OR_CANNOT_FULFILL, BUYER_ASKED_CANCEL, ADDRESS_ISSUES."},"marketplaceId":{"type":"string","description":"Marketplace id header override, e.g. EBAY_US."}},"required":["legacyOrderId","cancelReason"]},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.fulfillment"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"listing.end","description":"End an active listing by withdrawing its offer.","parameters":{"type":"object","properties":{"offerId":{"type":"string","description":"Unique identifier of the offer (active listing) to withdraw."}},"required":["offerId"]},"requiredScopes":["https://api.ebay.com/oauth/api_scope/sell.inventory"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"echowin","displayName":"Echowin","description":"Manage contacts and workflows in Echowin.","auth":{"kind":"api-key","hint":"Echowin API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.create","description":"Create a new contact in Echowin.","parameters":{"type":"object","properties":{"firstName":{"type":"string","description":"First name of the contact."},"lastName":{"type":"string","description":"Last name of the contact."},"email":{"type":"string","description":"Email address of the contact."},"number":{"type":"string","description":"Phone number (will be automatically cleaned)."},"carrier":{"type":"string","description":"Phone carrier name."}},"required":["number"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.find","description":"Find a contact by name, email, or phone number.","parameters":{"type":"object","properties":{"search":{"type":"string","description":"Search by name, email, or phone number."}},"required":["search"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.delete","description":"Delete a contact from Echowin.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"The unique identifier of the contact to delete."}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"eden-ai","displayName":"Eden AI","description":"Call Eden AI aggregated endpoints (text generation, language detection, OCR, translation, TTS, image generation, document parsing) across a configurable provider list.","auth":{"kind":"api-key","hint":"Eden AI workspace API key. Mint one at https://app.edenai.run/admin/api-settings/features-preferences and send as a Bearer token."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"generate.text","description":"Generate text from a prompt by routing to one or more LLM providers. `providers` is a comma-separated list; later entries are fallbacks.","parameters":{"type":"object","properties":{"providers":{"type":"string","description":"Primary provider key, optionally followed by fallback keys (e.g. \"openai,cohere\")."},"text":{"type":"string","description":"The prompt or instruction to generate from."},"temperature":{"type":"number","minimum":0,"maximum":2},"max_tokens":{"type":"integer","minimum":1},"model":{"type":"string","description":"Provider-specific model id (e.g. \"openai/gpt-4o\")."},"fallback_providers":{"type":"string","description":"Comma-separated fallback providers (alternative to listing them in providers)."},"show_original_response":{"type":"boolean"},"settings":{"type":"object","description":"Per-provider settings overrides keyed by provider name."}},"required":["providers","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"summarize.text","description":"Summarize a passage of text. Output length is controlled by `output_sentences`.","parameters":{"type":"object","properties":{"providers":{"type":"string"},"text":{"type":"string"},"language":{"type":"string","description":"ISO 639-1 language code (e.g. \"en\")."},"output_sentences":{"type":"integer","minimum":1,"maximum":20},"model":{"type":"string"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"extract.keywords","description":"Extract weighted keywords from text.","parameters":{"type":"object","properties":{"providers":{"type":"string"},"text":{"type":"string"},"language":{"type":"string"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"detect.language","description":"Detect the language of an input text. Returns ISO 639-1 codes plus confidence per provider.","parameters":{"type":"object","properties":{"providers":{"type":"string"},"text":{"type":"string"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"extract.entities","description":"Run named-entity recognition on a passage of text.","parameters":{"type":"object","properties":{"providers":{"type":"string"},"text":{"type":"string"},"language":{"type":"string"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"moderate.text","description":"Run content-moderation scoring (toxicity, hate, sexual, etc.) on input text.","parameters":{"type":"object","properties":{"providers":{"type":"string"},"text":{"type":"string"},"language":{"type":"string"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"spell.check","description":"Run a spelling/grammar correction pass on input text.","parameters":{"type":"object","properties":{"providers":{"type":"string"},"text":{"type":"string"},"language":{"type":"string"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","text","language"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"translate.text","description":"Translate text between languages. `source_language` may be omitted to auto-detect.","parameters":{"type":"object","properties":{"providers":{"type":"string"},"text":{"type":"string"},"source_language":{"type":"string","description":"ISO 639-1 code or \"auto\" to detect."},"target_language":{"type":"string"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","text","target_language"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"invoice.parser","description":"Parse a financial invoice document. Accepts a public `file_url` (the declarative engine JSON-encodes bodies, so binary uploads use a bespoke path).","parameters":{"type":"object","properties":{"providers":{"type":"string"},"file_url":{"type":"string","description":"Public URL to the invoice file (PDF or image)."},"language":{"type":"string"},"file_password":{"type":"string"},"convert_to_pdf":{"type":"boolean"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","file_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"receipt.parser","description":"Parse a receipt document via URL. Same constraints as invoice.parser.","parameters":{"type":"object","properties":{"providers":{"type":"string"},"file_url":{"type":"string"},"language":{"type":"string"},"file_password":{"type":"string"},"convert_to_pdf":{"type":"boolean"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","file_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"ocr.image","description":"Run OCR (text extraction) on an image or scanned document referenced by URL.","parameters":{"type":"object","properties":{"providers":{"type":"string"},"file_url":{"type":"string"},"language":{"type":"string"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","file_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"image.generation","description":"Generate one or more images from a text prompt at a fixed resolution.","parameters":{"type":"object","properties":{"providers":{"type":"string"},"text":{"type":"string","description":"The image-generation prompt."},"resolution":{"type":"string","description":"Image resolution, e.g. \"512x512\" or \"1024x1024\"."},"num_images":{"type":"integer","minimum":1,"maximum":10},"model":{"type":"string"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","text","resolution"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"text.to.speech","description":"Synthesize speech audio from text. `option` selects voice gender (\"MALE\" | \"FEMALE\").","parameters":{"type":"object","properties":{"providers":{"type":"string"},"text":{"type":"string"},"language":{"type":"string"},"option":{"type":"string","description":"Voice gender: \"MALE\" or \"FEMALE\"."},"rate":{"type":"integer","minimum":-100,"maximum":100},"pitch":{"type":"integer","minimum":-100,"maximum":100},"volume":{"type":"integer","minimum":-100,"maximum":100},"audio_format":{"type":"string","description":"Container format (e.g. \"mp3\", \"wav\")."},"sampling_rate":{"type":"integer","minimum":0,"maximum":200000},"model":{"type":"string"},"fallback_providers":{"type":"string"},"show_original_response":{"type":"boolean"}},"required":["providers","text","language"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"elastic-email","displayName":"Elastic Email","description":"Send transactional email, manage contacts, segments, and campaigns through the Elastic Email v4 REST API.","auth":{"kind":"api-key","hint":"Elastic Email API key (Settings → API → Create Additional API Key) with Contacts, Campaigns, and Email scopes."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.list","description":"List contacts in the account.","parameters":{"type":"object","properties":{"search":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":1000},"offset":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.add","description":"Bulk add contacts (upsert by email).","parameters":{"type":"object","properties":{"contacts":{"type":"array","items":{"type":"object","properties":{"Email":{"type":"string"},"Status":{"type":"string"},"FirstName":{"type":"string"},"LastName":{"type":"string"},"CustomFields":{"type":"object"},"ConsentIP":{"type":"string"},"ConsentDate":{"type":"string"},"ConsentTracking":{"type":"string"}},"required":["Email"]}}},"required":["contacts"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.create","description":"Create a single contact.","parameters":{"type":"object","properties":{"email":{"type":"string"},"status":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"customFields":{"type":"object"},"consentIP":{"type":"string"},"consentDate":{"type":"string"},"consentTracking":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update an existing contact by email address.","parameters":{"type":"object","properties":{"email":{"type":"string"},"status":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"customFields":{"type":"object"},"consentIP":{"type":"string"},"consentDate":{"type":"string"},"consentTracking":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.unsubscribe","description":"Unsubscribe one or more contacts from the account.","parameters":{"type":"object","properties":{"emails":{"type":"array","items":{"type":"string"}}},"required":["emails"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"segments.create","description":"Create a new contact segment from a rule expression.","parameters":{"type":"object","properties":{"name":{"type":"string"},"rule":{"type":"string"}},"required":["name","rule"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.list","description":"List campaigns filtered by name or with pagination.","parameters":{"type":"object","properties":{"search":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.create","description":"Create a new email campaign.","parameters":{"type":"object","properties":{"name":{"type":"string"},"recipients":{"type":"object"},"content":{"type":"object","properties":{"From":{"type":"string"},"ReplyTo":{"type":"string"},"Subject":{"type":"string"},"PoolName":{"type":"string"},"ChannelName":{"type":"string"},"Encoding":{"type":"string"},"EnableTracking":{"type":"boolean"},"TemplateName":{"type":"string"},"AttachFiles":{"type":"array","items":{"type":"string"}},"Merge":{"type":"object"},"Body":{"type":"array","items":{"type":"object","properties":{"ContentType":{"type":"string"},"Content":{"type":"string"},"Charset":{"type":"string"}},"required":["ContentType","Content"]}}},"required":["From"]},"status":{"type":"string"},"options":{"type":"object"}},"required":["name","recipients","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.update","description":"Update an existing campaign by name.","parameters":{"type":"object","properties":{"name":{"type":"string"},"recipients":{"type":"object"},"content":{"type":"object","properties":{"From":{"type":"string"},"ReplyTo":{"type":"string"},"Subject":{"type":"string"},"PoolName":{"type":"string"},"ChannelName":{"type":"string"},"Encoding":{"type":"string"},"EnableTracking":{"type":"boolean"},"TemplateName":{"type":"string"},"AttachFiles":{"type":"array","items":{"type":"string"}},"Merge":{"type":"object"},"Body":{"type":"array","items":{"type":"object","properties":{"ContentType":{"type":"string"},"Content":{"type":"string"},"Charset":{"type":"string"}},"required":["ContentType","Content"]}}},"required":["From"]},"status":{"type":"string"},"options":{"type":"object"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"email.send","description":"Send a transactional email through /v4/emails/transactional.","parameters":{"type":"object","properties":{"recipients":{"type":"object"},"content":{"type":"object","properties":{"From":{"type":"string"},"ReplyTo":{"type":"string"},"Subject":{"type":"string"},"PoolName":{"type":"string"},"ChannelName":{"type":"string"},"Encoding":{"type":"string"},"EnableTracking":{"type":"boolean"},"TemplateName":{"type":"string"},"AttachFiles":{"type":"array","items":{"type":"string"}},"Merge":{"type":"object"},"Body":{"type":"array","items":{"type":"object","properties":{"ContentType":{"type":"string"},"Content":{"type":"string"},"Charset":{"type":"string"}},"required":["ContentType","Content"]}}},"required":["From"]},"options":{"type":"object","properties":{"TimeOffset":{"type":"integer"},"PoolName":{"type":"string"},"ChannelName":{"type":"string"},"Encoding":{"type":"string"},"TrackOpens":{"type":"boolean"},"TrackClicks":{"type":"boolean"}}},"merge":{"type":"object"}},"required":["recipients","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"elevenlabs","displayName":"ElevenLabs","description":"Convert text to speech using ElevenLabs AI voice synthesis.","auth":{"kind":"api-key","hint":"ElevenLabs API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"speech.synthesis","description":"Convert text to speech and return audio.","parameters":{"type":"object","properties":{"voiceId":{"type":"string","description":"The voice ID to use for synthesis"},"text":{"type":"string","description":"The text to convert to speech"},"modelId":{"type":"string","description":"Optional model ID (defaults to eleven_monolingual_v1)"}},"required":["voiceId","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"emailit","displayName":"Emailit","description":"Send transactional emails through the Emailit API.","auth":{"kind":"api-key","hint":"Emailit API key. Sent as a Bearer token on every request."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"send.email","description":"Send a transactional email through Emailit. Supports plain text or HTML body, CC/BCC fan-out, reply-to override, and custom headers.","parameters":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"},"description":"Recipient email addresses. Combined cap of 50 across to/cc/bcc."},"from_email":{"type":"string","description":"Verified sender email address."},"from_name":{"type":"string","description":"Optional display name shown to recipients."},"cc":{"type":"array","items":{"type":"string"},"description":"Visible carbon-copy recipients."},"bcc":{"type":"array","items":{"type":"string"},"description":"Hidden carbon-copy recipients."},"reply_to":{"type":"string","description":"Reply-to address. Defaults to from_email when omitted."},"subject":{"type":"string","description":"Subject line shown in the recipient inbox."},"content":{"type":"string","description":"Email body. Either plain text or HTML."},"content_type":{"type":"string","enum":["text","html"],"description":"Body encoding hint. Defaults to text."},"headers":{"type":"object","description":"Custom email headers as key/value pairs, e.g. X-Campaign-ID."}},"required":["to","from_email","subject","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"logs.list","description":"List Emailit delivery logs. Filter by RFC3339 `from`/`to` window and delivery `status` (delivered|bounced|opened|clicked). `limit` caps the page size.","parameters":{"type":"object","properties":{"from":{"type":"string","description":"RFC3339 lower bound for the log window (inclusive)."},"to":{"type":"string","description":"RFC3339 upper bound for the log window (inclusive)."},"status":{"type":"string","enum":["delivered","bounced","opened","clicked"],"description":"Filter logs to a single delivery status."},"limit":{"type":"integer","minimum":1,"description":"Maximum number of log entries to return."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"emailoctopus","displayName":"EmailOctopus","description":"Email marketing: manage EmailOctopus lists and contacts (add/update, tag, unsubscribe, find).","auth":{"kind":"api-key","hint":"EmailOctopus API key from Account → Integrations & API. Sent as a Bearer token on every request."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.addOrUpdate","description":"Add a contact to a list, or update it if the email is already present.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"email_address":{"type":"string"},"fields":{"type":"object"},"tags":{"type":"object"},"status":{"type":"string","enum":["subscribed","unsubscribed","pending"]}},"required":["listId","email_address"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.unsubscribe","description":"Unsubscribe a contact from a list by contact id (MD5 of lowercased email).","parameters":{"type":"object","properties":{"listId":{"type":"string"},"contactId":{"type":"string"}},"required":["listId","contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.updateEmail","description":"Update a contact email by replacing the address on the existing contact.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"contactId":{"type":"string"},"new_email_address":{"type":"string"}},"required":["listId","contactId","new_email_address"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.addTag","description":"Add a tag to a contact. Existing tags are preserved.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"contactId":{"type":"string"},"tag":{"type":"string"}},"required":["listId","contactId","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.removeTag","description":"Remove a tag from a contact. Other tags are preserved.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"contactId":{"type":"string"},"tag":{"type":"string"}},"required":["listId","contactId","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"lists.create","description":"Create a new list.","parameters":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.find","description":"Look up a single contact by id within a list.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"contactId":{"type":"string"}},"required":["listId","contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"enrichlayer","displayName":"Enrich Layer","description":"LinkedIn-style profile, company, school, and job enrichment. Reverse-lookup contacts by email or phone, search employees, and check disposable email addresses.","auth":{"kind":"api-key","hint":"Enrich Layer API key from the dashboard. Sent as a bearer token in the Authorization header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"school.profile.get","description":"Fetch a LinkedIn school profile by public URL.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"LinkedIn school profile URL."},"use_cache":{"type":"string","description":"if-present | if-recent"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.profile.get","description":"Fetch a LinkedIn company profile by public URL.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"LinkedIn company URL."},"categories":{"type":"string","description":"include | exclude"},"funding_data":{"type":"string","description":"include | exclude"},"exit_data":{"type":"string","description":"include | exclude"},"acquisitions":{"type":"string","description":"include | exclude"},"extra":{"type":"string","description":"include | exclude"},"use_cache":{"type":"string","description":"if-present | if-recent"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"person.profile.get","description":"Fetch a LinkedIn person profile by public URL.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"LinkedIn profile URL."},"skills":{"type":"string","description":"include | exclude"},"inferred_salary":{"type":"string","description":"include | exclude"},"personal_email":{"type":"string","description":"include | exclude"},"personal_contact_number":{"type":"string","description":"include | exclude"},"twitter_profile_id":{"type":"string"},"facebook_profile_id":{"type":"string"},"github_profile_id":{"type":"string"},"extra":{"type":"string","description":"include | exclude"},"use_cache":{"type":"string","description":"if-present | if-recent"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.lookup","description":"Lookup a company by name, domain, or LinkedIn slug.","parameters":{"type":"object","properties":{"company_domain":{"type":"string"},"company_name":{"type":"string"},"company_location":{"type":"string"},"enrich_profile":{"type":"string","description":"enrich | skip"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.id.lookup","description":"Resolve a LinkedIn internal company id from a company URL.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"LinkedIn company URL."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.picture.get","description":"Get a temporary URL to a company profile picture.","parameters":{"type":"object","properties":{"linkedin_company_profile_url":{"type":"string"}},"required":["linkedin_company_profile_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"person.picture.get","description":"Get a temporary URL to a person profile picture.","parameters":{"type":"object","properties":{"linkedin_person_profile_url":{"type":"string"}},"required":["linkedin_person_profile_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"employee.listing","description":"List employees of a company by LinkedIn URL.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"LinkedIn company URL."},"country":{"type":"string"},"enrich_profiles":{"type":"string","description":"enrich | skip"},"role_search":{"type":"string","description":"Regex of role titles to match."},"page_size":{"type":"integer","minimum":1,"maximum":200000},"employment_status":{"type":"string","description":"current | past | all"},"sort_by":{"type":"string","description":"recently-joined | recently-left | oldest | none"},"resolve_numeric_id":{"type":"boolean"},"use_cache":{"type":"string","description":"if-present | if-recent"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"employee.count","description":"Get employee headcount estimate for a company.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"LinkedIn company URL."},"linkedin_employee_count":{"type":"string","description":"include | exclude"},"employment_status":{"type":"string","description":"current | past | all"},"use_cache":{"type":"string","description":"if-present | if-recent"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"employee.search","description":"Search a company's employee list by keyword/role.","parameters":{"type":"object","properties":{"linkedin_company_profile_url":{"type":"string"},"keyword_regex":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":200000},"country":{"type":"string"},"enrich_profiles":{"type":"string","description":"enrich | skip"},"resolve_numeric_id":{"type":"boolean"}},"required":["linkedin_company_profile_url","keyword_regex"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"person.lookup","description":"Resolve a person by name + company hints to a LinkedIn profile.","parameters":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"company_domain":{"type":"string"},"location":{"type":"string"},"title":{"type":"string"},"enrich_profile":{"type":"string","description":"enrich | skip"}},"required":["first_name","company_domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"role.lookup","description":"Find a person currently holding a given role at a company.","parameters":{"type":"object","properties":{"role":{"type":"string","description":"Role/title to search for."},"company_name":{"type":"string"},"enrich_profile":{"type":"string","description":"enrich | skip"}},"required":["role","company_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reverse.email.lookup","description":"Reverse-lookup a LinkedIn profile from a work or personal email.","parameters":{"type":"object","properties":{"work_email":{"type":"string"},"enrich_profile":{"type":"string","description":"enrich | skip"},"lookup_depth":{"type":"string","description":"superficial | deep"}},"required":["work_email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reverse.phone.lookup","description":"Reverse-lookup public profiles (LinkedIn, Twitter, Facebook) from a phone number.","parameters":{"type":"object","properties":{"phone_number":{"type":"string","description":"E.164-formatted phone number."}},"required":["phone_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"work.email.lookup","description":"Find a work email address for a LinkedIn person profile.","parameters":{"type":"object","properties":{"linkedin_profile_url":{"type":"string"},"callback_url":{"type":"string","description":"Webhook URL for async result delivery."}},"required":["linkedin_profile_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"personal.contact.lookup","description":"Find personal contact numbers for a LinkedIn person profile.","parameters":{"type":"object","properties":{"linkedin_profile_url":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":10}},"required":["linkedin_profile_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"personal.email.lookup","description":"Find personal email addresses for a LinkedIn person profile.","parameters":{"type":"object","properties":{"linkedin_profile_url":{"type":"string"},"email_validation":{"type":"string","description":"include | exclude"},"page_size":{"type":"integer","minimum":1,"maximum":10}},"required":["linkedin_profile_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"disposable.email.check","description":"Check whether an email address belongs to a disposable provider.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"student.listing","description":"List alumni/students for a LinkedIn school profile.","parameters":{"type":"object","properties":{"linkedin_school_url":{"type":"string"},"country":{"type":"string"},"enrich_profiles":{"type":"string","description":"enrich | skip"},"search_keyword":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":15000},"student_status":{"type":"string","description":"current | past | all"},"sort_by":{"type":"string","description":"recently-started | recently-finished | none"},"resolve_numeric_id":{"type":"boolean"},"use_cache":{"type":"string","description":"if-present | if-recent"}},"required":["linkedin_school_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"job.profile.get","description":"Fetch a single LinkedIn job posting by URL.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"LinkedIn job posting URL."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"job.search","description":"Search job postings for a LinkedIn company by job type, region, and experience.","parameters":{"type":"object","properties":{"search_id":{"type":"string","description":"LinkedIn company numeric id."},"job_type":{"type":"string","description":"full-time | part-time | contract | internship | temporary | volunteer | other"},"experience_level":{"type":"string","description":"internship | entry_level | associate | mid_senior_level | director"},"when":{"type":"string","description":"yesterday | past-week | past-month | anytime"},"flexibility":{"type":"string","description":"remote | on-site | hybrid"},"geo_id":{"type":"string","description":"LinkedIn geo URN identifier."},"keyword":{"type":"string"}},"required":["search_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"job.count","description":"Get the count of job postings for a LinkedIn company.","parameters":{"type":"object","properties":{"search_id":{"type":"string"},"job_type":{"type":"string"},"experience_level":{"type":"string"},"when":{"type":"string"},"flexibility":{"type":"string"},"geo_id":{"type":"string"},"keyword":{"type":"string"}},"required":["search_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.search","description":"Search the company database by industry, headcount, country, or follower range.","parameters":{"type":"object","properties":{"country":{"type":"string"},"region":{"type":"string"},"city":{"type":"string"},"name":{"type":"string"},"industry":{"type":"string"},"employee_count_min":{"type":"integer","minimum":0},"employee_count_max":{"type":"integer","minimum":0},"follower_count_min":{"type":"integer","minimum":0},"follower_count_max":{"type":"integer","minimum":0},"founded_after_year":{"type":"integer"},"founded_before_year":{"type":"integer"},"funding_amount_max":{"type":"integer","minimum":0},"funding_amount_min":{"type":"integer","minimum":0},"funding_raised_after":{"type":"string","description":"YYYY-MM-DD"},"funding_raised_before":{"type":"string","description":"YYYY-MM-DD"},"public_identifier_in_list":{"type":"string"},"public_identifier_not_in_list":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":100},"enrich_profiles":{"type":"string","description":"enrich | skip"},"use_cache":{"type":"string","description":"if-present | if-recent"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"person.search","description":"Search the people database by current role, education, industry, or skills.","parameters":{"type":"object","properties":{"country":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"education_field_of_study":{"type":"string"},"education_degree_name":{"type":"string"},"education_school_name":{"type":"string"},"education_school_linkedin_profile_url":{"type":"string"},"current_role_title":{"type":"string"},"past_role_title":{"type":"string"},"current_role_before":{"type":"string","description":"YYYY-MM-DD"},"current_role_after":{"type":"string","description":"YYYY-MM-DD"},"current_company_linkedin_profile_url":{"type":"string"},"past_company_linkedin_profile_url":{"type":"string"},"current_job_description":{"type":"string"},"past_job_description":{"type":"string"},"current_company_name":{"type":"string"},"past_company_name":{"type":"string"},"linkedin_groups":{"type":"string"},"languages":{"type":"string"},"region":{"type":"string"},"city":{"type":"string"},"headline":{"type":"string"},"summary":{"type":"string"},"industries":{"type":"string"},"interests":{"type":"string"},"skills":{"type":"string"},"current_company_country":{"type":"string"},"current_company_region":{"type":"string"},"current_company_city":{"type":"string"},"current_company_type":{"type":"string"},"current_company_follower_count_min":{"type":"integer","minimum":0},"current_company_follower_count_max":{"type":"integer","minimum":0},"current_company_industry":{"type":"string"},"current_company_employee_count_min":{"type":"integer","minimum":0},"current_company_employee_count_max":{"type":"integer","minimum":0},"current_company_description":{"type":"string"},"current_company_founded_after_year":{"type":"integer"},"current_company_founded_before_year":{"type":"integer"},"current_company_funding_amount_min":{"type":"integer","minimum":0},"current_company_funding_amount_max":{"type":"integer","minimum":0},"current_company_funding_raised_after":{"type":"string"},"current_company_funding_raised_before":{"type":"string"},"public_identifier_in_list":{"type":"string"},"public_identifier_not_in_list":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":100},"enrich_profiles":{"type":"string","description":"enrich | skip"},"use_cache":{"type":"string","description":"if-present | if-recent"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"credit.balance.get","description":"Get the remaining API credit balance for the account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"esignatures","displayName":"eSignatures","description":"Create contracts on eSignatures.io and send them to signers from a template.","auth":{"kind":"api-key","hint":"eSignatures.io API token (sent as HTTP basic / bearer)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.contract","description":"Create a contract from a template and send it to the listed signers.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"ID of the template to use for the contract."},"title":{"type":"string","description":"Unique title for the contract (defaults to template title)."},"locale":{"type":"string","description":"Language setting for the signer page and emails."},"metadata":{"type":"string","description":"Custom data to attach to the contract."},"expiresInHours":{"type":"number","description":"Sets the expiry time (in hours) for the contract."},"customWebhookUrl":{"type":"string","description":"Custom URL for webhook notifications."},"assignedUserEmail":{"type":"string","description":"Email to assign management of the contract."},"labels":{"type":"array","items":{"type":"string"},"description":"Labels to assign to the contract."},"test":{"type":"boolean","description":"Mark as test/demo contract with no fees charged."},"saveAsDraft":{"type":"boolean","description":"Save as draft instead of sending to signers."},"signers":{"type":"array","description":"List of individuals required to sign (name, email, and/or mobile).","items":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"mobile":{"type":"string"}},"required":["name"]}}},"required":["templateId","signers"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contract.cancel","description":"Withdraw / cancel an in-progress contract.","parameters":{"type":"object","properties":{"contractId":{"type":"string","description":"ID of the contract to cancel."},"voidedBy":{"type":"string","description":"Name of the user voiding the contract (recorded in audit trail)."}},"required":["contractId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contract.delete","description":"Delete a contract permanently.","parameters":{"type":"object","properties":{"contractId":{"type":"string","description":"ID of the contract to delete."}},"required":["contractId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"etsy","displayName":"Etsy","description":"Manage Etsy seller resources — shop listings, shop receipts (orders), transactions, and the shop entity — via the Etsy Open API v3.","auth":{"kind":"oauth2","authorizationUrl":"https://www.etsy.com/oauth/connect","tokenUrl":"https://api.etsy.com/v3/public/oauth/token","scopes":["listings_r","listings_w","listings_d","transactions_r","transactions_w","shops_r","shops_w","profile_r","email_r"],"clientIdEnv":"ETSY_OAUTH_CLIENT_ID","clientSecretEnv":"ETSY_OAUTH_CLIENT_SECRET"},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.me","description":"Read the authenticated user, including their numeric user_id. Used to bootstrap shop_id resolution.","parameters":{"type":"object","properties":{}},"requiredScopes":["profile_r"],"class":"read"},{"name":"shops.get_for_user","description":"Resolve the shop owned by a given Etsy user. Returns the shop_id used by every listing/receipt call.","parameters":{"type":"object","properties":{"user_id":{"type":"integer","description":"Etsy numeric user_id (from users.me)."}},"required":["user_id"]},"requiredScopes":["shops_r"],"class":"read"},{"name":"shops.get","description":"Read a single shop by shop_id.","parameters":{"type":"object","properties":{"shop_id":{"type":"integer"}},"required":["shop_id"]},"requiredScopes":["shops_r"],"class":"read"},{"name":"shops.update","description":"Update mutable shop attributes (title, announcement, sale_message, policy_welcome).","parameters":{"type":"object","properties":{"shop_id":{"type":"integer"},"title":{"type":"string"},"announcement":{"type":"string"},"sale_message":{"type":"string"},"policy_welcome":{"type":"string"},"policy_payment":{"type":"string"},"policy_shipping":{"type":"string"},"policy_refunds":{"type":"string"},"policy_additional":{"type":"string"},"policy_seller_info":{"type":"string"},"policy_privacy":{"type":"string"}},"required":["shop_id"]},"requiredScopes":["shops_w"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"listings.search","description":"List shop listings with optional state, sort, and keyword filters. Paginated by limit/offset.","parameters":{"type":"object","properties":{"shop_id":{"type":"integer"},"state":{"type":"string","enum":["active","inactive","sold_out","draft","expired"],"description":"Filter by listing state. Defaults to active server-side when omitted."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Max 100 per page."},"offset":{"type":"integer","minimum":0},"sort_on":{"type":"string","enum":["created","price","updated","score"]},"sort_order":{"type":"string","enum":["asc","ascending","desc","descending","up","down"]},"keywords":{"type":"string","description":"Search within listing titles/descriptions."},"includes":{"type":"string","description":"Comma-separated associations to inline, e.g. Images,Inventory,Translations."}},"required":["shop_id"]},"requiredScopes":["listings_r"],"class":"read"},{"name":"listings.get","description":"Read a single listing by listing_id.","parameters":{"type":"object","properties":{"listing_id":{"type":"integer"},"includes":{"type":"string","description":"Comma-separated associations to inline, e.g. Images,Inventory,Shipping,Translations,Videos."},"language":{"type":"string","description":"BCP-47 language tag for localized fields."}},"required":["listing_id"]},"requiredScopes":["listings_r"],"class":"read"},{"name":"listings.create","description":"Create a draft shop listing. Required: quantity, title, description, price, who_made, when_made, taxonomy_id. Listing is created in `draft` state by default — caller must POST `listings.update` with state=active to publish.","parameters":{"type":"object","properties":{"shop_id":{"type":"integer"},"quantity":{"type":"integer","minimum":1},"title":{"type":"string"},"description":{"type":"string"},"price":{"type":"number","description":"Listing price in shop currency."},"who_made":{"type":"string","enum":["i_did","someone_else","collective"]},"when_made":{"type":"string","description":"Etsy when_made enum, e.g. \"made_to_order\", \"2020_2025\", \"before_1700\"."},"taxonomy_id":{"type":"integer","description":"Etsy seller taxonomy node id."},"shipping_profile_id":{"type":"integer"},"return_policy_id":{"type":"integer"},"materials":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"styles":{"type":"array","items":{"type":"string"}},"item_weight":{"type":"number"},"item_length":{"type":"number"},"item_width":{"type":"number"},"item_height":{"type":"number"},"is_supply":{"type":"boolean"},"is_personalizable":{"type":"boolean"},"type":{"type":"string","enum":["physical","download","both"]}},"required":["shop_id","quantity","title","description","price","who_made","when_made","taxonomy_id"]},"requiredScopes":["listings_w"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"listings.update","description":"Update a shop listing. Only supplied fields are modified. Use `state` to publish a draft (active), retire (inactive), or move to draft.","parameters":{"type":"object","properties":{"shop_id":{"type":"integer"},"listing_id":{"type":"integer"},"title":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"quantity":{"type":"integer","minimum":0},"state":{"type":"string","enum":["active","inactive","draft"]},"materials":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"taxonomy_id":{"type":"integer"},"shipping_profile_id":{"type":"integer"},"return_policy_id":{"type":"integer"},"is_personalizable":{"type":"boolean"},"featured_rank":{"type":"integer"}},"required":["shop_id","listing_id"]},"requiredScopes":["listings_w"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"listings.delete","description":"Permanently delete a shop listing. Etsy enforces idempotency — repeated deletes return 404 on the same listing_id.","parameters":{"type":"object","properties":{"listing_id":{"type":"integer"}},"required":["listing_id"]},"requiredScopes":["listings_d"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"receipts.search","description":"List shop receipts (orders). Filter by paid/shipped state and date window. Paginated by limit/offset.","parameters":{"type":"object","properties":{"shop_id":{"type":"integer"},"min_created":{"type":"integer","description":"Unix timestamp lower bound for create_timestamp."},"max_created":{"type":"integer","description":"Unix timestamp upper bound for create_timestamp."},"min_last_modified":{"type":"integer"},"max_last_modified":{"type":"integer"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0},"sort_on":{"type":"string","enum":["created","updated","receipt_id"]},"sort_order":{"type":"string","enum":["asc","ascending","desc","descending","up","down"]},"was_paid":{"type":"boolean"},"was_shipped":{"type":"boolean"},"was_delivered":{"type":"boolean"},"was_canceled":{"type":"boolean"}},"required":["shop_id"]},"requiredScopes":["transactions_r"],"class":"read"},{"name":"receipts.get","description":"Read a single shop receipt by receipt_id.","parameters":{"type":"object","properties":{"shop_id":{"type":"integer"},"receipt_id":{"type":"integer"}},"required":["shop_id","receipt_id"]},"requiredScopes":["transactions_r"],"class":"read"},{"name":"receipts.update","description":"Update buyer-facing notes on a receipt — was_shipped/was_paid flip plus internal notes.","parameters":{"type":"object","properties":{"shop_id":{"type":"integer"},"receipt_id":{"type":"integer"},"was_shipped":{"type":"boolean"},"was_paid":{"type":"boolean"}},"required":["shop_id","receipt_id"]},"requiredScopes":["transactions_w"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"receipts.create_shipment","description":"Mark a receipt as shipped and (optionally) attach tracking. Etsy notifies the buyer when send_bcc is true.","parameters":{"type":"object","properties":{"shop_id":{"type":"integer"},"receipt_id":{"type":"integer"},"tracking_code":{"type":"string"},"carrier_name":{"type":"string","description":"Etsy carrier slug, e.g. \"usps\", \"fedex\", \"ups\", \"dhl\"."},"send_bcc":{"type":"boolean","description":"Send the shipment notification email to the seller as well."},"note_to_buyer":{"type":"string"}},"required":["shop_id","receipt_id"]},"requiredScopes":["transactions_w"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.search","description":"List individual transactions (line items) for a shop, optionally filtered to a receipt.","parameters":{"type":"object","properties":{"shop_id":{"type":"integer"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}},"required":["shop_id"]},"requiredScopes":["transactions_r"],"class":"read"},{"name":"transactions.get","description":"Read a single transaction (line item) by transaction_id.","parameters":{"type":"object","properties":{"shop_id":{"type":"integer"},"transaction_id":{"type":"integer"}},"required":["shop_id","transaction_id"]},"requiredScopes":["transactions_r"],"class":"read"}]},{"kind":"everhour","displayName":"Everhour","description":"Time tracking software that integrates into project management tools to track billable hours, set budgets, and monitor spending.","auth":{"kind":"api-key","hint":"Everhour API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tasks.create","description":"Create a task in Everhour.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"The ID of the project to create the task in."},"name":{"type":"string","description":"The name of the task."}},"required":["projectId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"timers.start","description":"Start a timer for a task in Everhour.","parameters":{"type":"object","properties":{"taskId":{"type":"string","description":"The ID of the task to start the timer for."}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"timers.stop","description":"Stop the timer for a task in Everhour.","parameters":{"type":"object","properties":{"taskId":{"type":"string","description":"The ID of the task to stop the timer for."}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"time.create","description":"Log a time entry against an Everhour task.","parameters":{"type":"object","properties":{"taskId":{"type":"string","description":"The ID of the task the time entry attaches to."},"time":{"type":"integer","description":"Duration in seconds."},"date":{"type":"string","description":"Date the entry is logged for (YYYY-MM-DD)."},"user":{"type":"integer","description":"Optional user id; defaults to the authorised account."},"comment":{"type":"string","description":"Optional free-form comment for the entry."}},"required":["taskId","time","date"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"time.update","description":"Update an existing Everhour time entry.","parameters":{"type":"object","properties":{"taskId":{"type":"string","description":"The ID of the task the entry belongs to."},"timeId":{"type":"string","description":"The ID of the time entry to update."},"time":{"type":"integer","description":"Updated duration in seconds."},"date":{"type":"string","description":"Updated date (YYYY-MM-DD)."},"comment":{"type":"string","description":"Updated comment."}},"required":["taskId","timeId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"time.delete","description":"Delete an Everhour time entry.","parameters":{"type":"object","properties":{"taskId":{"type":"string","description":"The ID of the task the entry belongs to."},"timeId":{"type":"string","description":"The ID of the time entry to delete."}},"required":["taskId","timeId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"exa","displayName":"Exa","description":"AI-powered search and content extraction from the web.","auth":{"kind":"api-key","hint":"Exa API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"search.perform","description":"Perform a semantic or keyword search.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Search query"},"numResults":{"type":"integer","description":"Number of results to return (max 100)"},"includeDomains":{"type":"array","items":{"type":"string"},"description":"List of domains to include"},"excludeDomains":{"type":"array","items":{"type":"string"},"description":"List of domains to exclude"},"startCrawlDate":{"type":"string","description":"Start crawl date (ISO format)"},"endCrawlDate":{"type":"string","description":"End crawl date (ISO format)"},"startPublishedDate":{"type":"string","description":"Start published date (ISO format)"},"endPublishedDate":{"type":"string","description":"End published date (ISO format)"},"includeText":{"type":"string","description":"Strings that must be present in webpage text"},"excludeText":{"type":"string","description":"Strings that must not be present in webpage text"},"type":{"type":"string","enum":["keyword","neural"],"description":"Type of search to perform"},"category":{"type":"string","description":"Category of data to focus the search on"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.similar","description":"Find semantically similar links based on a URL.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Reference URL to find semantically similar links"},"numResults":{"type":"integer","description":"Number of results to return (max 100)"},"includeDomains":{"type":"array","items":{"type":"string"},"description":"List of domains to include"},"excludeDomains":{"type":"array","items":{"type":"string"},"description":"List of domains to exclude"},"startCrawlDate":{"type":"string","description":"Start crawl date (ISO format)"},"endCrawlDate":{"type":"string","description":"End crawl date (ISO format)"},"startPublishedDate":{"type":"string","description":"Start published date (ISO format)"},"endPublishedDate":{"type":"string","description":"End published date (ISO format)"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contents.get","description":"Get the full text contents from URLs.","parameters":{"type":"object","properties":{"urls":{"type":"array","items":{"type":"string"},"description":"Array of URLs to crawl"},"livecrawl":{"type":"string","enum":["always","never","fallback"],"description":"Livecrawl option"},"livecrawlTimeout":{"type":"integer","description":"Timeout for livecrawling in milliseconds"},"subpages":{"type":"integer","description":"Number of subpages to crawl"},"subpageTarget":{"type":"string","description":"Keyword(s) to find specific subpages"}},"required":["urls"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"answer.generate","description":"Generate a summarized answer from the web based on a query.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Question to answer from the web"},"model":{"type":"string","enum":["claude-3-5-sonnet","gpt-4o"],"description":"Model to use for the answer"},"numResults":{"type":"integer","description":"Number of web results to base the answer on"},"includeDomains":{"type":"array","items":{"type":"string"},"description":"List of domains to include"},"excludeDomains":{"type":"array","items":{"type":"string"},"description":"List of domains to exclude"},"text":{"type":"boolean","description":"If true, includes full text content from search results"}},"required":["query","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"excel-files","displayName":"Excel Files","description":"Read bounded XLSX workbooks and create XLSX files from structured rows.","auth":{"kind":"none"},"defaultConsistencyModel":"advisory","category":"spreadsheet","capabilities":[{"name":"excel.read","class":"read","description":"Read every sheet, or one named sheet, from a base64-encoded XLSX workbook.","parameters":{"type":"object","properties":{"fileBase64":{"type":"string","description":"XLSX workbook content encoded as canonical base64."},"sheet":{"description":"Optional sheet name or one-based sheet number.","oneOf":[{"type":"string","minLength":1},{"type":"integer","minimum":1}]}},"required":["fileBase64"],"additionalProperties":false}},{"name":"excel.create","class":"mutation","description":"Create a single-sheet base64-encoded XLSX workbook from row arrays.","parameters":{"type":"object","properties":{"rows":{"type":"array","minItems":1,"maxItems":10000,"items":{"type":"array","maxItems":256}},"sheetName":{"type":"string","minLength":1,"maxLength":31,"default":"Sheet1"}},"required":["rows"],"additionalProperties":false},"cas":"none","externalEffect":true}]},{"kind":"facebook-leads","displayName":"Facebook Leads","description":"Capture leads from Facebook Lead Ads: list lead-gen forms on managed pages, page through submitted leads, and subscribe a page to the leadgen webhook field.","auth":{"kind":"oauth2","authorizationUrl":"https://www.facebook.com/v19.0/dialog/oauth","tokenUrl":"https://graph.facebook.com/v19.0/oauth/access_token","scopes":["pages_show_list","pages_manage_metadata","leads_retrieval","ads_management","pages_read_engagement"],"clientIdEnv":"FACEBOOK_OAUTH_CLIENT_ID","clientSecretEnv":"FACEBOOK_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"advisory","capabilities":[{"name":"users.me","description":"Return the connected Facebook user (id, name) for the granted access token.","parameters":{"type":"object","properties":{"fields":{"type":"string","description":"Comma-separated Graph field selector (e.g. \"id,name\")."}}},"requiredScopes":["pages_show_list"],"class":"read"},{"name":"pages.list","description":"List Facebook pages the connected user manages. Each entry includes a Page Access Token usable for page-scoped lead-gen actions.","parameters":{"type":"object","properties":{"fields":{"type":"string","description":"Comma-separated Graph field selector. Default returns id,name,access_token,category,tasks."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25},"after":{"type":"string","description":"Cursor-style pagination token."}}},"requiredScopes":["pages_show_list"],"class":"read"},{"name":"forms.list","description":"List lead-gen forms on a page. Requires a Page Access Token passed as access_token (in addition to the user grant bearer).","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"access_token":{"type":"string","description":"Page Access Token for the target page."},"fields":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25},"after":{"type":"string"}},"required":["pageId","access_token"]},"requiredScopes":["leads_retrieval","pages_show_list"],"class":"read"},{"name":"forms.get","description":"Read a single lead-gen form by id.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"access_token":{"type":"string","description":"Page Access Token for the owning page."},"fields":{"type":"string"}},"required":["formId","access_token"]},"requiredScopes":["leads_retrieval"],"class":"read"},{"name":"forms.leads.list","description":"List leads submitted against a form. Returns the field_data array per lead; use `filtering` for created_time windows.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"access_token":{"type":"string","description":"Page Access Token for the owning page."},"fields":{"type":"string"},"filtering":{"type":"string","description":"JSON-encoded filter spec, e.g. [{\"field\":\"time_created\",\"operator\":\"GREATER_THAN\",\"value\":1700000000}]."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25},"after":{"type":"string"}},"required":["formId","access_token"]},"requiredScopes":["leads_retrieval"],"class":"read"},{"name":"leads.get","description":"Read a single lead by leadgen id. The new.lead trigger emits a leadgen_id; this is the canonical hydrate path.","parameters":{"type":"object","properties":{"leadId":{"type":"string"},"access_token":{"type":"string","description":"Page Access Token for the owning page."},"fields":{"type":"string","description":"Comma-separated Graph field selector. Default returns created_time,id,ad_id,form_id,field_data."}},"required":["leadId","access_token"]},"requiredScopes":["leads_retrieval"],"class":"read"},{"name":"page.subscriptions.list","description":"List the webhook field subscriptions currently attached to a page. Used to confirm a page is subscribed to the leadgen field before relying on new.lead.","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"access_token":{"type":"string","description":"Page Access Token for the target page."}},"required":["pageId","access_token"]},"requiredScopes":["pages_manage_metadata"],"class":"read"},{"name":"page.subscriptions.create","description":"Subscribe a page to webhook fields (must include \"leadgen\" for the new.lead trigger). Idempotent on the (pageId, fields) pair.","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"access_token":{"type":"string","description":"Page Access Token for the target page."},"subscribed_fields":{"type":"string","description":"Comma-separated field list, e.g. \"leadgen\"."}},"required":["pageId","access_token","subscribed_fields"]},"requiredScopes":["pages_manage_metadata"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"page.subscriptions.delete","description":"Remove the app webhook subscription on a page. Idempotent on the page id.","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"access_token":{"type":"string","description":"Page Access Token for the target page."}},"required":["pageId","access_token"]},"requiredScopes":["pages_manage_metadata"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"facebook-pages","displayName":"Facebook Pages","description":"Read Facebook pages the connected user manages, post and edit page updates, manage comments, and read basic page insights.","auth":{"kind":"oauth2","authorizationUrl":"https://www.facebook.com/v19.0/dialog/oauth","tokenUrl":"https://graph.facebook.com/v19.0/oauth/access_token","scopes":["pages_show_list","pages_read_engagement","pages_read_user_content","pages_manage_posts","pages_manage_engagement","pages_manage_metadata","read_insights"],"clientIdEnv":"FACEBOOK_OAUTH_CLIENT_ID","clientSecretEnv":"FACEBOOK_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"advisory","capabilities":[{"name":"users.me","description":"Return the connected Facebook user (id, name) for the granted access token.","parameters":{"type":"object","properties":{"fields":{"type":"string","description":"Comma-separated Graph field selector (e.g. \"id,name,email\")."}}},"requiredScopes":["pages_show_list"],"class":"read"},{"name":"pages.list","description":"List Facebook pages the connected user manages. Each entry includes a Page Access Token usable for page-scoped actions.","parameters":{"type":"object","properties":{"fields":{"type":"string","description":"Comma-separated Graph field selector. Default returns id,name,access_token,category,tasks."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25},"after":{"type":"string","description":"Cursor-style pagination token."}}},"requiredScopes":["pages_show_list"],"class":"read"},{"name":"pages.get","description":"Read a single Facebook page by id.","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"fields":{"type":"string","description":"Comma-separated Graph field selector."}},"required":["pageId"]},"requiredScopes":["pages_show_list"],"class":"read"},{"name":"pages.feed.list","description":"List posts on a page feed. Pagination via `limit`, `after`, `before` cursors; time range via `since` / `until` (unix or strtotime).","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"fields":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25},"after":{"type":"string"},"before":{"type":"string"},"since":{"type":"string"},"until":{"type":"string"}},"required":["pageId"]},"requiredScopes":["pages_read_engagement","pages_read_user_content"],"class":"read"},{"name":"pages.published_posts.list","description":"List posts the page itself published (excludes visitor posts). Same pagination as pages.feed.list.","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"fields":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25},"after":{"type":"string"},"before":{"type":"string"},"since":{"type":"string"},"until":{"type":"string"}},"required":["pageId"]},"requiredScopes":["pages_read_engagement"],"class":"read"},{"name":"posts.get","description":"Read a single page post by id.","parameters":{"type":"object","properties":{"postId":{"type":"string","description":"Graph post id, typically `{pageId}_{postId}`."},"fields":{"type":"string"}},"required":["postId"]},"requiredScopes":["pages_read_engagement"],"class":"read"},{"name":"posts.comments.list","description":"List comments on a post. Use `filter=toplevel` (default) or `stream` for nested chronological order.","parameters":{"type":"object","properties":{"postId":{"type":"string"},"fields":{"type":"string"},"filter":{"type":"string","enum":["toplevel","stream"],"default":"toplevel"},"order":{"type":"string","enum":["chronological","reverse_chronological"]},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25},"after":{"type":"string"}},"required":["postId"]},"requiredScopes":["pages_read_user_content"],"class":"read"},{"name":"pages.insights.read","description":"Read page-level insights metrics (e.g. page_impressions, page_engaged_users). Caller passes the metric name plus optional period.","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"metric":{"type":"string","description":"Comma-separated metric names per the Graph Insights reference."},"period":{"type":"string","enum":["day","week","days_28","lifetime"]},"since":{"type":"string"},"until":{"type":"string"}},"required":["pageId","metric"]},"requiredScopes":["read_insights"],"class":"read"},{"name":"pages.feed.create","description":"Publish a post to a page feed. Provide `message` and/or `link`. Append-only — no CAS — caller owns dedupe via idempotencyKey. Requires a Page Access Token bound to the target page.","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"message":{"type":"string"},"link":{"type":"string","description":"URL to attach to the post."},"published":{"type":"boolean","description":"false to create as an unpublished draft (default true)."},"scheduled_publish_time":{"type":"integer","description":"Unix timestamp for scheduled publishing; requires published=false."},"targeting":{"type":"object","description":"Audience targeting spec (locales, countries, etc.)."},"feed_targeting":{"type":"object","description":"News-feed targeting spec."}},"required":["pageId"]},"requiredScopes":["pages_manage_posts"],"class":"mutation","cas":"none","externalEffect":true},{"name":"pages.photos.create","description":"Upload a photo to a page. Provide either `url` (Facebook fetches the asset) or `source` (multipart upload). Append-only — no CAS.","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"url":{"type":"string","description":"Publicly fetchable URL of the photo."},"caption":{"type":"string"},"published":{"type":"boolean"},"scheduled_publish_time":{"type":"integer"},"temporary":{"type":"boolean","description":"Upload as unpublished, returns a media id for later attachment."}},"required":["pageId"]},"requiredScopes":["pages_manage_posts"],"class":"mutation","cas":"none","externalEffect":true},{"name":"posts.update","description":"Edit a previously published page post. Only `message` and a few attachment fields are editable post-publish.","parameters":{"type":"object","properties":{"postId":{"type":"string"},"message":{"type":"string"},"is_published":{"type":"boolean"},"scheduled_publish_time":{"type":"integer"}},"required":["postId"]},"requiredScopes":["pages_manage_posts"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"posts.delete","description":"Delete a page post. Idempotent on the post id.","parameters":{"type":"object","properties":{"postId":{"type":"string"}},"required":["postId"]},"requiredScopes":["pages_manage_posts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.comments.create","description":"Post a comment on a page post (or reply via parent comment id passed as postId). Append-only — caller owns dedupe via idempotencyKey.","parameters":{"type":"object","properties":{"postId":{"type":"string","description":"Post id, or a parent comment id to reply to."},"message":{"type":"string"},"attachment_url":{"type":"string"},"attachment_id":{"type":"string"}},"required":["postId","message"]},"requiredScopes":["pages_manage_engagement"],"class":"mutation","cas":"none","externalEffect":true},{"name":"comments.delete","description":"Delete a comment by id. Idempotent on the comment id.","parameters":{"type":"object","properties":{"commentId":{"type":"string"}},"required":["commentId"]},"requiredScopes":["pages_manage_engagement"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"factors-ai","displayName":"Factors.ai","description":"B2B account intelligence and ABM platform. Retrieve the engagement journey (activity timeline) for a target account by domain.","auth":{"kind":"api-key","hint":"Generate a private API token for the target project in Factors.ai. Sent as the Authorization: Bearer header."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.journey","description":"Get the account journey (chronological engagement events) for a given account domain, optionally filtered by date range, event name, or user.","parameters":{"type":"object","properties":{"account_domain":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"event_name":{"type":"string"},"user_name":{"type":"string"}},"required":["account_domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"fathom","displayName":"Fathom","description":"Read Fathom meeting recordings, AI-generated summaries, transcripts, and team directory entries.","auth":{"kind":"oauth2","authorizationUrl":"https://fathom.video/oauth/authorize","tokenUrl":"https://fathom.video/oauth/token","scopes":["read:meetings","read:recordings","read:team"],"clientIdEnv":"FATHOM_OAUTH_CLIENT_ID","clientSecretEnv":"FATHOM_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"recordings.summary.get","description":"Fetch the AI-generated summary, highlights, and action items for a single recording.","parameters":{"type":"object","properties":{"recordingId":{"type":"string","description":"Recording identifier returned by listMeetings or the new-recording trigger."}},"required":["recordingId"]},"requiredScopes":["read:recordings"],"class":"read"},{"name":"recordings.transcript.get","description":"Fetch the full speaker-attributed transcript for a single recording.","parameters":{"type":"object","properties":{"recordingId":{"type":"string"},"format":{"type":"string","enum":["json","text","vtt"],"description":"Transcript serialisation format. Defaults to json when omitted."}},"required":["recordingId"]},"requiredScopes":["read:recordings"],"class":"read"},{"name":"meetings.list","description":"List meetings the authenticated workspace has access to. Supports paging and a date-range filter.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string","description":"Opaque pagination cursor returned by a previous page."},"startedAfter":{"type":"string","description":"ISO-8601 timestamp; only return meetings that started at or after this instant."},"startedBefore":{"type":"string","description":"ISO-8601 timestamp; only return meetings that started at or before this instant."},"teamId":{"type":"string","description":"Scope the listing to a specific Fathom team."}}},"requiredScopes":["read:meetings"],"class":"read"},{"name":"team.find","description":"Look up a Fathom team by id. Returns the team record plus member count.","parameters":{"type":"object","properties":{"teamId":{"type":"string","description":"Fathom team id."}},"required":["teamId"]},"requiredScopes":["read:team"],"class":"read"},{"name":"team.member.find","description":"Look up a single team member by id. Used to resolve attendees back to the workspace directory.","parameters":{"type":"object","properties":{"teamId":{"type":"string","description":"Team the member belongs to."},"memberId":{"type":"string","description":"Fathom member id."}},"required":["teamId","memberId"]},"requiredScopes":["read:team"],"class":"read"}]},{"kind":"fathom-analytics","displayName":"Fathom Analytics","description":"Privacy-focused website analytics. Query site traffic, manage sites and events, and generate aggregated reports.","auth":{"kind":"api-key","hint":"Fathom Analytics API token (Bearer)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"list.sites","description":"List all sites accessible to the authenticated account.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"starting_after":{"type":"string"},"ending_before":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.site","description":"Retrieve a single Fathom site by its identifier.","parameters":{"type":"object","properties":{"site_id":{"type":"string"}},"required":["site_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"create.event","description":"Create a new event/goal definition on a Fathom site.","parameters":{"type":"object","properties":{"site_id":{"type":"string"},"name":{"type":"string"}},"required":["site_id","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"list.events","description":"List events/goals defined on a Fathom site.","parameters":{"type":"object","properties":{"site_id":{"type":"string"},"limit":{"type":"integer"},"starting_after":{"type":"string"},"ending_before":{"type":"string"}},"required":["site_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.aggregation","description":"Run an aggregation report over pageviews or events with optional grouping, filtering, and sorting.","parameters":{"type":"object","properties":{"entity":{"type":"string","enum":["pageview","event"]},"entity_id":{"type":"string"},"aggregates":{"type":"string"},"date_grouping":{"type":"string"},"field_grouping":{"type":"string"},"date_from":{"type":"string"},"date_to":{"type":"string"},"timezone":{"type":"string"},"sort_by":{"type":"string"},"limit":{"type":"integer"},"filters":{"type":"string"}},"required":["entity","entity_id","aggregates"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"feathery","displayName":"Feathery","description":"Build powerful forms, workflows, and document automation.","auth":{"kind":"api-key","hint":"Feathery API key."},"category":"webhook","defaultConsistencyModel":"authoritative","capabilities":[{"name":"forms.create","description":"Create a new form.","parameters":{"type":"object","properties":{"form_name":{"type":"string"},"template_form_id":{"type":"string"},"enabled":{"type":"boolean"}},"required":["form_name","template_form_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.update","description":"Update an existing form.","parameters":{"type":"object","properties":{"form_id":{"type":"string"},"form_name":{"type":"string"},"enabled":{"type":"boolean"}},"required":["form_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"forms.delete","description":"Delete a form.","parameters":{"type":"object","properties":{"form_id":{"type":"string"}},"required":["form_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"submissions.list","description":"List form submissions.","parameters":{"type":"object","properties":{"form_id":{"type":"string"},"limit":{"type":"integer"},"offset":{"type":"integer"},"completed":{"type":"boolean"}},"required":["form_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"submissions.export","description":"Export submission as PDF.","parameters":{"type":"object","properties":{"submission_id":{"type":"string"}},"required":["submission_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"user.create","description":"Create a Feathery user record. The user id is supplied by the caller and is unique per workspace.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Workspace-unique user id."},"field_values":{"type":"object","description":"Initial field values keyed by Feathery field key."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"user.update","description":"Patch a Feathery user record by id.","parameters":{"type":"object","properties":{"id":{"type":"string"},"field_values":{"type":"object"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"user.delete","description":"Delete a Feathery user record by id. Destructive.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"fellow","displayName":"Fellow.ai","description":"AI Meeting Assistant and Notetaker - get notes and manage meeting recordings.","auth":{"kind":"api-key","hint":"Fellow.ai API key from User Settings -> Developer Tools."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"notes.get","description":"Get a Fellow.ai note by ID.","parameters":{"type":"object","properties":{"noteId":{"type":"string"}},"required":["noteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"notes.list","description":"List Fellow.ai notes.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"recordings.list","description":"List meeting recordings.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"figjam","displayName":"FigJam","description":"Read FigJam boards (stickies, connectors, shapes, sections), project metadata, render board images, and post or delete board comments through the Figma REST API.","auth":{"kind":"oauth2","authorizationUrl":"https://www.figma.com/oauth","tokenUrl":"https://api.figma.com/v1/oauth/token","scopes":["current_user:read","file_comments:read","file_comments:write","file_content:read","file_versions:read","project_metadata:read","webhooks:write"],"clientIdEnv":"FIGMA_OAUTH_CLIENT_ID","clientSecretEnv":"FIGMA_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"me.get","description":"Return the authenticated Figma/FigJam user.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":["current_user:read"],"class":"read"},{"name":"files.get","description":"Fetch a FigJam board by file key (full document tree, including STICKY/CONNECTOR/SHAPE_WITH_TEXT/SECTION nodes).","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"version":{"type":"string"},"ids":{"type":"string","description":"Comma-separated node ids to scope the response."},"depth":{"type":"integer","minimum":1,"maximum":4},"geometry":{"type":"string","enum":["paths"]},"plugin_data":{"type":"string"}},"required":["file_key"]},"requiredScopes":["file_content:read"],"class":"read"},{"name":"files.nodes","description":"Fetch one or more nodes from a FigJam board by id (e.g. a single sticky or a section subtree).","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"ids":{"type":"string","description":"Comma-separated list of node ids."},"version":{"type":"string"},"depth":{"type":"integer","minimum":1,"maximum":4},"geometry":{"type":"string","enum":["paths"]}},"required":["file_key","ids"]},"requiredScopes":["file_content:read"],"class":"read"},{"name":"files.images","description":"Render PNG/JPG/SVG/PDF images for a set of node ids inside a FigJam board (e.g. snapshot a section or a single sticky cluster).","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"ids":{"type":"string","description":"Comma-separated list of node ids to render."},"scale":{"type":"number","minimum":0.01,"maximum":4},"format":{"type":"string","enum":["jpg","png","svg","pdf"]},"svg_outline_text":{"type":"boolean"},"svg_include_id":{"type":"boolean"},"svg_simplify_stroke":{"type":"boolean"},"use_absolute_bounds":{"type":"boolean"},"version":{"type":"string"}},"required":["file_key","ids"]},"requiredScopes":["file_content:read"],"class":"read"},{"name":"files.image_fills","description":"List image fills referenced by a FigJam board (URLs to the source bitmaps placed on the canvas).","parameters":{"type":"object","properties":{"file_key":{"type":"string"}},"required":["file_key"]},"requiredScopes":["file_content:read"],"class":"read"},{"name":"files.versions.list","description":"List historical versions saved for a FigJam board.","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":50},"before":{"type":"integer"},"after":{"type":"integer"}},"required":["file_key"]},"requiredScopes":["file_versions:read"],"class":"read"},{"name":"files.comments.list","description":"List comments posted on a FigJam board (top-level threads and replies).","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"as_md":{"type":"boolean"}},"required":["file_key"]},"requiredScopes":["file_comments:read"],"class":"read"},{"name":"projects.metadata.get","description":"Get metadata for a Figma/FigJam project visible to the authenticated user.","parameters":{"type":"object","properties":{"project_id":{"type":"string"}},"required":["project_id"]},"requiredScopes":["project_metadata:read"],"class":"read"},{"name":"files.comments.create","description":"Post a new comment on a FigJam board (optionally pinned to a node or canvas coordinate, or threaded as a reply).","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"message":{"type":"string"},"comment_id":{"type":"string","description":"Reply to an existing comment by id."},"client_meta":{"type":"object","description":"Either { x, y } canvas coordinates or { node_id, node_offset: { x, y } } to pin to a node."}},"required":["file_key","message"]},"requiredScopes":["file_comments:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.comments.delete","description":"Delete a comment on a FigJam board.","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"comment_id":{"type":"string"}},"required":["file_key","comment_id"]},"requiredScopes":["file_comments:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.comments.reactions.add","description":"Add an emoji reaction to a FigJam board comment.","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"comment_id":{"type":"string"},"emoji":{"type":"string","description":"Emoji shortcode, e.g. :heart:."}},"required":["file_key","comment_id","emoji"]},"requiredScopes":["file_comments:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.create","description":"Register a Figma v2 webhook for a team event stream — FigJam boards emit FILE_UPDATE / FILE_VERSION_UPDATE / FILE_DELETE / FILE_COMMENT alongside Figma files.","parameters":{"type":"object","properties":{"event_type":{"type":"string","enum":["FILE_UPDATE","FILE_VERSION_UPDATE","FILE_DELETE","FILE_COMMENT"]},"team_id":{"type":"string"},"endpoint":{"type":"string","format":"uri"},"passcode":{"type":"string"},"status":{"type":"string","enum":["ACTIVE","PAUSED"]},"description":{"type":"string"}},"required":["event_type","team_id","endpoint","passcode"]},"requiredScopes":["webhooks:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Delete a Figma v2 webhook by id.","parameters":{"type":"object","properties":{"webhook_id":{"type":"string"}},"required":["webhook_id"]},"requiredScopes":["webhooks:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"figma","displayName":"Figma","description":"Read Figma files, components, comments, and project metadata; post comments back into the design source of truth.","auth":{"kind":"oauth2","authorizationUrl":"https://www.figma.com/oauth","tokenUrl":"https://api.figma.com/v1/oauth/token","scopes":["current_user:read","file_comments:read","file_comments:write","file_content:read","file_dev_resources:read","file_versions:read","library_content:read","project_metadata:read","team_library_content:read","webhooks:write"],"clientIdEnv":"FIGMA_OAUTH_CLIENT_ID","clientSecretEnv":"FIGMA_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"me.get","description":"Return the authenticated Figma user.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":["current_user:read"],"class":"read"},{"name":"files.get","description":"Fetch a Figma file by key (full document tree).","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"version":{"type":"string"},"ids":{"type":"string","description":"Comma-separated node ids to scope the response."},"depth":{"type":"integer","minimum":1,"maximum":4},"geometry":{"type":"string","enum":["paths"]},"plugin_data":{"type":"string"},"branch_data":{"type":"boolean"}},"required":["file_key"]},"requiredScopes":["file_content:read"],"class":"read"},{"name":"files.nodes","description":"Fetch one or more nodes from a Figma file by id.","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"ids":{"type":"string","description":"Comma-separated list of node ids."},"version":{"type":"string"},"depth":{"type":"integer","minimum":1,"maximum":4},"geometry":{"type":"string","enum":["paths"]}},"required":["file_key","ids"]},"requiredScopes":["file_content:read"],"class":"read"},{"name":"files.images","description":"Render images for a set of node ids inside a file.","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"ids":{"type":"string","description":"Comma-separated list of node ids to render."},"scale":{"type":"number","minimum":0.01,"maximum":4},"format":{"type":"string","enum":["jpg","png","svg","pdf"]},"svg_outline_text":{"type":"boolean"},"svg_include_id":{"type":"boolean"},"svg_simplify_stroke":{"type":"boolean"},"use_absolute_bounds":{"type":"boolean"},"version":{"type":"string"}},"required":["file_key","ids"]},"requiredScopes":["file_content:read"],"class":"read"},{"name":"files.image_fills","description":"List image fills referenced by a Figma file (URLs to the source bitmaps).","parameters":{"type":"object","properties":{"file_key":{"type":"string"}},"required":["file_key"]},"requiredScopes":["file_content:read"],"class":"read"},{"name":"files.versions.list","description":"List historical versions saved for a Figma file.","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":50},"before":{"type":"integer"},"after":{"type":"integer"}},"required":["file_key"]},"requiredScopes":["file_versions:read"],"class":"read"},{"name":"files.components.list","description":"List the components defined inside a Figma file.","parameters":{"type":"object","properties":{"file_key":{"type":"string"}},"required":["file_key"]},"requiredScopes":["library_content:read"],"class":"read"},{"name":"files.component_sets.list","description":"List the component sets (variant groups) defined inside a Figma file.","parameters":{"type":"object","properties":{"file_key":{"type":"string"}},"required":["file_key"]},"requiredScopes":["library_content:read"],"class":"read"},{"name":"files.styles.list","description":"List the published styles defined inside a Figma file.","parameters":{"type":"object","properties":{"file_key":{"type":"string"}},"required":["file_key"]},"requiredScopes":["library_content:read"],"class":"read"},{"name":"files.dev_resources.list","description":"List dev-mode resource links attached to a Figma file.","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"node_ids":{"type":"string","description":"Comma-separated node ids to filter dev resources."}},"required":["file_key"]},"requiredScopes":["file_dev_resources:read"],"class":"read"},{"name":"files.comments.list","description":"List comments on a Figma file.","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"as_md":{"type":"boolean"}},"required":["file_key"]},"requiredScopes":["file_comments:read"],"class":"read"},{"name":"projects.metadata.get","description":"Get metadata for a Figma project visible to the authenticated user.","parameters":{"type":"object","properties":{"project_id":{"type":"string"}},"required":["project_id"]},"requiredScopes":["project_metadata:read"],"class":"read"},{"name":"teams.components.list","description":"List published components shared across a Figma team library.","parameters":{"type":"object","properties":{"team_id":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":1000},"after":{"type":"integer"},"before":{"type":"integer"}},"required":["team_id"]},"requiredScopes":["team_library_content:read"],"class":"read"},{"name":"teams.styles.list","description":"List published styles shared across a Figma team library.","parameters":{"type":"object","properties":{"team_id":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":1000},"after":{"type":"integer"},"before":{"type":"integer"}},"required":["team_id"]},"requiredScopes":["team_library_content:read"],"class":"read"},{"name":"files.comments.create","description":"Post a new comment on a Figma file (optionally pinned to a node or canvas coordinate).","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"message":{"type":"string"},"comment_id":{"type":"string","description":"Reply to an existing comment by id."},"client_meta":{"type":"object","description":"Either { x, y } canvas coordinates or { node_id, node_offset: { x, y } } to pin to a node."}},"required":["file_key","message"]},"requiredScopes":["file_comments:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.comments.delete","description":"Delete a comment on a Figma file.","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"comment_id":{"type":"string"}},"required":["file_key","comment_id"]},"requiredScopes":["file_comments:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.comments.reactions.add","description":"Add an emoji reaction to a Figma comment.","parameters":{"type":"object","properties":{"file_key":{"type":"string"},"comment_id":{"type":"string"},"emoji":{"type":"string","description":"Emoji shortcode, e.g. :heart:."}},"required":["file_key","comment_id","emoji"]},"requiredScopes":["file_comments:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.create","description":"Register a Figma v2 webhook for a team event stream (FILE_UPDATE, FILE_COMMENT, etc.).","parameters":{"type":"object","properties":{"event_type":{"type":"string","enum":["FILE_UPDATE","FILE_VERSION_UPDATE","FILE_DELETE","LIBRARY_PUBLISH","FILE_COMMENT","DEV_MODE_STATUS_UPDATE"]},"team_id":{"type":"string"},"endpoint":{"type":"string","format":"uri"},"passcode":{"type":"string"},"status":{"type":"string","enum":["ACTIVE","PAUSED"]},"description":{"type":"string"}},"required":["event_type","team_id","endpoint","passcode"]},"requiredScopes":["webhooks:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Delete a Figma v2 webhook by id.","parameters":{"type":"object","properties":{"webhook_id":{"type":"string"}},"required":["webhook_id"]},"requiredScopes":["webhooks:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"fillout-forms","displayName":"Fillout Forms","description":"Read Fillout form metadata and submissions: list forms, fetch a single response, page through submissions with status/date filters, and find a form by title.","auth":{"kind":"api-key","hint":"Fillout API key (Bearer) from Settings > Developer."},"category":"webhook","defaultConsistencyModel":"authoritative","capabilities":[{"name":"forms.list","description":"List every form on the workspace. Used to discover form IDs and titles.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"form.metadata","description":"Get a single form definition (questions, calculations, URL params).","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"find.form.by.title","description":"Find a Fillout form by partial or full title match. Mirrors the activepieces \"Find Form By Title\" action.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"Partial or full form title to search for."}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.form.responses","description":"List submissions for a form. Supports paging (limit/offset), date range, status (finished/in_progress/all), sort order, free-text search, and optional edit-link + preview-response inclusion.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"limit":{"type":"integer","description":"1-150; default 50."},"afterDate":{"type":"string","description":"ISO 8601 lower bound (inclusive)."},"beforeDate":{"type":"string","description":"ISO 8601 upper bound (inclusive)."},"offset":{"type":"integer","description":"Zero-based offset into the result set."},"status":{"type":"string","enum":["finished","in_progress","all"],"description":"Default: finished."},"includeEditLink":{"type":"boolean"},"includePreview":{"type":"boolean"},"sort":{"type":"string","enum":["asc","desc"]},"search":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.single.response","description":"Fetch a single submission by its ID under a given form.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"submissionId":{"type":"string"},"includeEditLink":{"type":"boolean"}},"required":["formId","submissionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"webhooks.create","description":"Register a webhook URL that Fillout will POST to for every new submission to the form. Backs the activepieces \"New Form Response\" trigger.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"url":{"type":"string","description":"HTTPS endpoint Fillout will POST submissions to."}},"required":["formId","url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Remove a previously-registered webhook subscription by its ID.","parameters":{"type":"object","properties":{"webhookId":{"type":"string"}},"required":["webhookId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"submission.create","description":"Create a form submission programmatically. `submissions` is an array of submission envelopes (questions[] + optional urlParameters[] / calculations[] / quiz). Mirrors POST /v1/api/forms/{formId}/submissions.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"submissions":{"type":"array","description":"Array of submission envelopes; each entry holds questions/answers and optional metadata.","items":{"type":"object"}}},"required":["formId","submissions"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"submission.delete","description":"Delete a single submission by id under a given form. Destructive; Fillout does not retain a soft-delete tombstone.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"submissionId":{"type":"string"}},"required":["formId","submissionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"findymail","displayName":"Findymail","description":"Find verified work email addresses by name and company domain, verify deliverability, and discover emails across a domain.","auth":{"kind":"api-key","hint":"API key from your Findymail dashboard. Sent as the Authorization: Bearer header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"email.find","description":"Find a person's verified work email from their full name and company domain. Consumes a credit when an email is found.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Full name of the person."},"domain":{"type":"string","description":"Company domain."}},"required":["name","domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"email.verify","description":"Verify the deliverability of an email address and return the email provider. Consumes a verification credit.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"email.find_by_domain","description":"Find email addresses associated with a company domain. Consumes credits per email returned.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Company domain to search."}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"credits.get","description":"Retrieve the remaining credit balance for the account.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"firebase","displayName":"Firebase","description":"Read and write Cloud Firestore documents via the Firebase REST API.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/datastore","https://www.googleapis.com/auth/firebase"],"clientIdEnv":"FIREBASE_OAUTH_CLIENT_ID","clientSecretEnv":"FIREBASE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent"}},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"documents.list","description":"List documents in a Firestore collection.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"collectionPath":{"type":"string","description":"Collection path under documents/, e.g. \"users\" or \"orders/123/items\"."},"pageSize":{"type":"integer","minimum":1,"maximum":1000},"pageToken":{"type":"string"}},"required":["projectId","collectionPath"]},"requiredScopes":["https://www.googleapis.com/auth/datastore"],"class":"read"},{"name":"documents.get","description":"Read a single Firestore document.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"documentPath":{"type":"string","description":"Document path under documents/, e.g. \"users/abc\"."}},"required":["projectId","documentPath"]},"requiredScopes":["https://www.googleapis.com/auth/datastore"],"class":"read"},{"name":"documents.runQuery","description":"Run a structured Firestore query (StructuredQuery RPC).","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"parent":{"type":"string","description":"Parent path under documents/, \"\" for root."},"structuredQuery":{"type":"object"}},"required":["projectId","structuredQuery"]},"requiredScopes":["https://www.googleapis.com/auth/datastore"],"class":"read"},{"name":"documents.create","description":"Create a Firestore document. `documentId` is optional; omit to let Firestore assign.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"collectionPath":{"type":"string"},"documentId":{"type":"string"},"fields":{"type":"object","description":"Firestore-typed field map, e.g. { name: { stringValue: \"Ada\" } }."}},"required":["projectId","collectionPath","fields"]},"requiredScopes":["https://www.googleapis.com/auth/datastore"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.patch","description":"Update or upsert a Firestore document via PATCH.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"documentPath":{"type":"string"},"fields":{"type":"object"},"updateMaskFieldPaths":{"type":"array","items":{"type":"string"},"description":"Field paths to update; omit to replace the whole document."}},"required":["projectId","documentPath","fields"]},"requiredScopes":["https://www.googleapis.com/auth/datastore"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"documents.delete","description":"Delete a Firestore document.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"documentPath":{"type":"string"}},"required":["projectId","documentPath"]},"requiredScopes":["https://www.googleapis.com/auth/datastore"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"auth.user.create","description":"Create a Firebase Auth user under the project. Body fields map to the Identity Toolkit Account resource (localId, email, password, displayName, phoneNumber, emailVerified, disabled). Idempotent on localId when supplied.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"localId":{"type":"string","description":"Optional caller-chosen uid; Identity Toolkit assigns one if omitted."},"email":{"type":"string"},"password":{"type":"string"},"displayName":{"type":"string"},"phoneNumber":{"type":"string"},"emailVerified":{"type":"boolean"},"disabled":{"type":"boolean"}},"required":["projectId"]},"requiredScopes":["https://www.googleapis.com/auth/firebase"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"auth.user.delete","description":"Delete a Firebase Auth user by localId via the Identity Toolkit accounts:delete RPC. Destructive; downstream Firestore documents are not cascaded.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"localId":{"type":"string","description":"Firebase Auth uid to delete."}},"required":["projectId","localId"]},"requiredScopes":["https://www.googleapis.com/auth/firebase"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"fireberry","displayName":"Fireberry","description":"Create, update, find, and delete Fireberry CRM records via the Fireberry REST API.","auth":{"kind":"api-key","hint":"Fireberry tokenid (sent as the tokenid request header)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.record","description":"Create a record in the specified Fireberry object type.","parameters":{"type":"object","properties":{"objectType":{"type":"string","description":"System name of the Fireberry object (e.g. account, contact, case)."},"data":{"type":"object","description":"Field values keyed by Fireberry system field names."}},"required":["objectType","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.record","description":"Update an existing record by id in the specified Fireberry object type.","parameters":{"type":"object","properties":{"objectType":{"type":"string","description":"System name of the Fireberry object (e.g. account, contact, case)."},"recordId":{"type":"string","description":"Fireberry record id (GUID) of the record to update."},"data":{"type":"object","description":"Field values keyed by Fireberry system field names."}},"required":["objectType","recordId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"delete.record","description":"Delete a record by id from the specified Fireberry object type. Destructive.","parameters":{"type":"object","properties":{"objectType":{"type":"string","description":"System name of the Fireberry object (e.g. account, contact, case)."},"recordId":{"type":"string","description":"Fireberry record id (GUID) of the record to delete."}},"required":["objectType","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"find.record","description":"Search Fireberry records using a query expression.","parameters":{"type":"object","properties":{"objectType":{"type":"string","description":"System name of the Fireberry object (e.g. account, contact, case)."},"query":{"type":"string","description":"Fireberry query expression (e.g. (firstname = 'John'))."},"fields":{"type":"string","description":"Comma separated list of fields to return."},"sortBy":{"type":"string","description":"System field name to sort results by."},"sortType":{"type":"string","description":"Sort direction, asc or desc."},"pageSize":{"type":"integer","description":"Number of records to return (max 50)."},"pageNumber":{"type":"integer","description":"Page number to retrieve (max 10)."}},"required":["objectType"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"firecrawl","displayName":"Firecrawl","description":"Extract structured data from websites using AI with natural language prompts.","auth":{"kind":"api-key","hint":"Firecrawl API key (sent as Bearer token)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"scrape","description":"Scrape a single URL and return its content in the requested formats.","parameters":{"type":"object","properties":{"url":{"type":"string"},"formats":{"type":"array","items":{"type":"string"}},"onlyMainContent":{"type":"boolean"},"timeout":{"type":"integer"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"extract","description":"Extract structured data from one or more URLs using a prompt and JSON schema.","parameters":{"type":"object","properties":{"urls":{"type":"array","items":{"type":"string"}},"prompt":{"type":"string"},"schema":{"type":"object"},"enableWebSearch":{"type":"boolean"}},"required":["urls"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"crawl","description":"Start a crawl job from a base URL, optionally bounded by a page limit and webhook.","parameters":{"type":"object","properties":{"url":{"type":"string"},"limit":{"type":"integer"},"includeSubdomains":{"type":"boolean"},"webhook":{"type":"object"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"crawl.results","description":"Fetch the current status and accumulated pages of a previously started crawl job.","parameters":{"type":"object","properties":{"crawlId":{"type":"string"}},"required":["crawlId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"map","description":"Return a map of URLs reachable from the given base URL.","parameters":{"type":"object","properties":{"url":{"type":"string"},"limit":{"type":"integer"},"includeSubdomains":{"type":"boolean"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"fireflies-ai","displayName":"Fireflies.ai","description":"Meeting assistant that automatically records, transcribes, and analyzes conversations via the Fireflies.ai GraphQL API.","auth":{"kind":"api-key","hint":"Fireflies.ai API key — sent as `Authorization: Bearer <key>` against https://api.fireflies.ai/graphql."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"meetings.findById","description":"Fetch a single Fireflies transcript by id. Pass `{ variables: { transcriptId } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"transcriptId":{"type":"string","description":"The Fireflies transcript / meeting id."}},"required":["transcriptId"]}},"required":["variables"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"meetings.findRecent","description":"List the most recent Fireflies transcripts. Pass `{ variables: { limit } }` where `limit` is the page size.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":50,"description":"Number of recent transcripts to return."}}}},"required":["variables"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"meetings.findByQuery","description":"Search Fireflies transcripts by title, host email, participant email, or date range. Pass `{ variables: { title?, hostEmail?, participantEmail?, fromDate?, toDate?, limit? } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"title":{"type":"string","description":"Substring match against the meeting title."},"hostEmail":{"type":"string","description":"Filter meetings by host email."},"participantEmail":{"type":"string","description":"Filter meetings by participant email."},"fromDate":{"type":"string","description":"Inclusive lower bound of the meeting date (ISO 8601)."},"toDate":{"type":"string","description":"Inclusive upper bound of the meeting date (ISO 8601)."},"limit":{"type":"integer","minimum":1,"maximum":50}}}},"required":["variables"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"audio.upload","description":"Upload an audio file by URL for Fireflies to transcribe. Pass `{ variables: { input: { url, title?, attendees? } } }`. Fireflies only accepts publicly fetchable URLs (mp3, mp4, wav, m4a, ogg).","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"input":{"type":"object","properties":{"url":{"type":"string","description":"Publicly accessible audio URL Fireflies will fetch."},"title":{"type":"string","description":"Optional title for the transcription."},"attendees":{"type":"array","description":"Optional attendees to associate with the meeting.","items":{"type":"object","properties":{"displayName":{"type":"string"},"email":{"type":"string"},"phoneNumber":{"type":"string"}}}},"webhook":{"type":"string","description":"Optional webhook URL Fireflies will call when transcription completes."},"saveVideo":{"type":"boolean"}},"required":["url"]}},"required":["input"]}},"required":["variables"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transcript.delete","description":"Delete a Fireflies transcript (meeting recording) by id. Pass `{ variables: { transcriptId } }`. Irreversible.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"transcriptId":{"type":"string","description":"The Fireflies transcript id to delete."}},"required":["transcriptId"]}},"required":["variables"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"user.getDetails","description":"Return Fireflies user details. Pass `{ variables: { userId } }` to fetch a specific user, or `{ variables: {} }` for the authenticated viewer.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"userId":{"type":"string","description":"The Fireflies user id; omit to return the authenticated viewer."}}}},"required":["variables"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"flipando","displayName":"Flipando AI","description":"Run configured Flipando AI apps over inputs, poll their async task results, list workspace apps, and scaffold new apps from a description.","auth":{"kind":"api-key","hint":"Flipando workspace API key (Settings → API). Sent as a bearer token on every request."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"apps.list","description":"List every Flipando app the API key has access to in the current workspace, including the inputs each app expects.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"apps.run","description":"Run a configured Flipando app against an input payload. Returns a task handle the caller polls with tasks.get. Each invocation is billed and side-effecting.","parameters":{"type":"object","properties":{"application_id":{"type":"number","description":"Numeric ID of the Flipando app to execute (from apps.list)."},"inputs_data":{"type":"object","description":"Key-value pairs matching the app input schema. Keys must match the variable names declared on the app in the Flipando UI."},"file":{"type":"string","description":"Optional base64-encoded document payload for apps that accept file inputs (PDF, DOCX, image, etc.). Omit for apps with no file input."},"file_description":{"type":"string","description":"Required when `file` is provided. Short caption describing the uploaded document."}},"required":["application_id","inputs_data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"apps.generate","description":"Scaffold a brand-new Flipando app from a high-level description. Creates a workspace-visible app the user can then refine in the UI. Billed and side-effecting.","parameters":{"type":"object","properties":{"inputs_data":{"type":"object","description":"Key-value description of the app the caller wants Flipando to generate — typically { name, description, inputs, output_format }."},"is_new_app_private":{"type":"boolean","description":"When true, the generated app is created as private to the workspace. When false, it is shared with the public Flipando directory."}},"required":["inputs_data","is_new_app_private"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"tasks.cancel","description":"Cancel an in-flight Flipando task (the async handle returned by apps.run or apps.generate). Reaches the task even after the worker has started; idempotent — cancelling an already-completed or already-cancelled task returns the terminal state.","parameters":{"type":"object","properties":{"task_id":{"type":"string","description":"Task ID returned by apps.run or apps.generate."}},"required":["task_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.get","description":"Poll a Flipando task by ID and return its status plus the final output once the underlying app run has finished.","parameters":{"type":"object","properties":{"task_id":{"type":"string","description":"Task ID returned by apps.run or apps.generate."}},"required":["task_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"flow-parser","displayName":"FlowParser","description":"Upload, process, and manage documents programmatically with FlowParser.","auth":{"kind":"api-key","hint":"FlowParser API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"documents.upload","description":"Upload a document for processing.","parameters":{"type":"object","properties":{"filename":{"type":"string"},"mimeType":{"type":"string"},"content":{"type":"string"}},"required":["filename","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.get","description":"Retrieve a parsed document by ID.","parameters":{"type":"object","properties":{"documentId":{"type":"string"}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.list","description":"List all documents.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.delete","description":"Delete a document.","parameters":{"type":"object","properties":{"documentId":{"type":"string"}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"flows.run","description":"Trigger a FlowParser parsing flow against an uploaded document, returning the async run handle. Each invocation is billed and side-effecting; FlowParser dedupes on (flowId, documentId, idempotencyKey).","parameters":{"type":"object","properties":{"flowId":{"type":"string","description":"FlowParser flow id to execute."},"documentId":{"type":"string","description":"Document id (from documents.upload) the flow should parse."}},"required":["flowId","documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"flowise","displayName":"Flowise","description":"Invoke a Flowise chatflow / prediction endpoint on a self-hosted Flowise instance.","auth":{"kind":"api-key","hint":"Flowise API key (sent as Bearer token)."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"prediction.invoke","description":"Run a Flowise chatflow prediction with a question, optional chat history, and optional overrideConfig.","parameters":{"type":"object","properties":{"chatflowId":{"type":"string","description":"Target chatflow id."},"question":{"type":"string","description":"User input / question to run through the chatflow."},"history":{"type":"array","description":"Prior chat turns to seed the prediction with.","items":{"type":"object"}},"overrideConfig":{"type":"object","description":"Per-call overrides forwarded to the chatflow runtime."}},"required":["chatflowId","question"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chatflows.list","description":"List chatflows configured on the Flowise instance.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"chatflows.get","description":"Fetch a single chatflow definition by id.","parameters":{"type":"object","properties":{"chatflowId":{"type":"string"}},"required":["chatflowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"flowlu","displayName":"Flowlu","description":"Manage Flowlu CRM contacts, organizations, opportunities, and tasks in the business management platform.","auth":{"kind":"api-key","hint":"Flowlu API key from Portal Settings → API. The connection must also store the per-account baseUrl (e.g. https://youraccount.flowlu.com/api/v1)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contact.create","description":"Create a contact (individual account) in Flowlu CRM.","parameters":{"type":"object","properties":{"first_name":{"type":"string"},"middle_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"web":{"type":"string"},"description":{"type":"string"},"active":{"type":"integer","enum":[0,1]}},"required":["first_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contact.update","description":"Update an existing contact by id.","parameters":{"type":"object","properties":{"id":{"type":"integer"},"first_name":{"type":"string"},"middle_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"web":{"type":"string"},"description":{"type":"string"},"active":{"type":"integer","enum":[0,1]}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contact.delete","description":"Delete a contact by id.","parameters":{"type":"object","properties":{"id":{"type":"integer"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"organization.create","description":"Create an organization (company account) in Flowlu CRM.","parameters":{"type":"object","properties":{"name":{"type":"string"},"name_legal_full":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"web":{"type":"string"},"description":{"type":"string"},"active":{"type":"integer","enum":[0,1]}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunity.create","description":"Create an opportunity (CRM lead) in Flowlu.","parameters":{"type":"object","properties":{"name":{"type":"string"},"customer_id":{"type":"integer"},"budget":{"type":"number"},"pipeline_id":{"type":"integer"},"pipeline_stage_id":{"type":"integer"},"source_id":{"type":"integer"},"description":{"type":"string"},"responsible_id":{"type":"integer"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunity.update","description":"Update an existing opportunity by id.","parameters":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"customer_id":{"type":"integer"},"budget":{"type":"number"},"pipeline_id":{"type":"integer"},"pipeline_stage_id":{"type":"integer"},"source_id":{"type":"integer"},"description":{"type":"string"},"responsible_id":{"type":"integer"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"opportunity.delete","description":"Delete an opportunity by id.","parameters":{"type":"object","properties":{"id":{"type":"integer"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"task.create","description":"Create a task in Flowlu.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"deadline":{"type":"string"},"priority":{"type":"integer"},"responsible_id":{"type":"integer"},"owner_id":{"type":"integer"},"workflow_id":{"type":"integer"},"workflow_stage_id":{"type":"integer"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"task.update","description":"Update an existing task by id.","parameters":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"description":{"type":"string"},"deadline":{"type":"string"},"priority":{"type":"integer"},"responsible_id":{"type":"integer"},"owner_id":{"type":"integer"},"workflow_id":{"type":"integer"},"workflow_stage_id":{"type":"integer"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"task.delete","description":"Delete a task by id.","parameters":{"type":"object","properties":{"id":{"type":"integer"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"task.get","description":"Read a single task by id.","parameters":{"type":"object","properties":{"id":{"type":"integer"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"folk","displayName":"Folk","description":"Folk CRM: manage companies and people for relationship-driven sales workflows.","auth":{"kind":"api-key","hint":"Folk personal API key (sent as a Bearer token)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.company","description":"Create a company record in Folk.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"The name of the company."},"description":{"type":"string","description":"A short description of the company."},"industry":{"type":"string","description":"The industry the company operates in."},"addresses":{"type":"array","items":{"type":"object"},"description":"Physical addresses for the company. The first address is primary."},"emails":{"type":"array","items":{"type":"object"},"description":"Email addresses for the company. The first email is primary."},"phones":{"type":"array","items":{"type":"object"},"description":"Phone numbers for the company. The first phone is primary."},"urls":{"type":"array","items":{"type":"object"},"description":"Website URLs for the company. The first URL is primary."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.company","description":"Update an existing company record in Folk by id.","parameters":{"type":"object","properties":{"companyId":{"type":"string","description":"Folk company id."},"name":{"type":"string","description":"The name of the company."},"description":{"type":"string","description":"A short description of the company."},"industry":{"type":"string","description":"The industry the company operates in."},"addresses":{"type":"array","items":{"type":"object"}},"emails":{"type":"array","items":{"type":"object"}},"phones":{"type":"array","items":{"type":"object"}},"urls":{"type":"array","items":{"type":"object"}}},"required":["companyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.person","description":"Create a person record in Folk.","parameters":{"type":"object","properties":{"firstName":{"type":"string","description":"The first name of the person."},"lastName":{"type":"string","description":"The last name of the person."},"fullName":{"type":"string","description":"The full name of the person (alternative to first/last)."},"birthday":{"type":"string","description":"The birthday in YYYY-MM-DD format."},"jobTitle":{"type":"string","description":"The job title of the person."},"emails":{"type":"array","items":{"type":"object"}},"phones":{"type":"array","items":{"type":"object"}},"urls":{"type":"array","items":{"type":"object"}},"addresses":{"type":"array","items":{"type":"object"}},"companyNames":{"type":"array","items":{"type":"string"},"description":"The names of companies to associate with the person. The first company is primary."}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.person","description":"Update an existing person record in Folk by id.","parameters":{"type":"object","properties":{"personId":{"type":"string","description":"Folk person id."},"firstName":{"type":"string"},"lastName":{"type":"string"},"fullName":{"type":"string"},"birthday":{"type":"string","description":"YYYY-MM-DD."},"jobTitle":{"type":"string"},"emails":{"type":"array","items":{"type":"object"}},"phones":{"type":"array","items":{"type":"object"}},"urls":{"type":"array","items":{"type":"object"}},"addresses":{"type":"array","items":{"type":"object"}},"companyNames":{"type":"array","items":{"type":"string"}}},"required":["personId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"find.company","description":"Search Folk companies by name or other filters.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Enter company name or email to search for."},"combinator":{"type":"string","description":"The logical operator to combine multiple filters (and, or)."},"nameFilter":{"type":"string","description":"Filter by company name (contains)."},"emailFilter":{"type":"string","description":"Filter by email address (contains)."},"limit":{"type":"integer","description":"The number of items to return (1-100)."},"cursor":{"type":"string","description":"A cursor for pagination. Use nextLink from a previous response."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.company","description":"Read a single Folk company by id.","parameters":{"type":"object","properties":{"companyId":{"type":"string","description":"Folk company id."}},"required":["companyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"find.person","description":"Search Folk people by name, email, or other filters.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Enter person name or email to search for."},"combinator":{"type":"string","description":"The logical operator to combine multiple filters (and, or)."},"nameFilter":{"type":"string","description":"Filter by person name (contains)."},"emailFilter":{"type":"string","description":"Filter by email address (contains)."},"limit":{"type":"integer","description":"The number of items to return (1-100)."},"cursor":{"type":"string","description":"A cursor for pagination. Use nextLink from a previous response."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.person","description":"Read a single Folk person by id.","parameters":{"type":"object","properties":{"personId":{"type":"string","description":"Folk person id."}},"required":["personId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"delete.person","description":"Delete a Folk person record by id. Irreversible; Folk returns 204 on success and 404 if the person was already removed, both treated as a committed terminal state by callers that rely on native idempotency.","parameters":{"type":"object","properties":{"personId":{"type":"string","description":"Folk person id."}},"required":["personId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"foreplay-co","displayName":"Foreplay","description":"Search the Foreplay creative ad library, fetch ad and brand detail, and manage swipe files and Spyder-tracked brands.","auth":{"kind":"api-key","hint":"Foreplay.co API key from Settings → API. Sent in the Authorization header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"discovery.search","description":"Search the global Foreplay Discovery ad library by query, network, niche, language, and other facets.","parameters":{"type":"object","properties":{"query":{"type":"string"},"publisher":{"type":"string"},"niches":{"type":"string"},"languages":{"type":"string"},"formats":{"type":"string"},"startDate":{"type":"string"},"endDate":{"type":"string"},"orderBy":{"type":"string"},"limit":{"type":"integer"},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"ads.get","description":"Fetch the full record for a single ad by its Foreplay ad id.","parameters":{"type":"object","properties":{"adId":{"type":"string"}},"required":["adId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"brands.search","description":"Search brands in the Foreplay Discovery library by name or domain.","parameters":{"type":"object","properties":{"query":{"type":"string"},"limit":{"type":"integer"},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"brands.get","description":"Fetch a single brand record by its Foreplay brand id.","parameters":{"type":"object","properties":{"brandId":{"type":"string"}},"required":["brandId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"brands.ads.list","description":"List ads from a single brand, optionally paged.","parameters":{"type":"object","properties":{"brandId":{"type":"string"},"publisher":{"type":"string"},"limit":{"type":"integer"},"cursor":{"type":"string"}},"required":["brandId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"swipeFiles.list","description":"List the authenticated user's swipe files (boards).","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"swipeFiles.get","description":"Fetch a single swipe file (board) by id.","parameters":{"type":"object","properties":{"swipeFileId":{"type":"string"}},"required":["swipeFileId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"swipeFiles.ads.list","description":"List ads saved inside a given swipe file.","parameters":{"type":"object","properties":{"swipeFileId":{"type":"string"},"limit":{"type":"integer"},"cursor":{"type":"string"}},"required":["swipeFileId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"swipeFiles.create","description":"Create a new swipe file (board).","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"swipeFiles.ads.add","description":"Save an ad into a swipe file.","parameters":{"type":"object","properties":{"swipeFileId":{"type":"string"},"adId":{"type":"string"},"note":{"type":"string"}},"required":["swipeFileId","adId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"swipeFiles.ads.remove","description":"Remove an ad from a swipe file.","parameters":{"type":"object","properties":{"swipeFileId":{"type":"string"},"adId":{"type":"string"}},"required":["swipeFileId","adId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"spyder.brands.list","description":"List the brands the workspace is tracking via Spyder.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"spyder.brands.add","description":"Start tracking a brand in Spyder by Foreplay brand id.","parameters":{"type":"object","properties":{"brandId":{"type":"string"}},"required":["brandId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"spyder.brands.remove","description":"Stop tracking a brand in Spyder.","parameters":{"type":"object","properties":{"brandId":{"type":"string"}},"required":["brandId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"spyder.ads.list","description":"List newly captured ads across all Spyder-tracked brands.","parameters":{"type":"object","properties":{"brandId":{"type":"string"},"startDate":{"type":"string"},"endDate":{"type":"string"},"limit":{"type":"integer"},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"formbricks","displayName":"Formbricks","description":"Read and mutate Formbricks surveys, responses, and contacts on the configured environment.","auth":{"kind":"api-key","hint":"Formbricks environment API key. Configure source metadata.appUrl with your instance origin."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"surveys.list","description":"List surveys in the environment the API key belongs to.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"skip":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"surveys.get","description":"Fetch a single survey by id.","parameters":{"type":"object","properties":{"surveyId":{"type":"string"}},"required":["surveyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"responses.list","description":"List responses, optionally filtered by survey id.","parameters":{"type":"object","properties":{"surveyId":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"skip":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"responses.get","description":"Fetch a single response by id.","parameters":{"type":"object","properties":{"responseId":{"type":"string"}},"required":["responseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.list","description":"List contacts in the environment the API key belongs to.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"skip":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.get","description":"Fetch a single contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create a contact with the supplied attributes payload.","parameters":{"type":"object","properties":{"attributes":{"type":"object"}},"required":["attributes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update a contact identified by id with the supplied attributes payload.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"attributes":{"type":"object"}},"required":["contactId","attributes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.delete","description":"Delete a contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"responses.delete","description":"Delete a survey response by id.","parameters":{"type":"object","properties":{"responseId":{"type":"string"}},"required":["responseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"responses.create","description":"Submit a survey response. The supplied data map keys must match the question ids on the target survey; the optional `finished`, `contactId`, and `language` fields can be folded into `data` by callers that need them.","parameters":{"type":"object","properties":{"surveyId":{"type":"string"},"data":{"type":"object","description":"Map of questionId → response value."}},"required":["surveyId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"surveys.create","description":"Create a survey in the environment the API key belongs to. The `questions` array must follow the Formbricks Management API schema for the chosen question types.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Survey display name."},"type":{"type":"string","description":"Survey type, e.g. \"link\" or \"app\"."},"questions":{"type":"array","items":{"type":"object"},"description":"Ordered question definitions for the survey."}},"required":["name","type","questions"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"formstack","displayName":"Formstack","description":"Create Formstack submissions and look up forms or submissions through the Formstack v2 REST API.","auth":{"kind":"oauth2","authorizationUrl":"https://www.formstack.com/api/v2/oauth2/authorize","tokenUrl":"https://www.formstack.com/api/v2/oauth2/request_token.json","scopes":["read","write"],"clientIdEnv":"FORMSTACK_OAUTH_CLIENT_ID","clientSecretEnv":"FORMSTACK_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"forms.find","description":"List Formstack forms, optionally filtered by a case-insensitive name substring (powers \"find form by name or id\").","parameters":{"type":"object","properties":{"folder":{"type":"string","description":"Folder id to scope the list to, if the workspace organises forms in folders."},"folders":{"type":"boolean","description":"When true, response includes the folder tree alongside forms."},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":["read"],"class":"read"},{"name":"forms.get","description":"Fetch a single Formstack form definition by id, including the field list needed to build a submission payload.","parameters":{"type":"object","properties":{"formId":{"type":"string","description":"Formstack form id."}},"required":["formId"]},"requiredScopes":["read"],"class":"read"},{"name":"submissions.create","description":"Create a new submission against a form. `fields` is keyed by Formstack field id; non-field metadata (read_only, payment_status, etc.) is passed at the top level.","parameters":{"type":"object","properties":{"formId":{"type":"string","description":"Form to submit to."},"fields":{"type":"object","description":"Map of Formstack field id → value (string, number, or field-specific object)."},"timestamp":{"type":"string","description":"Optional ISO-8601 timestamp; defaults to server-now when omitted."},"user_agent":{"type":"string"},"remote_addr":{"type":"string","description":"Originating IP recorded with the submission."},"payment_status":{"type":"string"},"read":{"type":"boolean","description":"Mark the submission read on create."}},"required":["formId","fields"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"submissions.get","description":"Fetch a submission by id with all field values resolved into their human-readable form (powers \"get submission details\").","parameters":{"type":"object","properties":{"submissionId":{"type":"string","description":"Formstack submission id."},"encryption_password":{"type":"string","description":"Required when the form uses field-level encryption — only then are encrypted fields decrypted in the response."}},"required":["submissionId"]},"requiredScopes":["read"],"class":"read"},{"name":"submissions.delete","description":"Delete a Formstack submission by id. Destructive; not idempotent on the same submission id after success.","parameters":{"type":"object","properties":{"submissionId":{"type":"string","description":"Formstack submission id to delete."}},"required":["submissionId"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.create","description":"Create a new Formstack form. `name` is required; `folder` and `language` are optional placement/locale hints. Fields can be added in follow-up calls via the field-management endpoints.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Form display name."},"folder":{"type":"string","description":"Folder id to place the form in."},"language":{"type":"string","description":"ISO 639-1 language code for built-in form copy (defaults to account default)."}},"required":["name"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"submissions.search","description":"Search submissions of a form by an indexed field value (powers \"find submission by field value\"). Returns submissions whose `fieldId` equals `value` within the form.","parameters":{"type":"object","properties":{"formId":{"type":"string","description":"Form id to search within."},"fieldId":{"type":"string","description":"Formstack field id that should equal `value`."},"value":{"type":"string","description":"Value to match against the indexed field — Formstack supports exact match for searchable field types."},"min_time":{"type":"string","description":"Earliest submission timestamp (UTC, \"YYYY-MM-DD HH:MM:SS\")."},"max_time":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100},"sort":{"type":"string","enum":["ASC","DESC"]},"data":{"type":"boolean","description":"When true, response includes full submission `data` blocks (otherwise only ids/timestamps)."},"expand_data":{"type":"boolean"}},"required":["formId","fieldId","value"]},"requiredScopes":["read"],"class":"read"}]},{"kind":"fountain","displayName":"Fountain","description":"Manage Fountain applicants, openings, stages, and interview sessions across the hiring + onboarding workflow.","auth":{"kind":"api-key","hint":"Fountain API key from Profile > Manage API Keys or Settings > Integrations & API Keys. Sent as X-ACCESS-TOKEN."},"category":"calendar","defaultConsistencyModel":"authoritative","capabilities":[{"name":"applicants.list","description":"List applicants with optional filters by funnel (opening), location, stage, labels, phone, and pagination cursor.","parameters":{"type":"object","properties":{"funnel_id":{"type":"string"},"location_id":{"type":"string"},"stage_id":{"type":"string"},"stage":{"type":"string"},"labels":{"type":"string"},"phone":{"type":"string"},"exclude_temporary":{"type":"boolean"},"per_page":{"type":"integer"},"cursor":{"type":"string"},"include_subaccounts":{"type":"boolean"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"applicants.get","description":"Fetch a single applicant by id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"applicants.create","description":"Create a Fountain applicant on an opening (funnel).","parameters":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"phone_number":{"type":"string"},"funnel_id":{"type":"string"},"check_if_applicant_is_duplicate":{"type":"boolean"},"data":{"type":"object"},"secure_data":{"type":"object"}},"required":["name","email","phone_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"applicants.update","description":"Update an existing applicant: custom data, secure data, and rejection reason.","parameters":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"phone_number":{"type":"string"},"data":{"type":"object"},"secure_data":{"type":"object"},"rejection_reason":{"type":"string"},"labels":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"applicants.delete","description":"Delete an applicant by id. Destructive; not idempotent on the same id after success.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"applicants.advance","description":"Advance an applicant to the next stage in their funnel. Optional `stage_id` jumps to a specific stage; omit it to move to the immediate next stage.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Applicant id."},"stage_id":{"type":"string","description":"Optional target stage id; defaults to the next stage in the funnel order."},"skip_automated_actions":{"type":"boolean","description":"When true, suppress any automated emails/SMS/webhooks wired to the destination stage."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"applicants.reject","description":"Reject an applicant. `rejection_reason` is the human-readable reason recorded on the applicant timeline; `send_rejection_email` triggers the funnel-configured rejection notification.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Applicant id."},"rejection_reason":{"type":"string","description":"Rejection reason recorded on the applicant."},"send_rejection_email":{"type":"boolean"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"applicants.interviewSessions","description":"List interview sessions scheduled for an applicant.","parameters":{"type":"object","properties":{"id":{"type":"string"},"per_page":{"type":"integer"},"cursor":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"openings.list","description":"List openings (funnels), with filters for active, private, owner, and hiring/sourcing funnel flags.","parameters":{"type":"object","properties":{"active":{"type":"boolean"},"is_hiring_funnel":{"type":"boolean"},"is_sourcing_funnel":{"type":"boolean"},"is_private":{"type":"boolean"},"owner_id":{"type":"string"},"per_page":{"type":"integer"},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"openings.get","description":"Fetch a single opening (funnel) by id.","parameters":{"type":"object","properties":{"funnel_id":{"type":"string"}},"required":["funnel_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"stages.list","description":"List stages for a given opening (funnel).","parameters":{"type":"object","properties":{"funnel_id":{"type":"string"},"per_page":{"type":"integer"},"cursor":{"type":"string"}},"required":["funnel_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"stages.get","description":"Fetch a single stage on an opening by stage id.","parameters":{"type":"object","properties":{"funnel_id":{"type":"string"},"stage_id":{"type":"string"}},"required":["funnel_id","stage_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"fragment","displayName":"Fragment","description":"Create, read, update, list, and delete tasks in Fragment (api.onfragment.com).","auth":{"kind":"api-key","hint":"Fragment API token from app.onfragment.com/settings/account/developers (sent as Bearer)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tasks.list","description":"List tasks, optionally filtered by status, assignee, and capped by limit.","parameters":{"type":"object","properties":{"status":{"type":"string","description":"Filter tasks by status (e.g. 'open', 'completed', 'cancelled')."},"assignee_uid":{"type":"string","description":"Filter tasks by assignee email or ID."},"limit":{"type":"integer","description":"Maximum number of tasks to return (default 50)."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.get","description":"Fetch a single task by its Fragment task UID.","parameters":{"type":"object","properties":{"task_uid":{"type":"string","description":"Unique identifier of the task."}},"required":["task_uid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.create","description":"Create a new task in Fragment.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"The title of the task."},"url":{"type":"string","description":"A URL associated with the task (e.g., link to a ticket or resource)."},"due_at":{"type":"string","description":"When the task is due (ISO-8601 timestamp)."},"assignee_email":{"type":"string","description":"Email of the person to assign this task to."},"tags":{"type":"array","items":{"type":"string"},"description":"Tags to categorize the task."},"fields":{"type":"object","description":"Additional custom fields for the task."}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update an existing Fragment task by UID.","parameters":{"type":"object","properties":{"task_uid":{"type":"string","description":"Unique identifier of the task to update."},"due_at":{"type":"string","description":"New due date (ISO-8601 timestamp)."},"status":{"type":"string","description":"New status (e.g. 'open', 'completed', 'cancelled')."},"assignee_email":{"type":"string","description":"Email of the person to assign this task to."},"tags":{"type":"array","items":{"type":"string"},"description":"Replacement tag list."},"fields":{"type":"object","description":"Replacement custom-field map (merged on the server)."}},"required":["task_uid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.delete","description":"Delete a Fragment task by UID.","parameters":{"type":"object","properties":{"task_uid":{"type":"string","description":"Unique identifier of the task to delete."}},"required":["task_uid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"frame","displayName":"Frame.io","description":"Navigate Frame.io accounts, teams, and projects; manage assets, comments, and review links on the collaborative video-review platform.","auth":{"kind":"api-key","hint":"Frame.io developer token (https://developer.frame.io). Sent as `Authorization: Bearer <token>`."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"accounts.list","description":"List accounts the authenticated user can access.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"teams.list","description":"List teams within an account.","parameters":{"type":"object","properties":{"accountId":{"type":"string"}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.list","description":"List projects within a team.","parameters":{"type":"object","properties":{"teamId":{"type":"string"}},"required":["teamId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.get","description":"Fetch a single project by id.","parameters":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"assets.list","description":"List child assets within a folder (or project root folder).","parameters":{"type":"object","properties":{"folderId":{"type":"string"},"page":{"type":"integer"},"pageSize":{"type":"integer"}},"required":["folderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"assets.get","description":"Fetch a single asset (file, folder, or version-stack) by id.","parameters":{"type":"object","properties":{"assetId":{"type":"string"}},"required":["assetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"assets.create","description":"Create an asset (folder or file placeholder) under a parent folder. File uploads then PUT to the returned upload_urls.","parameters":{"type":"object","properties":{"parentAssetId":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["file","folder"]},"filetype":{"type":"string"},"filesize":{"type":"integer"},"description":{"type":"string"},"properties":{"type":"object"}},"required":["parentAssetId","name","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assets.update","description":"Update an asset (rename, move, edit description, etc.).","parameters":{"type":"object","properties":{"assetId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"properties":{"type":"object"}},"required":["assetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"assets.delete","description":"Delete an asset by id.","parameters":{"type":"object","properties":{"assetId":{"type":"string"}},"required":["assetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.list","description":"List comments on an asset.","parameters":{"type":"object","properties":{"assetId":{"type":"string"},"page":{"type":"integer"},"pageSize":{"type":"integer"}},"required":["assetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"comments.create","description":"Post a comment on an asset. Use `timestamp` (seconds) or `annotation` payloads for time-coded video review notes.","parameters":{"type":"object","properties":{"assetId":{"type":"string"},"text":{"type":"string"},"timestamp":{"type":"number"},"annotation":{"type":"string"},"pitched":{"type":"boolean"}},"required":["assetId","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.update","description":"Edit a comment by id.","parameters":{"type":"object","properties":{"commentId":{"type":"string"},"text":{"type":"string"},"completed":{"type":"boolean"}},"required":["commentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"reviewLinks.list","description":"List review links for a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reviewLinks.create","description":"Create a shareable review link inside a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"name":{"type":"string"},"password":{"type":"string"},"allowApproval":{"type":"boolean"},"enableDownloading":{"type":"boolean"},"expiresAt":{"type":"string"}},"required":["projectId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"free-agent","displayName":"FreeAgent","description":"Accounting and invoicing software for small businesses — contacts, projects, tasks, invoices, and users.","auth":{"kind":"oauth2","authorizationUrl":"https://api.freeagent.com/v2/approve_app","tokenUrl":"https://api.freeagent.com/v2/token_endpoint","scopes":[],"clientIdEnv":"FREE_AGENT_OAUTH_CLIENT_ID","clientSecretEnv":"FREE_AGENT_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.search","description":"List or search FreeAgent contacts.","parameters":{"type":"object","properties":{"view":{"type":"string","description":"Filter by view (e.g. \"active\", \"clients\", \"suppliers\", \"all\")."},"sort":{"type":"string","description":"Sort field (e.g. \"name\", \"updated_at\", \"-created_at\")."},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.get","description":"Get a single FreeAgent contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create a FreeAgent contact (client or supplier).","parameters":{"type":"object","properties":{"contact":{"type":"object","description":"FreeAgent contact attributes (organisation_name, first_name, last_name, email, address1, town, postcode, country, etc.)."}},"required":["contact"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update fields on an existing FreeAgent contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"contact":{"type":"object"}},"required":["contactId","contact"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.delete","description":"Delete a FreeAgent contact by id. Destructive; not idempotent after success on the same id.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"FreeAgent contact id."}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.search","description":"List or filter FreeAgent projects.","parameters":{"type":"object","properties":{"view":{"type":"string","description":"Filter by view (e.g. \"active\", \"completed\", \"all\")."},"contact":{"type":"string","description":"Restrict to a contact URL."},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.search","description":"List tasks, optionally scoped to a project.","parameters":{"type":"object","properties":{"project":{"type":"string","description":"Project URL to restrict tasks to."},"view":{"type":"string","description":"Task view filter (e.g. \"active\", \"completed\", \"all\")."},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.get","description":"Get a single FreeAgent task by id.","parameters":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.create","description":"Create a task under a FreeAgent project (mirrors the activepieces \"Free Agent Create Task\" action).","parameters":{"type":"object","properties":{"task":{"type":"object","description":"Task attributes (project URL, name, is_billable, billing_rate, billing_period, status, etc.)."}},"required":["task"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update an existing FreeAgent task.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"task":{"type":"object"}},"required":["taskId","task"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"invoices.search","description":"List or filter FreeAgent invoices (used to back the new-invoice polling trigger).","parameters":{"type":"object","properties":{"view":{"type":"string","description":"Invoice view (e.g. \"open\", \"draft\", \"scheduled_to_email\", \"all\")."},"contact":{"type":"string","description":"Contact URL filter."},"project":{"type":"string","description":"Project URL filter."},"updated_since":{"type":"string","description":"ISO-8601 timestamp; returns invoices updated on or after this moment."},"sort":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"invoices.get","description":"Get a single FreeAgent invoice by id.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"invoices.create","description":"Create a FreeAgent invoice. `invoice` accepts the FreeAgent invoice payload (contact URL, dated_on, payment_terms_in_days, invoice_items, etc.).","parameters":{"type":"object","properties":{"invoice":{"type":"object","description":"FreeAgent invoice attributes — `contact` URL is required; `dated_on`, `payment_terms_in_days`, `invoice_items`, `currency`, and `comments` are typical fields."}},"required":["invoice"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.send","description":"Send a FreeAgent invoice to the contact via email. Maps to the `send_email` action on an existing invoice; `email` overrides the contact default recipient list when provided.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string","description":"FreeAgent invoice id to send."},"email":{"type":"object","description":"Email override — accepts `recipient`, `subject`, `body`, `send_me_a_copy` per the FreeAgent send_email schema."}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.search","description":"List FreeAgent users on the company (backs the new-user polling trigger).","parameters":{"type":"object","properties":{"view":{"type":"string","description":"User view filter (e.g. \"all\", \"active\")."},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.get","description":"Get a single FreeAgent user by id.","parameters":{"type":"object","properties":{"userId":{"type":"string"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"freshdesk","displayName":"Freshdesk","description":"Search, read, create, and update Freshdesk support tickets, contacts, and conversations.","auth":{"kind":"oauth2","authorizationUrl":"https://{subdomain}.freshdesk.com/oauth/authorize","tokenUrl":"https://{subdomain}.freshdesk.com/oauth/token","scopes":["freshdesk.api"],"clientIdEnv":"FRESHDESK_OAUTH_CLIENT_ID","clientSecretEnv":"FRESHDESK_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tickets.search","description":"Search Freshdesk tickets using the documented filter query DSL (e.g. \"status:2 AND priority:3\"). Wrap the expression in double quotes per the Freshdesk API.","parameters":{"type":"object","properties":{"query":{"type":"string"},"page":{"type":"integer","minimum":1}},"required":["query"]},"requiredScopes":["freshdesk.api"],"class":"read"},{"name":"tickets.list","description":"List Freshdesk tickets with optional filter (new_and_my_open, watching, spam, deleted) and pagination.","parameters":{"type":"object","properties":{"filter":{"type":"string","enum":["new_and_my_open","watching","spam","deleted"]},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100},"updated_since":{"type":"string"}}},"requiredScopes":["freshdesk.api"],"class":"read"},{"name":"tickets.get","description":"Read a single Freshdesk ticket by id, with optional `include` expansions (conversations, requester, company, stats).","parameters":{"type":"object","properties":{"ticketId":{"type":"string"},"include":{"type":"string"}},"required":["ticketId"]},"requiredScopes":["freshdesk.api"],"class":"read"},{"name":"tickets.create","description":"Create a Freshdesk ticket. Pass the full Freshdesk ticket payload as the top-level args (subject, description, email/requester_id, priority, status, ...).","parameters":{"type":"object","properties":{"subject":{"type":"string"},"description":{"type":"string"},"email":{"type":"string"},"requester_id":{"type":"integer"},"phone":{"type":"string"},"priority":{"type":"integer","minimum":1,"maximum":4},"status":{"type":"integer","minimum":2,"maximum":5},"source":{"type":"integer"},"type":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"cc_emails":{"type":"array","items":{"type":"string"}},"custom_fields":{"type":"object"},"group_id":{"type":"integer"},"responder_id":{"type":"integer"}},"required":["subject","description","status","priority"]},"requiredScopes":["freshdesk.api"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.update","description":"Update a Freshdesk ticket (status, priority, assignee, tags, custom_fields, ...). Pass `ticketId` plus any updatable fields.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"},"subject":{"type":"string"},"priority":{"type":"integer","minimum":1,"maximum":4},"status":{"type":"integer","minimum":2,"maximum":5},"tags":{"type":"array","items":{"type":"string"}},"group_id":{"type":"integer"},"responder_id":{"type":"integer"},"type":{"type":"string"},"custom_fields":{"type":"object"}},"required":["ticketId"]},"requiredScopes":["freshdesk.api"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tickets.reply","description":"Post a public reply on a Freshdesk ticket. Body becomes a customer-visible response on the ticket thread.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"},"body":{"type":"string"},"from_email":{"type":"string"},"user_id":{"type":"integer"},"cc_emails":{"type":"array","items":{"type":"string"}},"bcc_emails":{"type":"array","items":{"type":"string"}},"attachments":{"type":"array","items":{"type":"object"}}},"required":["ticketId","body"]},"requiredScopes":["freshdesk.api"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.note","description":"Add a note (private by default, set `private: false` for public) to a Freshdesk ticket.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"},"body":{"type":"string"},"private":{"type":"boolean"},"incoming":{"type":"boolean"},"user_id":{"type":"integer"},"notify_emails":{"type":"array","items":{"type":"string"}}},"required":["ticketId","body"]},"requiredScopes":["freshdesk.api"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.search","description":"Search Freshdesk contacts using the documented filter query DSL (e.g. \"email:'ada@example.com'\").","parameters":{"type":"object","properties":{"query":{"type":"string"},"page":{"type":"integer","minimum":1}},"required":["query"]},"requiredScopes":["freshdesk.api"],"class":"read"},{"name":"contacts.create","description":"Create a Freshdesk contact. Requires `name` plus at least one of `email`, `phone`, `mobile`, `twitter_id`, or `unique_external_id`.","parameters":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"mobile":{"type":"string"},"twitter_id":{"type":"string"},"unique_external_id":{"type":"string"},"company_id":{"type":"integer"},"address":{"type":"string"},"description":{"type":"string"},"job_title":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"custom_fields":{"type":"object"}},"required":["name"]},"requiredScopes":["freshdesk.api"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"freshsales","displayName":"Freshsales","description":"Search, read, create, and update Freshsales (Freshworks CRM) contacts, accounts, leads, and deals.","auth":{"kind":"api-key","hint":"Freshsales API token from Settings > API Settings. Used as `Authorization: Token token=<key>`."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.create","description":"Create a Freshsales contact. Maps to the activepieces `fresh.sales.create.contact` action. Pass any subset of contact fields (first_name, last_name, email, job_title, work_number, mobile_number, address, city, state, zipcode, country, territory_id, owner_id, subscription_status, medium, campaign_id, keyword, time_zone, facebook, twitter, linkedin, contact_status_id, sales_account_id).","parameters":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"job_title":{"type":"string"},"email":{"type":"string"},"work_number":{"type":"string"},"mobile_number":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zipcode":{"type":"string"},"country":{"type":"string"},"territory_id":{"type":"string"},"owner_id":{"type":"string"},"subscription_status":{"type":"string"},"medium":{"type":"string"},"campaign_id":{"type":"string"},"keyword":{"type":"string"},"time_zone":{"type":"string"},"facebook":{"type":"string"},"twitter":{"type":"string"},"linkedin":{"type":"string"},"contact_status_id":{"type":"string"},"sales_account_id":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.get","description":"Read a single Freshsales contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.update","description":"Update a Freshsales contact. Pass any subset of mutable contact fields plus contactId.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"job_title":{"type":"string"},"email":{"type":"string"},"work_number":{"type":"string"},"mobile_number":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zipcode":{"type":"string"},"country":{"type":"string"},"territory_id":{"type":"string"},"owner_id":{"type":"string"},"subscription_status":{"type":"string"},"medium":{"type":"string"},"campaign_id":{"type":"string"},"keyword":{"type":"string"},"time_zone":{"type":"string"},"facebook":{"type":"string"},"twitter":{"type":"string"},"linkedin":{"type":"string"},"contact_status_id":{"type":"string"},"sales_account_id":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.search","description":"Search Freshsales contacts using the lookup endpoint (typically by email, phone, or mobile_number).","parameters":{"type":"object","properties":{"q":{"type":"string"},"f":{"type":"string","description":"Field to lookup against (email, phone, mobile_number, etc.)."},"entities":{"type":"string","description":"Comma-separated entity types to search; defaults to contact."}},"required":["q","f"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.create","description":"Create a Freshsales sales account.","parameters":{"type":"object","properties":{"name":{"type":"string"},"website":{"type":"string"},"phone":{"type":"string"},"industry_type_id":{"type":"string"},"business_type_id":{"type":"string"},"number_of_employees":{"type":"integer"},"annual_revenue":{"type":"number"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zipcode":{"type":"string"},"country":{"type":"string"},"owner_id":{"type":"string"},"territory_id":{"type":"string"},"parent_sales_account_id":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"accounts.get","description":"Read a single Freshsales sales account by id.","parameters":{"type":"object","properties":{"accountId":{"type":"string"}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.update","description":"Update a Freshsales sales account.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"name":{"type":"string"},"website":{"type":"string"},"phone":{"type":"string"},"industry_type_id":{"type":"string"},"business_type_id":{"type":"string"},"number_of_employees":{"type":"integer"},"annual_revenue":{"type":"number"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zipcode":{"type":"string"},"country":{"type":"string"},"owner_id":{"type":"string"},"territory_id":{"type":"string"}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"leads.create","description":"Create a Freshsales lead.","parameters":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"},"job_title":{"type":"string"},"company":{"type":"string"},"work_number":{"type":"string"},"mobile_number":{"type":"string"},"owner_id":{"type":"string"},"source_id":{"type":"string"},"lead_stage_id":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.get","description":"Read a single Freshsales lead by id.","parameters":{"type":"object","properties":{"leadId":{"type":"string"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"deals.create","description":"Create a Freshsales deal.","parameters":{"type":"object","properties":{"name":{"type":"string"},"amount":{"type":"number"},"base_currency_amount":{"type":"number"},"expected_close":{"type":"string","description":"ISO date."},"closed_date":{"type":"string"},"probability":{"type":"integer"},"deal_stage_id":{"type":"string"},"deal_pipeline_id":{"type":"string"},"owner_id":{"type":"string"},"contacts_added_list":{"type":"array","items":{"type":"string"}},"sales_account_id":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deals.get","description":"Read a single Freshsales deal by id.","parameters":{"type":"object","properties":{"dealId":{"type":"string"}},"required":["dealId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"deals.update","description":"Update a Freshsales deal (stage, amount, expected_close, owner, etc.).","parameters":{"type":"object","properties":{"dealId":{"type":"string"},"name":{"type":"string"},"amount":{"type":"number"},"expected_close":{"type":"string"},"closed_date":{"type":"string"},"probability":{"type":"integer"},"deal_stage_id":{"type":"string"},"deal_pipeline_id":{"type":"string"},"owner_id":{"type":"string"},"sales_account_id":{"type":"string"}},"required":["dealId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"freshservice","displayName":"Freshservice","description":"Create and update Freshservice tickets, requesters, ticket notes, and approval requests.","auth":{"kind":"api-key","hint":"Freshservice API key from Profile Settings, combined with the per-tenant subdomain (e.g. `mycompany`). Sent as HTTP Basic `Authorization: Basic base64(<api_key>:X)`."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tickets.list","description":"List Freshservice tickets, optionally filtered by predefined filter (new_and_my_open, watching, spam, deleted), requester, or updated_since timestamp.","parameters":{"type":"object","properties":{"filter":{"type":"string","enum":["new_and_my_open","watching","spam","deleted"]},"requester_id":{"type":"integer"},"email":{"type":"string"},"updated_since":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tickets.get","description":"Read a single Freshservice ticket by id with optional `include` expansions (conversations, requester, requested_for, stats, problem, assets, change, related_tickets).","parameters":{"type":"object","properties":{"ticketId":{"type":"string"},"include":{"type":"string"}},"required":["ticketId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"requesters.list","description":"List Freshservice requesters, optionally filtered by email, mobile_phone_number, work_phone_number, or include_agents.","parameters":{"type":"object","properties":{"email":{"type":"string"},"mobile_phone_number":{"type":"string"},"work_phone_number":{"type":"string"},"include_agents":{"type":"boolean"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tickets.create","description":"Create a Freshservice ticket. Maps to the activepieces `createTicket` action. Requires `subject`, `description`, and a requester identifier (email, requester_id, phone, or twitter_id). Optional fields drive triage (type, status, priority, category, sub_category, tags, custom_fields).","parameters":{"type":"object","properties":{"subject":{"type":"string"},"description":{"type":"string"},"email":{"type":"string"},"requester_id":{"type":"integer"},"phone":{"type":"string"},"name":{"type":"string"},"status":{"type":"integer","minimum":2,"maximum":5},"priority":{"type":"integer","minimum":1,"maximum":4},"source":{"type":"integer"},"type":{"type":"string"},"category":{"type":"string"},"sub_category":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"cc_emails":{"type":"array","items":{"type":"string"}},"custom_fields":{"type":"object"},"group_id":{"type":"integer"},"responder_id":{"type":"integer"},"department_id":{"type":"integer"},"urgency":{"type":"integer","minimum":1,"maximum":3},"impact":{"type":"integer","minimum":1,"maximum":3}},"required":["subject","description"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.update","description":"Update fields on an existing Freshservice ticket — subject/description/status/priority/assignment/tags/custom_fields. PUT semantics: only supplied fields are changed.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"},"subject":{"type":"string"},"description":{"type":"string"},"status":{"type":"integer","minimum":2,"maximum":5},"priority":{"type":"integer","minimum":1,"maximum":4},"source":{"type":"integer"},"type":{"type":"string"},"category":{"type":"string"},"sub_category":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"custom_fields":{"type":"object"},"group_id":{"type":"integer"},"responder_id":{"type":"integer"},"department_id":{"type":"integer"},"urgency":{"type":"integer","minimum":1,"maximum":3},"impact":{"type":"integer","minimum":1,"maximum":3}},"required":["ticketId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.delete","description":"Move a Freshservice ticket to the trash. Destructive; subsequent reads of the same ticket id return 404.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"}},"required":["ticketId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.close","description":"Close a resolved Freshservice ticket. Implemented as a status update to 5 (Closed) on the underlying ticket record; pair with `tickets.note` to record a closure comment.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"}},"required":["ticketId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.note","description":"Add a note to a Freshservice ticket. Maps to the activepieces `addNoteToTicket` action. Set `private: true` to make the note agent-only; otherwise the requester can see it. Body supports HTML.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"},"body":{"type":"string"},"private":{"type":"boolean"},"incoming":{"type":"boolean"},"user_id":{"type":"integer"},"notify_emails":{"type":"array","items":{"type":"string"}}},"required":["ticketId","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"requesters.create","description":"Create a Freshservice requester. Maps to the activepieces `createRequester` action. Requires `first_name` and `primary_email`. Optional contact, job, and custom fields are passed through.","parameters":{"type":"object","properties":{"first_name":{"type":"string"},"primary_email":{"type":"string"},"last_name":{"type":"string"},"job_title":{"type":"string"},"phone":{"type":"string"},"mobile_phone_number":{"type":"string"},"work_phone_number":{"type":"string"},"department_ids":{"type":"array","items":{"type":"integer"}},"location_id":{"type":"integer"},"time_zone":{"type":"string"},"language":{"type":"string"},"background_information":{"type":"string"},"address":{"type":"string"},"secondary_emails":{"type":"array","items":{"type":"string"}},"custom_fields":{"type":"object"}},"required":["first_name","primary_email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.requestApproval","description":"Request approval for a Freshservice ticket. Maps to the activepieces `requestTicketApproval` action. `approval_type` selects how multiple approvers are resolved (e.g. `anyone` / `everyone`).","parameters":{"type":"object","properties":{"ticketId":{"type":"string"},"approver_ids":{"type":"array","items":{"type":"integer"}},"approval_type":{"type":"string"},"email_content":{"type":"string"}},"required":["ticketId","approver_ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"front","displayName":"Front","description":"Search Front shared-inbox conversations, reply on behalf of a teammate, and triage contacts.","auth":{"kind":"oauth2","authorizationUrl":"https://app.frontapp.com/oauth/authorize","tokenUrl":"https://app.frontapp.com/oauth/token","scopes":["shared_resources","private_resources"],"clientIdEnv":"FRONT_OAUTH_CLIENT_ID","clientSecretEnv":"FRONT_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"conversations.search","description":"Search conversations in shared inboxes using Front query syntax.","parameters":{"type":"object","properties":{"q":{"type":"string","description":"Front search query, e.g. \"is:open tag:billing\"."},"limit":{"type":"integer","minimum":1,"maximum":100},"page_token":{"type":"string"}},"required":["q"]},"requiredScopes":["shared_resources"],"class":"read"},{"name":"conversations.get","description":"Read a single conversation including its current assignee, status, and tags.","parameters":{"type":"object","properties":{"conversation_id":{"type":"string"}},"required":["conversation_id"]},"requiredScopes":["shared_resources"],"class":"read"},{"name":"conversations.list_messages","description":"List messages on a conversation in chronological order.","parameters":{"type":"object","properties":{"conversation_id":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"page_token":{"type":"string"}},"required":["conversation_id"]},"requiredScopes":["shared_resources"],"class":"read"},{"name":"conversations.reply","description":"Reply to a conversation by sending an outbound message on the conversation thread.","parameters":{"type":"object","properties":{"conversation_id":{"type":"string"},"author_id":{"type":"string","description":"Front teammate id sending the reply."},"body":{"type":"string"},"text":{"type":"string"},"subject":{"type":"string"},"to":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"options":{"type":"object"}},"required":["conversation_id","body"]},"requiredScopes":["shared_resources"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.add_comment","description":"Add an internal comment to a conversation. Comments are visible to teammates only.","parameters":{"type":"object","properties":{"conversation_id":{"type":"string"},"author_id":{"type":"string"},"body":{"type":"string"}},"required":["conversation_id","author_id","body"]},"requiredScopes":["shared_resources"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.update","description":"Update a conversation. Reassign, archive, restore, set status, or add tags.","parameters":{"type":"object","properties":{"conversation_id":{"type":"string"},"assignee_id":{"type":"string","description":"Teammate id; pass null to unassign."},"status":{"type":"string","enum":["archived","open","deleted","spam"]},"inbox_id":{"type":"string"},"tag_ids":{"type":"array","items":{"type":"string"}}},"required":["conversation_id"]},"requiredScopes":["shared_resources"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"contacts.search","description":"List contacts in the Front account.","parameters":{"type":"object","properties":{"q":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"page_token":{"type":"string"}}},"requiredScopes":["shared_resources"],"class":"read"},{"name":"contacts.create","description":"Create a Front contact with handles, name, and metadata.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"handles":{"type":"array","items":{"type":"object","properties":{"handle":{"type":"string"},"source":{"type":"string","enum":["email","phone","twitter","facebook","intercom","front_chat","custom"]}},"required":["handle","source"]}},"links":{"type":"array","items":{"type":"string"}},"group_names":{"type":"array","items":{"type":"string"}},"custom_fields":{"type":"object"}},"required":["handles"]},"requiredScopes":["shared_resources"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update a Front contact.","parameters":{"type":"object","properties":{"contact_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"custom_fields":{"type":"object"}},"required":["contact_id"]},"requiredScopes":["shared_resources"],"class":"mutation","cas":"etag-if-match","externalEffect":true}]},{"kind":"fullenrich","displayName":"FullEnrich","description":"Waterfall B2B contact enrichment API that finds work emails and phone numbers for a contact from name, company, or LinkedIn URL.","auth":{"kind":"api-key","hint":"API key from the FullEnrich dashboard (app.fullenrich.com/app/api). Sent as the Authorization: Bearer header."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.credits","description":"Return the current credit balance for the account.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contact.enrich.start","description":"Start an async waterfall enrichment for up to 100 contacts; returns an enrichment id and bills per found data point.","parameters":{"type":"object","properties":{"name":{"type":"string"},"data":{"type":"array","items":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"domain":{"type":"string"},"company_name":{"type":"string"},"linkedin_url":{"type":"string"},"enrich_fields":{"type":"array","items":{"type":"string"}}}}},"webhook_url":{"type":"string"}},"required":["name","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"contact.enrich.result","description":"Retrieve the result of a previously started bulk enrichment by its id.","parameters":{"type":"object","properties":{"enrichment_id":{"type":"string"}},"required":["enrichment_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contact.reverse_email.start","description":"Start an async reverse-email lookup to find profiles/identities behind email addresses.","parameters":{"type":"object","properties":{"name":{"type":"string"},"data":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string"}}}},"webhook_url":{"type":"string"}},"required":["name","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false}]},{"kind":"gameball","displayName":"Gameball","description":"Send player events to the Gameball loyalty + gamification platform to trigger rewards, challenges, and behavioral rules.","auth":{"kind":"api-key","hint":"Gameball account API key — see help.gameball.co/en/articles/3467114."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"send.event","description":"Send one or more behavioral events for a player. Each entry in `events` is keyed by event name (as configured in the Gameball dashboard) and triggers any rewards, challenges, or segmentation rules wired to that event.","parameters":{"type":"object","properties":{"playerUniqueId":{"type":"string","description":"Stable customer identifier used to attribute the event to a player."},"events":{"type":"object","description":"Map of event name to event metadata object. Example: { \"purchase\": { \"amount\": 50, \"currency\": \"USD\" } }."},"playerAttributes":{"type":"object","description":"Optional player attributes (email, displayName, mobile, custom attrs) updated on the player record alongside the event."}},"required":["playerUniqueId","events"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"player.create","description":"Create or upsert a Gameball player. Idempotent on `playerUniqueId` — first call creates, subsequent calls update player attributes (email, displayName, mobile, gender, dateOfBirth, custom attributes).","parameters":{"type":"object","properties":{"playerUniqueId":{"type":"string","description":"Stable customer identifier; upserts the player record."},"playerAttributes":{"type":"object","description":"Player profile fields — email, displayName, firstName, lastName, mobile, gender, dateOfBirth, custom attributes."},"referrerCode":{"type":"string","description":"Optional referrer code that attributes this player to an existing referrer."}},"required":["playerUniqueId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"action.track","description":"Track a single gamification action for a player. Convenience over `send.event` for emitting one named action with metadata, body, and reward overrides — fires the loyalty rules wired to that action name.","parameters":{"type":"object","properties":{"playerUniqueId":{"type":"string","description":"Stable customer identifier."},"events":{"type":"object","description":"Map of action name to action metadata. Example: { \"review_left\": { \"rating\": 5 } }."},"playerAttributes":{"type":"object","description":"Optional player attribute updates applied alongside the action."}},"required":["playerUniqueId","events"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"reward.redeem","description":"Redeem a reward for a player. `rewardConstraints` selects the reward (rewardId or rewardType + amount); the call debits the appropriate balance and emits a redemption event.","parameters":{"type":"object","properties":{"playerUniqueId":{"type":"string","description":"Stable customer identifier."},"rewardConstraints":{"type":"object","description":"Reward selector — rewardId, rewardType, amount, currency per the Gameball redeem schema."},"transactionId":{"type":"string","description":"Caller-supplied transaction id for idempotency on the redemption record."}},"required":["playerUniqueId","rewardConstraints"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"gamma","displayName":"Gamma","description":"Generate and retrieve AI-powered presentations, documents, webpages, and social media posts.","auth":{"kind":"api-key","hint":"Gamma API key from your workspace settings."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"content.generate","description":"Generate a new Gamma (presentation, document, webpage, or social post) from text and optional configuration.","parameters":{"type":"object","properties":{"inputText":{"type":"string","description":"Text used to generate your gamma (1-750,000 characters)."},"format":{"type":"string","description":"The type of artifact: presentation, document, social, or webpage."},"numCards":{"type":"integer","description":"Number of cards to create (default 10, Pro: 1-50, Ultra: 1-75)."},"textMode":{"type":"string","description":"How to modify inputText: generate, condense, or preserve."},"themeName":{"type":"string","description":"Theme name to apply. Defaults to workspace default."},"cardSplit":{"type":"string","description":"How content is divided into cards: inputTextBreaks or auto."},"additionalInstructions":{"type":"string","description":"Extra specifications for content and layouts (1-500 characters)."},"textOptions":{"type":"object","description":"JSON object for text attributes (amount, tone, audience, language)."},"imageOptions":{"type":"object","description":"JSON object for image attributes (source, model, style)."},"cardOptions":{"type":"object","description":"JSON object for card attributes (dimensions, headerFooter)."},"sharingOptions":{"type":"object","description":"JSON object for sharing attributes (workspaceAccess, externalAccess)."},"exportAs":{"type":"string","description":"File format for export: pptx, pdf, or png."}},"required":["inputText"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"generation.status","description":"Retrieve the status and details of a generation job by ID.","parameters":{"type":"object","properties":{"generationId":{"type":"string","description":"The ID of the generation job."}},"required":["generationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"presentation.delete","description":"Delete a Gamma presentation by ID.","parameters":{"type":"object","properties":{"gammaId":{"type":"string","description":"The ID of the Gamma presentation to delete."}},"required":["gammaId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"presentation.update","description":"Update metadata for an existing Gamma presentation.","parameters":{"type":"object","properties":{"gammaId":{"type":"string","description":"The ID of the Gamma presentation to update."},"title":{"type":"string","description":"New title for the presentation."},"folderId":{"type":"string","description":"Folder to move the presentation into."},"sharingOptions":{"type":"object","description":"JSON object for sharing attributes (workspaceAccess, externalAccess)."}},"required":["gammaId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"folder.create","description":"Create a folder for organizing Gamma presentations.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Folder display name."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"gcloud-pubsub","displayName":"Google Cloud Pub/Sub","description":"Publish and pull Google Cloud Pub/Sub messages and manage topics and subscriptions with a customer-owned service account.","auth":{"kind":"api-key","hint":"Google Cloud service-account key JSON. Enable the Pub/Sub API and grant only the topic, subscription, publisher, or subscriber roles required by approved workflows."},"category":"webhook","defaultConsistencyModel":"advisory","rateLimit":{"requests":600,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"topics.list","class":"read","description":"List topics in the service account project.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer","minimum":1,"maximum":1000},"pageToken":{"type":"string"}}}},{"name":"topics.get","class":"read","description":"Get one topic and its server-side configuration.","parameters":{"type":"object","properties":{"topic":{"type":"string","description":"Topic ID in the service account project."}},"required":["topic"]}},{"name":"topics.create","class":"mutation","description":"Create a topic in the service account project.","parameters":{"type":"object","properties":{"topic":{"type":"string"},"labels":{"type":"object","additionalProperties":{"type":"string"}},"allowedPersistenceRegions":{"type":"array","items":{"type":"string"}},"kmsKeyName":{"type":"string"},"schema":{"type":"string","description":"Full Pub/Sub schema resource name."},"schemaEncoding":{"type":"string","enum":["JSON","BINARY"]}},"required":["topic"]},"cas":"none","externalEffect":true},{"name":"topics.delete","class":"mutation","description":"Delete a topic. Existing subscriptions remain but stop receiving messages.","parameters":{"type":"object","properties":{"topic":{"type":"string"}},"required":["topic"]},"cas":"none","externalEffect":true},{"name":"messages.publish","class":"mutation","description":"Publish up to 1,000 messages to a topic.","parameters":{"type":"object","properties":{"topic":{"type":"string"},"messages":{"type":"array","minItems":1,"maxItems":1000,"description":"Messages with either text (UTF-8) or data (base64), plus optional string attributes and orderingKey."}},"required":["topic","messages"]},"cas":"none","externalEffect":true},{"name":"subscriptions.list","class":"read","description":"List subscriptions in the service account project.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer","minimum":1,"maximum":1000},"pageToken":{"type":"string"}}}},{"name":"subscriptions.get","class":"read","description":"Get one subscription and its delivery configuration.","parameters":{"type":"object","properties":{"subscription":{"type":"string"}},"required":["subscription"]}},{"name":"subscriptions.create","class":"mutation","description":"Create a pull subscription for a topic.","parameters":{"type":"object","properties":{"subscription":{"type":"string"},"topic":{"type":"string"},"ackDeadlineSeconds":{"type":"integer","minimum":10,"maximum":600},"retainAckedMessages":{"type":"boolean"},"messageRetentionDuration":{"type":"string","description":"Protobuf duration such as 604800s."},"expirationTtl":{"type":"string","description":"Subscription expiry TTL such as 2678400s."},"filter":{"type":"string"},"deadLetterTopic":{"type":"string"},"maxDeliveryAttempts":{"type":"integer","minimum":5,"maximum":100},"minimumBackoff":{"type":"string"},"maximumBackoff":{"type":"string"},"enableMessageOrdering":{"type":"boolean"},"enableExactlyOnceDelivery":{"type":"boolean"},"labels":{"type":"object","additionalProperties":{"type":"string"}}},"required":["subscription","topic"]},"cas":"none","externalEffect":true},{"name":"subscriptions.delete","class":"mutation","description":"Delete a subscription and discard its retained messages.","parameters":{"type":"object","properties":{"subscription":{"type":"string"}},"required":["subscription"]},"cas":"none","externalEffect":true},{"name":"messages.pull","class":"mutation","description":"Pull messages and make them temporarily unavailable to other subscribers.","parameters":{"type":"object","properties":{"subscription":{"type":"string"},"maxMessages":{"type":"integer","minimum":1,"maximum":1000}},"required":["subscription","maxMessages"]},"cas":"none","externalEffect":true},{"name":"messages.acknowledge","class":"mutation","description":"Acknowledge delivered messages by ack ID.","parameters":{"type":"object","properties":{"subscription":{"type":"string"},"ackIds":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"string"}}},"required":["subscription","ackIds"]},"cas":"none","externalEffect":true},{"name":"messages.modifyAckDeadline","class":"mutation","description":"Change the acknowledgement deadline for delivered messages.","parameters":{"type":"object","properties":{"subscription":{"type":"string"},"ackIds":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"string"}},"ackDeadlineSeconds":{"type":"integer","minimum":0,"maximum":600}},"required":["subscription","ackIds","ackDeadlineSeconds"]},"cas":"none","externalEffect":true}]},{"kind":"gemini","displayName":"Google Gemini","description":"Google Gemini Generative Language API — text/multimodal generation, embeddings, token counting, file uploads, and context caching.","auth":{"kind":"api-key","hint":"Google AI Studio API key (https://aistudio.google.com/app/apikey). For Vertex AI / OAuth2-billed traffic, use a separate connector."},"category":"other","defaultConsistencyModel":"cache","capabilities":[{"name":"models.list","description":"List models available to the API key.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer","minimum":1,"maximum":1000},"pageToken":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"models.get","description":"Describe a single model (context window, supported methods, version).","parameters":{"type":"object","properties":{"model":{"type":"string","description":"e.g. \"gemini-2.0-flash\" or \"models/gemini-2.0-flash\"."}},"required":["model"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"models.countTokens","description":"Count input tokens for a prompt against a model (cheap; useful for budget gating).","parameters":{"type":"object","properties":{"model":{"type":"string"},"contents":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["user","model"]},"parts":{"type":"array","items":{"type":"object"}}},"required":["parts"]}},"generateContentRequest":{"type":"object"}},"required":["model"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"models.generateContent","description":"Generate content (text/multimodal). Modeled as a mutation because the call has billed external effect even though it does not write to a persistent resource.","parameters":{"type":"object","properties":{"model":{"type":"string"},"contents":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["user","model"]},"parts":{"type":"array","items":{"type":"object"}}},"required":["parts"]}},"systemInstruction":{"type":"object"},"generationConfig":{"type":"object","properties":{"temperature":{"type":"number"},"topP":{"type":"number"},"topK":{"type":"integer"},"candidateCount":{"type":"integer","minimum":1,"maximum":8},"maxOutputTokens":{"type":"integer"},"stopSequences":{"type":"array","items":{"type":"string"}},"responseMimeType":{"type":"string"},"responseSchema":{"type":"object"}}},"safetySettings":{"type":"array","items":{"type":"object"}},"tools":{"type":"array","items":{"type":"object"}},"toolConfig":{"type":"object"},"cachedContent":{"type":"string","description":"Name of a cachedContents resource to reuse a prefix."}},"required":["model","contents"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"models.streamGenerateContent","description":"Streamed generation. Google emits SSE; the declarative REST runtime returns the aggregated response body. Use Gemini directly via WebSocket/SSE for token-by-token streaming.","parameters":{"type":"object","properties":{"model":{"type":"string"},"contents":{"type":"array","items":{"type":"object"}},"systemInstruction":{"type":"object"},"generationConfig":{"type":"object"},"safetySettings":{"type":"array","items":{"type":"object"}},"tools":{"type":"array","items":{"type":"object"}},"toolConfig":{"type":"object"},"cachedContent":{"type":"string"}},"required":["model","contents"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"models.embedContent","description":"Embed a single content payload (billed; modeled as mutation w/ external effect).","parameters":{"type":"object","properties":{"model":{"type":"string","description":"e.g. \"text-embedding-004\" or \"models/text-embedding-004\"."},"content":{"type":"object","properties":{"parts":{"type":"array","items":{"type":"object"}}},"required":["parts"]},"taskType":{"type":"string","enum":["TASK_TYPE_UNSPECIFIED","RETRIEVAL_QUERY","RETRIEVAL_DOCUMENT","SEMANTIC_SIMILARITY","CLASSIFICATION","CLUSTERING","QUESTION_ANSWERING","FACT_VERIFICATION","CODE_RETRIEVAL_QUERY"]},"title":{"type":"string"},"outputDimensionality":{"type":"integer","minimum":1}},"required":["model","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"models.batchEmbedContents","description":"Embed multiple content payloads in a single billed call.","parameters":{"type":"object","properties":{"model":{"type":"string"},"requests":{"type":"array","items":{"type":"object","properties":{"model":{"type":"string"},"content":{"type":"object"},"taskType":{"type":"string"},"title":{"type":"string"},"outputDimensionality":{"type":"integer"}},"required":["model","content"]}}},"required":["model","requests"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"files.list","description":"List media uploaded via the File API (referenced from generateContent by URI).","parameters":{"type":"object","properties":{"pageSize":{"type":"integer","minimum":1,"maximum":100},"pageToken":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.get","description":"Get metadata for an uploaded file by name (e.g. \"files/abc123\").","parameters":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.delete","description":"Delete an uploaded file. Files auto-expire after 48 hours; explicit delete is for early reclaim.","parameters":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cachedContents.list","description":"List cached-content resources owned by the API key.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer","minimum":1,"maximum":1000},"pageToken":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cachedContents.get","description":"Describe a cached-content resource (e.g. \"cachedContents/abc\").","parameters":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cachedContents.create","description":"Create a cached-content resource so a prefix (system instruction, large file) is billed once and reused.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Fully qualified model, e.g. \"models/gemini-1.5-flash-001\"."},"contents":{"type":"array","items":{"type":"object"}},"systemInstruction":{"type":"object"},"tools":{"type":"array","items":{"type":"object"}},"toolConfig":{"type":"object"},"displayName":{"type":"string"},"ttl":{"type":"string","description":"Duration string, e.g. \"3600s\"."},"expireTime":{"type":"string","description":"RFC3339 timestamp; mutually exclusive with ttl."}},"required":["model","contents"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cachedContents.delete","description":"Delete a cached-content resource.","parameters":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"gender-api","displayName":"Gender API","description":"Predict the gender of a person based on their name using Gender-api service.","auth":{"kind":"api-key","hint":"Gender API key from https://gender-api.com. Store the API key in the auth config."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"gender.get.by.first.name","description":"Get gender prediction by first name.","parameters":{"type":"object","properties":{"firstName":{"type":"string","description":"The first name to query"},"countryCode":{"type":"string","description":"ISO 3166-1 alpha-2 country code to improve accuracy (e.g. US, GB, DE)"},"locale":{"type":"string","description":"Browser locale for localization (e.g. en, de, fr)"}},"required":["firstName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"gender.get.by.full.name","description":"Get gender prediction by full name (first and last name).","parameters":{"type":"object","properties":{"fullName":{"type":"string","description":"The full name (first and last name) to query"},"countryCode":{"type":"string","description":"ISO 3166-1 alpha-2 country code to improve accuracy (e.g. US, GB, DE)"},"locale":{"type":"string","description":"Browser locale for localization (e.g. en, de, fr)"}},"required":["fullName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"statistics.get","description":"Get statistics about account usage.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"generatebanners","displayName":"GenerateBanners","description":"Generate custom banners and social media images from templates.","auth":{"kind":"api-key","hint":"GenerateBanners API key."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"templates.render","description":"Render a template to generate a banner or social media image.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"The ID of the template to render"},"fileType":{"type":"string","enum":["jpg","png","webp"],"description":"Output file format"},"variables":{"type":"object","description":"Template variables as key-value pairs"}},"required":["templateId","fileType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"banner.delete","description":"Delete a generated banner asset by ID.","parameters":{"type":"object","properties":{"bannerId":{"type":"string","description":"The ID of the rendered banner asset to delete"}},"required":["bannerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"template.create","description":"Create a banner template.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Template display name"},"width":{"type":"integer","description":"Banner width in pixels"},"height":{"type":"integer","description":"Banner height in pixels"},"layers":{"type":"array","description":"Template layers (text, image, shape, etc.)"}},"required":["name","width","height"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"batch.render","description":"Render multiple banners from a template in a single call.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"The ID of the template to render"},"fileType":{"type":"string","enum":["jpg","png","webp"],"description":"Output file format"},"items":{"type":"array","description":"Array of variable sets — one rendered output per entry","items":{"type":"object"}}},"required":["templateId","fileType","items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"getresponse","displayName":"GetResponse","description":"Email marketing platform for managing contacts, lists (campaigns), and sending newsletters.","auth":{"kind":"api-key","hint":"Generate an API key at app.getresponse.com/api. Sent as the X-Auth-Token header with the 'api-key ' prefix (X-Auth-Token: api-key <KEY>)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.list","description":"List or search contacts, optionally filtered by email or campaign (list).","parameters":{"type":"object","properties":{"email":{"type":"string"},"campaignId":{"type":"string"},"page":{"type":"integer"},"perPage":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.list","description":"List campaigns (contact lists). The campaignId returned here is used when adding contacts or sending newsletters.","parameters":{"type":"object","properties":{"name":{"type":"string"},"page":{"type":"integer"},"perPage":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Add (import) a contact to a campaign (list). Only email and campaign id are required.","parameters":{"type":"object","properties":{"email":{"type":"string"},"campaign_id":{"type":"string"},"name":{"type":"string"},"dayOfCycle":{"type":"integer"}},"required":["email","campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"newsletters.create","description":"Create and send a newsletter (broadcast email) to a campaign. Requires subject, fromFieldId, HTML content, and a target campaign.","parameters":{"type":"object","properties":{"subject":{"type":"string"},"fromFieldId":{"type":"string"},"html":{"type":"string"},"campaign_id":{"type":"string"},"name":{"type":"string"}},"required":["subject","fromFieldId","html","campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"ghostcms","displayName":"Ghost CMS","description":"Create or update Ghost members, posts, and look up users via the Ghost Admin API.","auth":{"kind":"api-key","hint":"Ghost Admin API key in the form \"<id>:<secret>\"; the publication URL is supplied as connection metadata (baseUrl)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"members.create","description":"Create a Ghost member.","parameters":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"},"note":{"type":"string"},"labels":{"type":"array","items":{"type":"string"}}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"members.update","description":"Update a Ghost member by id.","parameters":{"type":"object","properties":{"memberId":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"note":{"type":"string"},"labels":{"type":"array","items":{"type":"string"}}},"required":["memberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"members.find","description":"Search Ghost members by email or NQL filter.","parameters":{"type":"object","properties":{"email":{"type":"string"},"filter":{"type":"string"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"posts.create","description":"Create a Ghost post.","parameters":{"type":"object","properties":{"title":{"type":"string"},"slug":{"type":"string"},"status":{"type":"string","enum":["draft","published","scheduled"]},"publishedAt":{"type":"string"},"html":{"type":"string"},"customExcerpt":{"type":"string"},"featured":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"}}},"required":["title","status","html"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.find","description":"List or search Ghost staff users.","parameters":{"type":"object","properties":{"filter":{"type":"string"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"posts.update","description":"Update a Ghost post by id.","parameters":{"type":"object","properties":{"postId":{"type":"string"},"title":{"type":"string"},"slug":{"type":"string"},"status":{"type":"string","enum":["draft","published","scheduled"]},"publishedAt":{"type":"string"},"html":{"type":"string"},"customExcerpt":{"type":"string"},"featured":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"}}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.delete","description":"Delete a Ghost post by id.","parameters":{"type":"object","properties":{"postId":{"type":"string"}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"members.delete","description":"Delete a Ghost member by id.","parameters":{"type":"object","properties":{"memberId":{"type":"string"}},"required":["memberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"giftbit","displayName":"Giftbit","description":"Send digital gift cards and rewards to recipients via email.","auth":{"kind":"api-key","hint":"Giftbit API key from your merchant account settings."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"rewards.send","description":"Send a digital gift card or reward to one or more recipients via email.","parameters":{"type":"object","properties":{"orderId":{"type":"string","description":"Unique identifier for this order"},"priceInCents":{"type":"integer","description":"Reward value in cents (e.g., 2500 = $25.00)"},"email":{"type":"string","description":"Recipient email address"},"firstName":{"type":"string","description":"Recipient first name"},"lastName":{"type":"string","description":"Recipient last name"},"subject":{"type":"string","description":"Email subject line"},"message":{"type":"string","description":"Email body message"},"giftTemplate":{"type":"string","description":"Gift template ID from Giftbit account"},"expiryDate":{"type":"string","description":"ISO date for reward claim deadline"},"brandCodes":{"type":"array","items":{"type":"string"},"description":"Brand codes to restrict reward to specific merchants"},"region":{"type":"string","description":"Region code for full catalog rewards"},"useFullCatalog":{"type":"boolean","description":"Let recipient choose from all brands in region"},"useTestbed":{"type":"boolean","description":"Send test reward (does not charge)"}},"required":["orderId","priceInCents","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rewards.get","description":"Retrieve details of a sent reward by reward ID.","parameters":{"type":"object","properties":{"rewardId":{"type":"string","description":"Unique reward identifier"}},"required":["rewardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rewards.list","description":"List sent rewards with optional filtering by order ID or status.","parameters":{"type":"object","properties":{"orderId":{"type":"string","description":"Filter by order ID"},"status":{"type":"string","description":"Filter by reward status (e.g., pending, claimed, expired)"},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum results to return"},"offset":{"type":"integer","minimum":0,"description":"Pagination offset"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"brands.list","description":"List available brands for the account and region.","parameters":{"type":"object","properties":{"region":{"type":"string","description":"Region code (e.g., US, CA, UK)"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.create","description":"Create a gift campaign that bundles a reward template, brand selection, and contact list.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for this campaign"},"priceInCents":{"type":"integer","description":"Reward value in cents (e.g., 2500 = $25.00)"},"subject":{"type":"string","description":"Email subject line"},"message":{"type":"string","description":"Email body message"},"giftTemplate":{"type":"string","description":"Gift template ID from Giftbit account"},"contacts":{"type":"array","description":"Recipient contacts as { email, firstName, lastName } objects","items":{"type":"object"}},"brandCodes":{"type":"array","items":{"type":"string"},"description":"Brand codes to restrict campaign to specific merchants"},"expiryDate":{"type":"string","description":"ISO date for reward claim deadline"}},"required":["id","priceInCents"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.send","description":"Send a previously created gift campaign to its recipients.","parameters":{"type":"object","properties":{"campaignId":{"type":"string","description":"Unique campaign identifier created via campaigns.create"}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"giftcard.resend","description":"Resend the claim email for an outstanding gift card.","parameters":{"type":"object","properties":{"giftId":{"type":"string","description":"The unique gift card / reward identifier"}},"required":["giftId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"giftcard.cancel","description":"Cancel an undelivered or unclaimed gift card.","parameters":{"type":"object","properties":{"giftId":{"type":"string","description":"The unique gift card / reward identifier"}},"required":["giftId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"gistly","displayName":"Gistly","description":"Fetch YouTube video transcripts from the Gistly API as timestamped chunks or merged text.","auth":{"kind":"api-key","hint":"Gistly API key from https://api-portal.gist.ly/. Sent as the `x-api-key` header."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"transcripts.get","description":"Fetch the transcript of a YouTube video by URL. When `text` is true the transcript is collapsed into a single merged string instead of timestamped chunks.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"A public YouTube video URL (e.g. https://www.youtube.com/watch?v=...)."},"text":{"type":"boolean","description":"If true, return the transcript as a single merged string instead of timestamped chunks."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"gitea","displayName":"Gitea","description":"Self-hosted Git service for creating and managing repositories, issues, and pull requests.","auth":{"kind":"oauth2","authorizationUrl":"{instanceUrl}/login/oauth/authorize","tokenUrl":"{instanceUrl}/login/oauth/access_token","scopes":["read:user","write:user","read:issue","write:issue","read:repository","write:repository"],"clientIdEnv":"GITEA_OAUTH_CLIENT_ID","clientSecretEnv":"GITEA_OAUTH_CLIENT_SECRET","pkce":"supported","urlTemplateMetadata":{"instanceUrl":{"kind":"base-url","requirePublicHttps":true}}},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"repos.list","description":"List repositories.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"limit":{"type":"integer"}},"required":["owner"]},"requiredScopes":["read:user"],"class":"read"},{"name":"issues.create","description":"Create an issue in a repository.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"title":{"type":"string"},"body":{"type":"string"},"assignee":{"type":"string"},"labels":{"type":"array"}},"required":["owner","repo","title"]},"requiredScopes":["write:issue"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.update","description":"Update an issue in a repository.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"index":{"type":"integer"},"title":{"type":"string"},"body":{"type":"string"},"state":{"type":"string"}},"required":["owner","repo","index"]},"requiredScopes":["write:issue"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"comments.create","description":"Create a comment on an issue or pull request.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"index":{"type":"integer"},"body":{"type":"string"}},"required":["owner","repo","index","body"]},"requiredScopes":["write:issue"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pull-requests.list","description":"List pull requests in a repository.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"state":{"type":"string"},"limit":{"type":"integer"}},"required":["owner","repo"]},"requiredScopes":["read:repository"],"class":"read"},{"name":"pull-requests.create","description":"Create a pull request in a repository.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"title":{"type":"string"},"body":{"type":"string"},"head":{"type":"string"},"base":{"type":"string"}},"required":["owner","repo","title","head","base"]},"requiredScopes":["write:repository"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"branches.list","description":"List branches in a repository.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"}},"required":["owner","repo"]},"requiredScopes":["read:repository"],"class":"read"},{"name":"repos.create","description":"Create a repository owned by the authenticated user.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"private":{"type":"boolean"},"auto_init":{"type":"boolean"},"default_branch":{"type":"string"}},"required":["name"]},"requiredScopes":["write:user"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"repos.delete","description":"Delete a repository.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"}},"required":["owner","repo"]},"requiredScopes":["write:repository"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pull-requests.merge","description":"Merge a pull request.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"index":{"type":"integer"},"Do":{"type":"string","enum":["merge","rebase","rebase-merge","squash"]},"MergeTitleField":{"type":"string"},"MergeMessageField":{"type":"string"}},"required":["owner","repo","index"]},"requiredScopes":["write:repository"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"github","displayName":"GitHub","description":"Search repositories/issues and create or update GitHub issues through a user-scoped token.","auth":{"kind":"api-key","hint":"GitHub fine-grained personal access token or installation token."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"repositories.get","description":"Read repository metadata.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"}},"required":["owner","repo"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"issues.search","description":"Search GitHub issues and pull requests.","parameters":{"type":"object","properties":{"q":{"type":"string"},"per_page":{"type":"integer","minimum":1,"maximum":100}},"required":["q"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.getAuthenticated","description":"Resolve the authenticated user (the token owner). Quest verification anchors author:/owner: filters to this login, so it must be resolved first.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"activity.checkStarred","description":"Check whether the authenticated user has starred a repository. Returns { exists: true } when starred, { exists: false } when not.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"}},"required":["owner","repo"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.checkFollowing","description":"Check whether the authenticated user follows another user. Returns { exists: true } when following, { exists: false } when not.","parameters":{"type":"object","properties":{"target":{"type":"string","description":"Login of the user to check the follow against."}},"required":["target"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"repos.listCommits","description":"List commits on a repository, optionally filtered to a single author login/email. Used to verify a user contributed to the repo.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"author":{"type":"string","description":"Restrict to commits authored by this GitHub login or email."},"per_page":{"type":"integer","minimum":1,"maximum":100}},"required":["owner","repo"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"repos.getReadme","description":"Read a repository's README (returns base64-encoded content). Used to verify README mentions.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"}},"required":["owner","repo"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.code","description":"Search code across GitHub. Used to verify code usage of a symbol or string.","parameters":{"type":"object","properties":{"q":{"type":"string"},"per_page":{"type":"integer","minimum":1,"maximum":100}},"required":["q"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orgs.checkMembership","description":"Check whether a user is a member of an organization. Returns { exists: true } when a member, { exists: false } when not.","parameters":{"type":"object","properties":{"org":{"type":"string"},"user":{"type":"string","description":"Login of the user to check membership for."}},"required":["org","user"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pulls.get","description":"Read a single pull request, including its head/base refs and the repository it targets.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"pull_number":{"type":"integer","description":"The pull request number within the repository."}},"required":["owner","repo","pull_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pulls.list","description":"List pull requests in a repository, newest first by default.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"state":{"type":"string","enum":["open","closed","all"],"description":"Defaults to open."},"sort":{"type":"string","enum":["created","updated","popularity","long-running"]},"direction":{"type":"string","enum":["asc","desc"]},"per_page":{"type":"integer","minimum":1,"maximum":100}},"required":["owner","repo"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pulls.listFiles","description":"List the files a pull request changes, with per-file patches. Page with per_page — a large PR exceeds a single response budget.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"pull_number":{"type":"integer"},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}},"required":["owner","repo","pull_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pulls.listReviews","description":"List the reviews already submitted on a pull request, so a reviewer does not repeat existing findings.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"pull_number":{"type":"integer"},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}},"required":["owner","repo","pull_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pulls.listReviewComments","description":"List the inline review comments on a pull request.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"pull_number":{"type":"integer"},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}},"required":["owner","repo","pull_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"issues.get","description":"Read a single issue by number.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"issue_number":{"type":"integer"}},"required":["owner","repo","issue_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"issues.list","description":"List issues in a repository. GitHub includes pull requests here; filter on the `pull_request` key when that matters.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"state":{"type":"string","enum":["open","closed","all"]},"labels":{"type":"string","description":"Comma-separated label names."},"sort":{"type":"string","enum":["created","updated","comments"]},"direction":{"type":"string","enum":["asc","desc"]},"per_page":{"type":"integer","minimum":1,"maximum":100}},"required":["owner","repo"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"issues.listComments","description":"Read the comment thread on an issue or pull request before replying to it.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"issue_number":{"type":"integer"},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}},"required":["owner","repo","issue_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"repos.listLabels","description":"List the labels a repository defines, so an automation applies one that exists rather than inventing it.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}},"required":["owner","repo"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"repos.listBranches","description":"List a repository's branches. Used to resolve the default branch to diff against.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}},"required":["owner","repo"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"issues.create","description":"Create an issue in a repository.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"title":{"type":"string"},"body":{"type":"string"},"labels":{"type":"array","items":{"type":"string"}}},"required":["owner","repo","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.update","description":"Update an issue by number.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"issue_number":{"type":"integer"},"title":{"type":"string"},"body":{"type":"string"},"state":{"type":"string","enum":["open","closed"]}},"required":["owner","repo","issue_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"pulls.create","description":"Open a pull request from `head` into `base` on the target repository.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"title":{"type":"string"},"head":{"type":"string","description":"Branch (or cross-fork ref like `octocat:feature-x`) containing the changes."},"base":{"type":"string","description":"Branch in the target repo to merge into (e.g. `main`)."},"body":{"type":"string","description":"PR description body (markdown)."},"draft":{"type":"boolean","description":"When true, open the PR as a draft."}},"required":["owner","repo","title","head","base"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pulls.merge","description":"Merge a pull request by number. `merge_method` selects merge | squash | rebase.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"pull_number":{"type":"integer"},"commit_title":{"type":"string","description":"Optional commit title for the merge commit."},"merge_method":{"type":"string","enum":["merge","squash","rebase"],"description":"Merge strategy. Defaults to `merge` on GitHub."}},"required":["owner","repo","pull_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.createComment","description":"Add a comment to an existing issue or pull request.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"issue_number":{"type":"integer"},"body":{"type":"string","description":"Comment body (markdown)."}},"required":["owner","repo","issue_number","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pulls.reviews.create","description":"Submit a review on a pull request: approve, request changes, or comment.","parameters":{"type":"object","properties":{"owner":{"type":"string"},"repo":{"type":"string"},"pull_number":{"type":"integer"},"event":{"type":"string","enum":["APPROVE","REQUEST_CHANGES","COMMENT"],"description":"Review action to submit."},"body":{"type":"string","description":"Optional review body. Required by GitHub when `event` is REQUEST_CHANGES or COMMENT."}},"required":["owner","repo","pull_number","event"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"gitlab","displayName":"GitLab","description":"Search GitLab projects/issues and create or update issues through a personal, project, or group token.","auth":{"kind":"api-key","hint":"GitLab access token with api/read_api scope."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"projects.search","description":"Search projects visible to the token.","parameters":{"type":"object","properties":{"search":{"type":"string"},"per_page":{"type":"integer","minimum":1,"maximum":100}},"required":["search"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"issues.search","description":"Search issues in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"search":{"type":"string"},"per_page":{"type":"integer"}},"required":["projectId","search"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"issues.create","description":"Create a GitLab project issue.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"}},"required":["projectId","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.update","description":"Update a GitLab issue.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"issueIid":{"type":"integer"},"title":{"type":"string"},"description":{"type":"string"},"state_event":{"type":"string"}},"required":["projectId","issueIid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"merge_requests.create","description":"Open a new merge request in a GitLab project.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Project id or URL-encoded path."},"source_branch":{"type":"string","description":"Branch the MR is opened from."},"target_branch":{"type":"string","description":"Branch the MR is opened against."},"title":{"type":"string"},"description":{"type":"string"}},"required":["id","source_branch","target_branch","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"merge_requests.accept","description":"Merge an open merge request (the GitLab \"accept\" endpoint).","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Project id or URL-encoded path."},"merge_request_iid":{"type":"integer","description":"Project-scoped MR IID."},"merge_commit_message":{"type":"string"}},"required":["id","merge_request_iid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"notes.create","description":"Add a note (comment) to a GitLab issue.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Project id or URL-encoded path."},"issue_iid":{"type":"integer","description":"Project-scoped issue IID."},"body":{"type":"string","description":"Comment body (Markdown)."}},"required":["id","issue_iid","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"glide","displayName":"Glide","description":"Manage Glide Big Tables and rows with Glide API.","auth":{"kind":"api-key","hint":"Glide API key."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tables.list","description":"List all Glide Big Tables.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rows.get","description":"Get rows from a Glide table.","parameters":{"type":"object","properties":{"tableId":{"type":"string","description":"The Glide table ID."},"limit":{"type":"integer","description":"Maximum number of rows to return."}},"required":["tableId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rows.add","description":"Add rows to a Glide table.","parameters":{"type":"object","properties":{"tableId":{"type":"string","description":"The Glide table ID."},"rows":{"type":"array","description":"Array of JSON objects matching the table columns."}},"required":["tableId","rows"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rows.update","description":"Update a row in a Glide table.","parameters":{"type":"object","properties":{"tableId":{"type":"string","description":"The Glide table ID."},"rowId":{"type":"string","description":"The Glide row ID to update."},"row":{"type":"object","description":"JSON object containing columns to update."}},"required":["tableId","rowId","row"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"rows.delete","description":"Delete a row from a Glide table.","parameters":{"type":"object","properties":{"tableId":{"type":"string","description":"The Glide table ID."},"rowId":{"type":"string","description":"The Glide row ID to delete."}},"required":["tableId","rowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"gmail","displayName":"Gmail","description":"Read inbox messages by label or query, fetch a single message including MIME bodies and attachment manifests, reply on a thread, and watch a label for new mail (Cloud Pub/Sub push).","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/gmail.readonly","https://www.googleapis.com/auth/gmail.send","https://www.googleapis.com/auth/gmail.modify"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"comms","defaultConsistencyModel":"authoritative","rateLimit":{"requests":250,"windowMs":1000,"scope":"oauth-client"},"capabilities":[{"name":"list_messages","class":"read","description":"List inbox messages. Filter by labelIds (default INBOX) and/or a Gmail query (e.g., 'from:billing@stripe.com newer_than:7d'). Returns headers (from/to/subject/date) not bodies.","requiredScopes":["https://www.googleapis.com/auth/gmail.readonly"],"parameters":{"type":"object","properties":{"labelIds":{"type":"array","items":{"type":"string"},"description":"Default: [\"INBOX\"]"},"query":{"type":"string","description":"Gmail query syntax."},"maxResults":{"type":"integer","minimum":1,"maximum":500,"default":25},"pageToken":{"type":"string"}}}},{"name":"read_message","class":"read","description":"Read a single Gmail message including parsed text and html bodies and a flat manifest of attachments. Bodies are inlined; attachment bytes are not.","requiredScopes":["https://www.googleapis.com/auth/gmail.readonly"],"parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},{"name":"send","class":"mutation","description":"Send a new email to arbitrary recipients (not tied to an existing thread). Body is text/plain unless `html` is provided. Use send_reply for in-thread replies.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/gmail.send"],"parameters":{"type":"object","properties":{"to":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Recipient address(es). String OR array of strings."},"subject":{"type":"string"},"body":{"type":"string","description":"text/plain body (unless html set)"},"cc":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"replyTo":{"type":"string","description":"Optional Reply-To header."},"html":{"type":"boolean","default":false,"description":"When true, send body as text/html instead of text/plain. Gmail does NOT auto-derive a plain alternative — set html only when the body is HTML."}},"required":["to","subject","body"]}},{"name":"send_reply","class":"mutation","description":"Send a reply on a thread. Pulls In-Reply-To/References from the latest message in the thread. Body is text/plain.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/gmail.send","https://www.googleapis.com/auth/gmail.readonly"],"parameters":{"type":"object","properties":{"threadId":{"type":"string"},"body":{"type":"string","description":"text/plain body"},"replyAll":{"type":"boolean","default":false},"cc":{"type":"array","items":{"type":"string"}}},"required":["threadId","body"]}},{"name":"watch_label","class":"mutation","description":"Register a Cloud Pub/Sub topic to receive push notifications when a label changes. Returns the upstream historyId + expiration. Re-issue every 7 days.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/gmail.modify"],"parameters":{"type":"object","properties":{"labelIds":{"type":"array","items":{"type":"string"},"description":"Default: [\"INBOX\"]"},"topicName":{"type":"string","description":"projects/<id>/topics/<name>"},"labelFilterAction":{"type":"string","enum":["include","exclude"],"default":"include"}},"required":["topicName"]}}]},{"kind":"gong","displayName":"Gong","description":"Read Gong calls, transcripts, and users, ingest external calls, and assign prospects to Engage flows through the v2 API.","auth":{"kind":"oauth2","authorizationUrl":"https://app.gong.io/oauth2/authorize","tokenUrl":"https://app.gong.io/oauth2/generate-customer-token","scopes":["api:calls:read:basic","api:calls:read:extensive","api:calls:read:transcript","api:calls:create","api:users:read","api:flows:write"],"clientIdEnv":"GONG_OAUTH_CLIENT_ID","clientSecretEnv":"GONG_OAUTH_CLIENT_SECRET","tokenMetadata":{"apiBaseUrlForCustomer":{"field":"api_base_url_for_customer","required":true}}},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.list","description":"List calls in a time window. fromDateTime is required (ISO-8601); paginate with cursor.","parameters":{"type":"object","properties":{"fromDateTime":{"type":"string","description":"ISO-8601 start datetime for calls to retrieve."},"toDateTime":{"type":"string","description":"ISO-8601 end datetime for calls to retrieve."},"workspaceId":{"type":"string","description":"Filter calls by a specific workspace id."},"cursor":{"type":"string","description":"Pagination cursor from a previous response."}},"required":["fromDateTime"]},"requiredScopes":["api:calls:read:basic"],"class":"read"},{"name":"calls.getTranscripts","description":"Retrieve call transcripts. Pass a `filter` object (fromDateTime/toDateTime and/or callIds); paginate with cursor.","parameters":{"type":"object","properties":{"filter":{"type":"object","description":"Filter object, e.g. { fromDateTime, toDateTime, callIds: [\"...\"] }.","additionalProperties":true},"cursor":{"type":"string","description":"Pagination cursor for the next page."}},"required":["filter"]},"requiredScopes":["api:calls:read:transcript"],"class":"read"},{"name":"calls.getExtensive","description":"Retrieve extensive call data. Pass a `filter` object and an optional `contentSelector` controlling which enrichment fields/context to include.","parameters":{"type":"object","properties":{"filter":{"type":"object","description":"Filter object: fromDateTime, toDateTime, callIds, primaryUserIds, or workspaceId.","additionalProperties":true},"contentSelector":{"type":"object","description":"Controls included enrichment data (exposedFields, context objects).","additionalProperties":true},"cursor":{"type":"string","description":"Pagination cursor from a prior response."}},"required":["filter"]},"requiredScopes":["api:calls:read:extensive"],"class":"read"},{"name":"users.list","description":"List Gong users (max 100 per page). Paginate with cursor.","parameters":{"type":"object","properties":{"cursor":{"type":"string","description":"Pagination cursor; omit for the first page."},"includeAvatars":{"type":"boolean","description":"Include avatar image URLs in the response (default false)."}}},"requiredScopes":["api:users:read"],"class":"read"},{"name":"calls.create","description":"Ingest an external call into Gong. Required: clientUniqueId, actualStart (ISO-8601), direction (Inbound/Outbound/Conference/Unknown), parties (array of participant objects).","parameters":{"type":"object","properties":{"clientUniqueId":{"type":"string","description":"Unique identifier for the call in the source system."},"actualStart":{"type":"string","description":"ISO-8601 datetime when the call started."},"direction":{"type":"string","enum":["Inbound","Outbound","Conference","Unknown"],"description":"Call direction."},"title":{"type":"string","description":"Title or subject of the call."},"parties":{"type":"array","description":"Participant objects with emailAddress, name, phoneNumber, speakerId.","items":{"type":"object","additionalProperties":true}},"mediaChannels":{"type":"object","description":"Media channel configuration.","additionalProperties":true},"workspaceId":{"type":"string","description":"Workspace to associate the call with."}},"required":["clientUniqueId","actualStart","direction","parties"]},"requiredScopes":["api:calls:create"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"flows.assignProspects","description":"Assign prospects to a Gong Engage flow. Provide flowId and a prospects array (up to 100).","parameters":{"type":"object","properties":{"flowId":{"type":"string","description":"Id of the Engage flow to assign prospects to."},"prospects":{"type":"array","description":"Prospect objects (up to 100); each with crmProspectId and optional fields.","items":{"type":"object","additionalProperties":true}},"actionSource":{"type":"string","description":"Identifier of the integration making the assignment."}},"required":["flowId","prospects"]},"requiredScopes":["api:flows:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"google-analytics","displayName":"Google Analytics","description":"Run reports, pivot reports, realtime reports, and batch reports against connected GA4 properties. Read-only: GA4 ingest happens through gtag / Measurement Protocol, not the management API.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/analytics.readonly"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"database","defaultConsistencyModel":"cache","capabilities":[{"name":"accountSummaries.list","description":"List GA4 account summaries reachable by the connected identity. Each summary nests its properties so the agent can discover propertyId values without a second round-trip (GET analyticsadmin.googleapis.com/v1beta/accountSummaries).","parameters":{"type":"object","properties":{"pageSize":{"type":"integer","minimum":1,"maximum":200,"description":"Max account summaries per page; server caps at 200."},"pageToken":{"type":"string","description":"Continuation token returned by a prior call."}}},"requiredScopes":["https://www.googleapis.com/auth/analytics.readonly"],"class":"read"},{"name":"properties.get","description":"Fetch GA4 property settings (display name, timezone, currency, industry) by numeric property id (GET analyticsadmin.googleapis.com/v1beta/properties/{propertyId}).","parameters":{"type":"object","properties":{"propertyId":{"type":"string","description":"Numeric GA4 property id, e.g. \"123456789\"."}},"required":["propertyId"]},"requiredScopes":["https://www.googleapis.com/auth/analytics.readonly"],"class":"read"},{"name":"properties.metadata.get","description":"List every dimension and metric available on a GA4 property, including custom dimensions/metrics defined by the customer. Use this before runReport to discover valid dimension/metric names (GET /v1beta/properties/{propertyId}/metadata).","parameters":{"type":"object","properties":{"propertyId":{"type":"string","description":"Numeric GA4 property id."}},"required":["propertyId"]},"requiredScopes":["https://www.googleapis.com/auth/analytics.readonly"],"class":"read"},{"name":"properties.runReport","description":"Run a core report against a GA4 property. Pass dimensions, metrics, dateRanges (e.g. {startDate:\"7daysAgo\",endDate:\"today\"}), optional filters, ordering, and a row limit. Returns the rows, totals, and metadata GA4 emits in the standard runReport response (POST /v1beta/properties/{propertyId}:runReport).","parameters":{"type":"object","properties":{"propertyId":{"type":"string","description":"Numeric GA4 property id."},"dimensions":{"type":"array","description":"Dimension specs, e.g. [{ \"name\": \"country\" }, { \"name\": \"deviceCategory\" }].","items":{"type":"object","properties":{"name":{"type":"string"},"dimensionExpression":{"type":"object","description":"Composite/lower-case/concatenate expression (optional)."}},"required":["name"]}},"metrics":{"type":"array","description":"Metric specs, e.g. [{ \"name\": \"activeUsers\" }, { \"name\": \"sessions\" }].","items":{"type":"object","properties":{"name":{"type":"string"},"expression":{"type":"string","description":"Derived metric expression (optional)."},"invisible":{"type":"boolean"}},"required":["name"]}},"dateRanges":{"type":"array","description":"One or two date ranges; GA4 accepts ISO dates (\"2026-05-01\"), \"today\", \"yesterday\", or \"NdaysAgo\".","items":{"type":"object","properties":{"startDate":{"type":"string"},"endDate":{"type":"string"},"name":{"type":"string","description":"Optional label included in the response row keys when comparing two ranges."}},"required":["startDate","endDate"]}},"dimensionFilter":{"type":"object","description":"GA4 FilterExpression (and/or/not) applied to dimensions."},"metricFilter":{"type":"object","description":"GA4 FilterExpression applied to metrics after aggregation."},"orderBys":{"type":"array","items":{"type":"object"}},"limit":{"type":"integer","minimum":1,"maximum":250000,"description":"Max rows per page; GA4 caps at 250000."},"offset":{"type":"integer","minimum":0},"keepEmptyRows":{"type":"boolean"},"returnPropertyQuota":{"type":"boolean","description":"Include per-property quota consumption in the response — useful for back-pressure decisions."},"currencyCode":{"type":"string","description":"ISO-4217 currency, overrides the property default for monetary metrics."},"cohortSpec":{"type":"object","description":"CohortSpec for cohort analysis (optional)."}},"required":["propertyId","metrics","dateRanges"]},"requiredScopes":["https://www.googleapis.com/auth/analytics.readonly"],"class":"read"},{"name":"properties.batchRunReports","description":"Run up to 5 reports against the same GA4 property in a single request — cheaper than 5 round-trips and counted as fewer quota tokens (POST /v1beta/properties/{propertyId}:batchRunReports).","parameters":{"type":"object","properties":{"propertyId":{"type":"string","description":"Numeric GA4 property id."},"requests":{"type":"array","description":"Up to 5 report requests; each takes the same shape as runReport (dimensions/metrics/dateRanges/etc.).","items":{"type":"object"},"maxItems":5}},"required":["propertyId","requests"]},"requiredScopes":["https://www.googleapis.com/auth/analytics.readonly"],"class":"read"},{"name":"properties.runPivotReport","description":"Run a pivot report — like runReport but with one or more pivot specifications that rotate dimensions into columns (POST /v1beta/properties/{propertyId}:runPivotReport).","parameters":{"type":"object","properties":{"propertyId":{"type":"string","description":"Numeric GA4 property id."},"dimensions":{"type":"array","items":{"type":"object"}},"metrics":{"type":"array","items":{"type":"object"}},"dateRanges":{"type":"array","items":{"type":"object"}},"pivots":{"type":"array","description":"Pivot specifications — each names the dimensions to pivot, an order, a limit, and optional offset.","items":{"type":"object","properties":{"fieldNames":{"type":"array","items":{"type":"string"}},"orderBys":{"type":"array","items":{"type":"object"}},"offset":{"type":"string","description":"String-encoded long."},"limit":{"type":"string","description":"String-encoded long."},"metricAggregations":{"type":"array","items":{"type":"string"}}},"required":["fieldNames"]}},"dimensionFilter":{"type":"object"},"metricFilter":{"type":"object"},"currencyCode":{"type":"string"},"cohortSpec":{"type":"object"},"keepEmptyRows":{"type":"boolean"},"returnPropertyQuota":{"type":"boolean"}},"required":["propertyId","metrics","dateRanges","pivots"]},"requiredScopes":["https://www.googleapis.com/auth/analytics.readonly"],"class":"read"},{"name":"properties.runRealtimeReport","description":"Run a realtime report — surfaces events that happened in the last 30 minutes. No dateRanges; the realtime window is implicit (POST /v1beta/properties/{propertyId}:runRealtimeReport).","parameters":{"type":"object","properties":{"propertyId":{"type":"string","description":"Numeric GA4 property id."},"dimensions":{"type":"array","items":{"type":"object"}},"metrics":{"type":"array","items":{"type":"object"}},"dimensionFilter":{"type":"object"},"metricFilter":{"type":"object"},"limit":{"type":"integer","minimum":1,"maximum":250000},"metricAggregations":{"type":"array","items":{"type":"string"}},"orderBys":{"type":"array","items":{"type":"object"}},"returnPropertyQuota":{"type":"boolean"},"minuteRanges":{"type":"array","description":"Optional minute-window specifications, e.g. [{ \"name\": \"last5\", \"startMinutesAgo\": 5, \"endMinutesAgo\": 0 }]. Defaults to the last 30 minutes.","items":{"type":"object","properties":{"name":{"type":"string"},"startMinutesAgo":{"type":"integer","minimum":0,"maximum":29},"endMinutesAgo":{"type":"integer","minimum":0,"maximum":29}}}}},"required":["propertyId","metrics"]},"requiredScopes":["https://www.googleapis.com/auth/analytics.readonly"],"class":"read"},{"name":"properties.checkCompatibility","description":"Check whether a given dimension/metric combination is compatible before issuing a full runReport — GA4 rejects incompatible combos (e.g. cohort dimensions with non-cohort metrics) with a hard error (POST /v1beta/properties/{propertyId}:checkCompatibility).","parameters":{"type":"object","properties":{"propertyId":{"type":"string","description":"Numeric GA4 property id."},"dimensions":{"type":"array","items":{"type":"object"}},"metrics":{"type":"array","items":{"type":"object"}},"dimensionFilter":{"type":"object"},"metricFilter":{"type":"object"},"compatibilityFilter":{"type":"string","enum":["COMPATIBILITY_UNSPECIFIED","COMPATIBLE","INCOMPATIBLE"],"description":"Restrict the response to compatible or incompatible entries only."}},"required":["propertyId"]},"requiredScopes":["https://www.googleapis.com/auth/analytics.readonly"],"class":"read"}]},{"kind":"google-bigquery","displayName":"Google BigQuery","description":"Query, analyze, and stream data into Google BigQuery — the fully managed, serverless data warehouse.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/bigquery"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"query.run","description":"Run a synchronous SQL query against BigQuery via jobs.query. Returns rows and the underlying jobReference for follow-up paging.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project to bill the query to."},"query":{"type":"string","description":"Standard SQL (or legacy SQL when useLegacySql=true)."},"useLegacySql":{"type":"boolean"},"maxResults":{"type":"integer","minimum":1,"maximum":100000},"location":{"type":"string"},"timeoutMs":{"type":"integer","minimum":0},"dryRun":{"type":"boolean"},"parameterMode":{"type":"string","enum":["POSITIONAL","NAMED"]},"queryParameters":{"type":"array"},"defaultDataset":{"type":"object"}},"required":["projectId","query"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"read"},{"name":"jobs.getQueryResults","description":"Get rows for a previously-submitted query job (paged). Maps to activepieces `get.rows.for.job`.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"jobId":{"type":"string"},"location":{"type":"string"},"pageToken":{"type":"string"},"maxResults":{"type":"integer","minimum":1,"maximum":100000},"startIndex":{"type":"string"},"timeoutMs":{"type":"integer"}},"required":["projectId","jobId"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"read"},{"name":"jobs.get","description":"Look up a BigQuery job (status, statistics, errorResult).","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"jobId":{"type":"string"},"location":{"type":"string"}},"required":["projectId","jobId"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"read"},{"name":"rows.insert.one","description":"Stream a single row into a BigQuery table via tabledata.insertAll. Maps to activepieces `create.row`.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"datasetId":{"type":"string"},"tableId":{"type":"string"},"row":{"type":"object","description":"Column→value map for the row."},"insertId":{"type":"string","description":"Client-side dedup key honored by the streaming buffer."},"skipInvalidRows":{"type":"boolean"},"ignoreUnknownValues":{"type":"boolean"},"templateSuffix":{"type":"string"}},"required":["projectId","datasetId","tableId","row"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rows.insert.many","description":"Stream a batch of rows into a BigQuery table via tabledata.insertAll. Maps to activepieces `create.rows`.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"datasetId":{"type":"string"},"tableId":{"type":"string"},"rows":{"type":"array","description":"Array of {insertId?, json} entries. Each entry is one row.","items":{"type":"object"}},"skipInvalidRows":{"type":"boolean"},"ignoreUnknownValues":{"type":"boolean"},"templateSuffix":{"type":"string"}},"required":["projectId","datasetId","tableId","rows"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rows.findOne","description":"Find a single row matching a SQL predicate. Maps to activepieces `find.one.row`; executes via jobs.query with LIMIT 1.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"query":{"type":"string","description":"A SELECT ... LIMIT 1 SQL statement."},"useLegacySql":{"type":"boolean"},"location":{"type":"string"},"queryParameters":{"type":"array"},"parameterMode":{"type":"string","enum":["POSITIONAL","NAMED"]}},"required":["projectId","query"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"read"},{"name":"rows.findOrCreate","description":"Find a row by predicate, otherwise stream-insert it. Maps to activepieces `find.or.create.row`. Implemented as a MERGE statement via jobs.query so the find + insert run as a single BigQuery job.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"datasetId":{"type":"string"},"tableId":{"type":"string"},"mergeSql":{"type":"string","description":"A full MERGE statement of the form: MERGE `dataset.table` T USING (SELECT @v1 AS col1, ...) S ON T.key = S.key WHEN NOT MATCHED THEN INSERT (...) VALUES (...)."},"queryParameters":{"type":"array"},"parameterMode":{"type":"string","enum":["POSITIONAL","NAMED"]},"location":{"type":"string"}},"required":["projectId","datasetId","tableId","mergeSql"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rows.update","description":"Update rows in a BigQuery table by running a DML UPDATE through jobs.query. Maps to activepieces `update.rows`.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"updateSql":{"type":"string","description":"A full UPDATE `dataset.table` SET ... WHERE ... statement."},"queryParameters":{"type":"array"},"parameterMode":{"type":"string","enum":["POSITIONAL","NAMED"]},"location":{"type":"string"}},"required":["projectId","updateSql"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"rows.delete","description":"Delete rows from a BigQuery table by running a DML DELETE through jobs.query. Maps to activepieces `delete.rows`.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"deleteSql":{"type":"string","description":"A full DELETE FROM `dataset.table` WHERE ... statement."},"queryParameters":{"type":"array"},"parameterMode":{"type":"string","enum":["POSITIONAL","NAMED"]},"location":{"type":"string"}},"required":["projectId","deleteSql"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"data.import","description":"Submit a load job that imports data from GCS (or inline source URIs) into a BigQuery table. Maps to activepieces `import.data`.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"datasetId":{"type":"string"},"tableId":{"type":"string"},"sourceUris":{"type":"array","items":{"type":"string"}},"sourceFormat":{"type":"string","enum":["CSV","NEWLINE_DELIMITED_JSON","AVRO","PARQUET","ORC"]},"writeDisposition":{"type":"string","enum":["WRITE_APPEND","WRITE_TRUNCATE","WRITE_EMPTY"]},"createDisposition":{"type":"string","enum":["CREATE_IF_NEEDED","CREATE_NEVER"]},"schema":{"type":"object"},"autodetect":{"type":"boolean"},"skipLeadingRows":{"type":"integer"},"location":{"type":"string"}},"required":["projectId","datasetId","tableId","sourceUris","sourceFormat"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"datasets.list","description":"List datasets in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"pageToken":{"type":"string"},"maxResults":{"type":"integer"},"all":{"type":"boolean"}},"required":["projectId"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"read"},{"name":"tables.list","description":"List tables in a dataset.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"datasetId":{"type":"string"},"pageToken":{"type":"string"},"maxResults":{"type":"integer"}},"required":["projectId","datasetId"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"read"},{"name":"tables.get","description":"Read a table resource (schema, partitioning, row counts).","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"datasetId":{"type":"string"},"tableId":{"type":"string"}},"required":["projectId","datasetId","tableId"]},"requiredScopes":["https://www.googleapis.com/auth/bigquery"],"class":"read"}]},{"kind":"google-calendar","displayName":"Google Calendar","description":"Let your agent check availability and book against a Google Calendar. Conflict-resolved: two callers can't grab the same slot — the second one is offered the next free time.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/calendar","https://www.googleapis.com/auth/calendar.events"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"calendar","defaultConsistencyModel":"authoritative","rateLimit":{"requests":600,"windowMs":60000,"scope":"oauth-client"},"capabilities":[{"name":"list_availability","class":"read","description":"Look up busy/free times on the connected calendar between timeMin and timeMax (RFC3339 timestamps).","parameters":{"type":"object","properties":{"timeMin":{"type":"string","description":"RFC3339 lower bound (inclusive)"},"timeMax":{"type":"string","description":"RFC3339 upper bound (exclusive)"}},"required":["timeMin","timeMax"]}},{"name":"book_slot","class":"mutation","description":"Reserve a time window on the connected calendar. Returns conflict + alternatives if the slot is no longer free.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"start":{"type":"string","description":"RFC3339 start time"},"end":{"type":"string","description":"RFC3339 end time"},"summary":{"type":"string","description":"Event title shown on the calendar"},"description":{"type":"string","description":"Optional event description"},"attendees":{"type":"array","items":{"type":"string","description":"email"}}},"required":["start","end","summary"]}},{"name":"create_event","class":"mutation","description":"Create an event on the connected calendar without freebusy pre-flight. Use book_slot when the caller wants conflict-detection; use create_event when the caller already owns the slot decision (e.g. user-driven booking flows).","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/calendar.events"],"parameters":{"type":"object","properties":{"start":{"type":"string","description":"RFC3339 start time"},"end":{"type":"string","description":"RFC3339 end time"},"summary":{"type":"string","description":"Event title shown on the calendar"},"description":{"type":"string","description":"Optional event description"},"location":{"type":"string","description":"Optional event location"},"attendees":{"type":"array","items":{"type":"string","description":"email"}},"sendUpdates":{"type":"string","enum":["all","externalOnly","none"],"default":"none","description":"Whether Google sends invite emails to attendees."}},"required":["start","end","summary"]}},{"name":"update_event","class":"mutation","description":"Patch an existing event by id. Only the supplied fields are updated (PATCH semantics).","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/calendar.events"],"parameters":{"type":"object","properties":{"eventId":{"type":"string"},"start":{"type":"string","description":"RFC3339 start time"},"end":{"type":"string","description":"RFC3339 end time"},"summary":{"type":"string"},"description":{"type":"string"},"location":{"type":"string"},"attendees":{"type":"array","items":{"type":"string","description":"email"}},"sendUpdates":{"type":"string","enum":["all","externalOnly","none"],"default":"none"}},"required":["eventId"]}},{"name":"delete_event","class":"mutation","description":"Delete an event by id. Returns {ok:true} on success; treats 404 and 410 (already-deleted) as idempotent success.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/calendar.events"],"parameters":{"type":"object","properties":{"eventId":{"type":"string"},"sendUpdates":{"type":"string","enum":["all","externalOnly","none"],"default":"none"}},"required":["eventId"]}},{"name":"get_event","class":"read","description":"Fetch a single event by id, including iCal-style fields (htmlLink, hangoutLink, attendees, status, etag).","requiredScopes":["https://www.googleapis.com/auth/calendar.events"],"parameters":{"type":"object","properties":{"eventId":{"type":"string"}},"required":["eventId"]}},{"name":"list_events","class":"read","description":"List events between timeMin and timeMax (RFC3339). Optional free-text search (`q`) and maxResults paging. Returns ordered items + nextPageToken.","requiredScopes":["https://www.googleapis.com/auth/calendar.events"],"parameters":{"type":"object","properties":{"timeMin":{"type":"string","description":"RFC3339 lower bound (inclusive)"},"timeMax":{"type":"string","description":"RFC3339 upper bound (exclusive)"},"q":{"type":"string","description":"Free-text search query (summary, description, location, attendees)."},"maxResults":{"type":"integer","minimum":1,"maximum":2500,"default":50},"pageToken":{"type":"string"},"singleEvents":{"type":"boolean","default":true,"description":"Expand recurring events."},"orderBy":{"type":"string","enum":["startTime","updated"],"default":"startTime"}}}}]},{"kind":"google-cloud-storage","displayName":"Google Cloud Storage","description":"Manage buckets, objects, and ACLs in Google Cloud Storage via the JSON API at storage.googleapis.com/storage/v1.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/devstorage.full_control"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET"},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"buckets.search","description":"List buckets in a Google Cloud project.","parameters":{"type":"object","properties":{"project":{"type":"string","description":"Google Cloud project id that owns the buckets."},"prefix":{"type":"string","description":"Optional name prefix to filter results."},"maxResults":{"type":"integer","description":"Max buckets per page (1..1000)."},"pageToken":{"type":"string","description":"Continuation token from a prior page response."}},"required":["project"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"buckets.create","description":"Insert a new bucket in the given project. Bucket names are globally unique.","parameters":{"type":"object","properties":{"project":{"type":"string","description":"Project id that will own the bucket."},"name":{"type":"string","description":"Globally-unique bucket name."},"location":{"type":"string","description":"Bucket location (e.g. \"US\", \"EU\", \"us-central1\"). Defaults to \"US\" when omitted."},"storageClass":{"type":"string","enum":["STANDARD","NEARLINE","COLDLINE","ARCHIVE"],"description":"Default storage class for newly-created objects."}},"required":["project","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"buckets.delete_empty","description":"Delete an empty bucket. Fails with 409 if the bucket still contains objects.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name."},"ifMetagenerationMatch":{"type":"string","description":"Optimistic-concurrency precondition on bucket metageneration."}},"required":["bucket"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"objects.search","description":"List objects in a bucket. Supports prefix + delimiter for folder-style enumeration.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name."},"prefix":{"type":"string","description":"Object name prefix to filter on (folder-style listing)."},"delimiter":{"type":"string","description":"Path delimiter (typically \"/\") to roll up sub-prefixes."},"maxResults":{"type":"integer","description":"Max objects per page (1..1000)."},"pageToken":{"type":"string","description":"Continuation token from a prior page response."},"versions":{"type":"boolean","description":"Include non-current object versions in the response."}},"required":["bucket"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"objects.clone","description":"Server-side copy an object to a new bucket + name. Source and destination may live in different buckets.","parameters":{"type":"object","properties":{"sourceBucket":{"type":"string","description":"Source bucket name."},"sourceObject":{"type":"string","description":"Source object name (URL-encoded if it contains \"/\")."},"destinationBucket":{"type":"string","description":"Destination bucket name."},"destinationObject":{"type":"string","description":"Destination object name."},"sourceGeneration":{"type":"string","description":"Pin the copy to a specific source generation (object version)."}},"required":["sourceBucket","sourceObject","destinationBucket","destinationObject"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"objects.delete","description":"Delete an object. When the bucket has versioning enabled, pass `generation` to delete a specific version.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name."},"object":{"type":"string","description":"Object name."},"generation":{"type":"string","description":"Specific object version to delete."},"ifGenerationMatch":{"type":"string","description":"Optimistic-concurrency precondition on object generation."}},"required":["bucket","object"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"bucket_acl.create","description":"Grant a role to an entity on the bucket-level ACL collection.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name."},"entity":{"type":"string","description":"ACL entity (e.g. \"user-alice@example.com\", \"group-eng@example.com\", \"allUsers\")."},"role":{"type":"string","enum":["READER","WRITER","OWNER"],"description":"Role granted to the entity."}},"required":["bucket","entity","role"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bucket_acl.delete","description":"Revoke a bucket-level ACL grant from an entity.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name."},"entity":{"type":"string","description":"ACL entity to remove."}},"required":["bucket","entity"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"bucket_default_object_acl.create","description":"Add an entry to the bucket default object ACL. New objects created in the bucket inherit this grant unless overridden at insert time.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name."},"entity":{"type":"string","description":"ACL entity (e.g. \"user-alice@example.com\")."},"role":{"type":"string","enum":["READER","OWNER"],"description":"Role granted to the entity on newly-created objects."}},"required":["bucket","entity","role"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bucket_default_object_acl.delete","description":"Remove an entry from the bucket default object ACL.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name."},"entity":{"type":"string","description":"ACL entity to remove."}},"required":["bucket","entity"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"object_acl.create","description":"Grant a role to an entity on a specific object's ACL collection.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name."},"object":{"type":"string","description":"Object name."},"entity":{"type":"string","description":"ACL entity (e.g. \"user-alice@example.com\", \"allUsers\")."},"role":{"type":"string","enum":["READER","OWNER"],"description":"Role granted to the entity on this object."},"generation":{"type":"string","description":"Specific object version to grant on; defaults to the current generation."}},"required":["bucket","object","entity","role"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"object_acl.delete","description":"Revoke a per-object ACL grant from an entity.","parameters":{"type":"object","properties":{"bucket":{"type":"string","description":"Bucket name."},"object":{"type":"string","description":"Object name."},"entity":{"type":"string","description":"ACL entity to remove."},"generation":{"type":"string","description":"Specific object version to revoke from; defaults to the current generation."}},"required":["bucket","object","entity"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true}]},{"kind":"google-contacts","displayName":"Google Contacts","description":"Read, search, create, update, and delete personal Google contacts via the Google People API v1 (people.googleapis.com), including \"Other contacts\" and Workspace directory entries.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/contacts","https://www.googleapis.com/auth/contacts.readonly","https://www.googleapis.com/auth/contacts.other.readonly","https://www.googleapis.com/auth/directory.readonly","https://www.googleapis.com/auth/userinfo.email"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"people.get","description":"Read a single Person by resource name (e.g. \"people/c12345678901234567\"). `personFields` is required and selects which fields the response should populate.","parameters":{"type":"object","properties":{"resourceName":{"type":"string","description":"Person resource name like \"people/{contact_id}\" or \"people/me\" for the authenticated user."},"personFields":{"type":"string","description":"Comma-separated list of person fields to return, e.g. \"names,emailAddresses,phoneNumbers,organizations,addresses,biographies\"."}},"required":["resourceName","personFields"]},"requiredScopes":["https://www.googleapis.com/auth/contacts.readonly"],"class":"read"},{"name":"people.list","description":"List the authenticated user's personal contacts (\"people/me/connections\"). Supports pagination and a sync token for incremental fetches.","parameters":{"type":"object","properties":{"personFields":{"type":"string","description":"Comma-separated list of person fields to return."},"pageSize":{"type":"integer","minimum":1,"maximum":1000},"pageToken":{"type":"string"},"syncToken":{"type":"string","description":"Token from a previous response used to fetch only changes since that response."},"requestSyncToken":{"type":"boolean","description":"Set true to request a syncToken in the response for later incremental sync."},"sortOrder":{"type":"string","description":"LAST_MODIFIED_ASCENDING | LAST_MODIFIED_DESCENDING | FIRST_NAME_ASCENDING | LAST_NAME_ASCENDING."}},"required":["personFields"]},"requiredScopes":["https://www.googleapis.com/auth/contacts.readonly"],"class":"read"},{"name":"people.search","description":"Server-side prefix search over the user's contacts using \"people:searchContacts\". Returns ranked matches by name, email, phone, or organization.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Prefix to match against name, email, phone, or org fields."},"readMask":{"type":"string","description":"Comma-separated field mask, e.g. \"names,emailAddresses,phoneNumbers\"."},"pageSize":{"type":"integer","minimum":1,"maximum":30}},"required":["query","readMask"]},"requiredScopes":["https://www.googleapis.com/auth/contacts.readonly"],"class":"read"},{"name":"otherContacts.list","description":"\"Other contacts\" — addresses Google auto-imports from Gmail/Calendar interactions. Read-only and exposed under a separate scope.","parameters":{"type":"object","properties":{"readMask":{"type":"string","description":"Comma-separated field mask (names, emailAddresses, phoneNumbers)."},"pageSize":{"type":"integer","minimum":1,"maximum":1000},"pageToken":{"type":"string"},"syncToken":{"type":"string"},"requestSyncToken":{"type":"boolean"}},"required":["readMask"]},"requiredScopes":["https://www.googleapis.com/auth/contacts.other.readonly"],"class":"read"},{"name":"otherContacts.search","description":"Prefix search across \"Other contacts\".","parameters":{"type":"object","properties":{"query":{"type":"string"},"readMask":{"type":"string"},"pageSize":{"type":"integer","minimum":1,"maximum":30}},"required":["query","readMask"]},"requiredScopes":["https://www.googleapis.com/auth/contacts.other.readonly"],"class":"read"},{"name":"directory.list","description":"List Workspace directory people (org users + shared contacts). Available only on Google Workspace tenants where the admin enabled directory sharing.","parameters":{"type":"object","properties":{"readMask":{"type":"string"},"sources":{"type":"array","items":{"type":"string"},"description":"DIRECTORY_SOURCE_TYPE_DOMAIN_CONTACT and/or DIRECTORY_SOURCE_TYPE_DOMAIN_PROFILE."},"mergeSources":{"type":"array","items":{"type":"string"},"description":"DIRECTORY_MERGE_SOURCE_TYPE_CONTACT to merge personal contact data when available."},"pageSize":{"type":"integer","minimum":1,"maximum":1000},"pageToken":{"type":"string"},"syncToken":{"type":"string"},"requestSyncToken":{"type":"boolean"}},"required":["readMask","sources"]},"requiredScopes":["https://www.googleapis.com/auth/directory.readonly"],"class":"read"},{"name":"directory.search","description":"Prefix search across the Workspace directory.","parameters":{"type":"object","properties":{"query":{"type":"string"},"readMask":{"type":"string"},"sources":{"type":"array","items":{"type":"string"}},"mergeSources":{"type":"array","items":{"type":"string"}},"pageSize":{"type":"integer","minimum":1,"maximum":500}},"required":["query","readMask","sources"]},"requiredScopes":["https://www.googleapis.com/auth/directory.readonly"],"class":"read"},{"name":"people.create","description":"Create a new personal contact. The body is a full Person resource (names, emailAddresses, phoneNumbers, organizations, etc.). `personFields` selects which fields to return on the populated response.","parameters":{"type":"object","properties":{"person":{"type":"object","description":"Person resource body, e.g. { names: [{ givenName, familyName }], emailAddresses: [...] }."},"personFields":{"type":"string"}},"required":["person"]},"requiredScopes":["https://www.googleapis.com/auth/contacts"],"class":"mutation","cas":"none","externalEffect":true},{"name":"people.update","description":"Update a personal contact. `updatePersonFields` is required and is a comma-separated FieldMask of the mutated top-level fields. The Person body must include the current `etag` for optimistic concurrency.","parameters":{"type":"object","properties":{"resourceName":{"type":"string","description":"Resource name like \"people/{contact_id}\"."},"updatePersonFields":{"type":"string","description":"Comma-separated FieldMask of mutated top-level fields, e.g. \"names,emailAddresses\"."},"personFields":{"type":"string","description":"Field mask selecting which fields the response should re-populate."},"person":{"type":"object","description":"Person body with `etag` from the prior read and the new field values."}},"required":["resourceName","updatePersonFields","person"]},"requiredScopes":["https://www.googleapis.com/auth/contacts"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"people.delete","description":"Delete a personal contact by resource name.","parameters":{"type":"object","properties":{"resourceName":{"type":"string","description":"Resource name like \"people/{contact_id}\"."}},"required":["resourceName"]},"requiredScopes":["https://www.googleapis.com/auth/contacts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"groups.create","description":"Create a user-owned contact group (label) via \"contactGroups:create\". `contactGroup.name` is the human-readable label. The People API has no Idempotency-Key on this endpoint; consecutive POSTs produce duplicate groups, so the MutationGuard layer must dedupe.","parameters":{"type":"object","properties":{"contactGroup":{"type":"object","description":"ContactGroup body, e.g. { name: \"Customers\" }."},"readGroupFields":{"type":"string","description":"Comma-separated FieldMask selecting which group fields the response should populate, e.g. \"name,clientData\"."}},"required":["contactGroup"]},"requiredScopes":["https://www.googleapis.com/auth/contacts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"people.batchGet","description":"Read up to 200 contacts in one round trip. `resourceNames` is a repeated query parameter.","parameters":{"type":"object","properties":{"resourceNames":{"type":"array","items":{"type":"string"},"description":"Up to 200 \"people/{contact_id}\" resource names."},"personFields":{"type":"string"}},"required":["resourceNames","personFields"]},"requiredScopes":["https://www.googleapis.com/auth/contacts.readonly"],"class":"read"}]},{"kind":"google-docs","displayName":"Google Docs","description":"Read and draft into the user's Google Docs. Fetch a document's plaintext body, create a new doc from a title + initial body, and append text with optional revision-id CAS guarding concurrent edits.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/documents","https://www.googleapis.com/auth/drive.file"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"doc","defaultConsistencyModel":"authoritative","rateLimit":{"requests":300,"windowMs":60000,"scope":"oauth-client"},"capabilities":[{"name":"get_document","class":"read","description":"Fetch a Google Doc by id. Returns the title, the plaintext body (paragraph + textRun blocks collapsed), the underlying structured content for callers that need it, and the current revisionId for use as CAS on subsequent writes.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"Docs document id (the slug after /document/d/ in the URL)."}},"required":["documentId"]}},{"name":"create_document","class":"mutation","description":"Create a new Google Doc with the given title. When `body` is supplied the text is inserted at the start of the doc via a follow-up batchUpdate. Returns the new documentId + revisionId.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"title":{"type":"string","description":"Title shown in Drive and the Docs tab."},"body":{"type":"string","description":"Optional plaintext body to insert at index 1 immediately after create."}},"required":["title"]}},{"name":"append_text","class":"mutation","description":"Append plaintext to the end of an existing Doc via a single insertText batchUpdate. When `requiredRevisionId` is supplied the request is rejected by Docs if any other writer has committed between read and write — surfaced as ResourceContention.","cas":"etag-if-match","externalEffect":true,"parameters":{"type":"object","properties":{"documentId":{"type":"string"},"text":{"type":"string","description":"Plaintext to append (a leading newline is added if the doc is non-empty)."},"requiredRevisionId":{"type":"string","description":"Optional revisionId from a prior get_document; when present, request fails fast on a concurrent edit."}},"required":["documentId","text"]}},{"name":"delete_document","class":"mutation","description":"Trash a Google Doc via the Drive API (PATCH /drive/v3/files/{id} with trashed=true). Trashing is idempotent: repeating the call leaves the file in the trash and yields the same response. Requires drive.file scope on a file this app created or opened.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"Docs document id (also the Drive file id)."}},"required":["documentId"]}},{"name":"export_document","class":"read","description":"Export a Google Doc to PDF, HTML, plaintext, DOCX, ODT, RTF, EPUB, or Markdown via the Drive API export endpoint. Returns the exported bytes as a base64 string + the resolved mime type. `format` is a friendly alias (pdf|html|text|docx|odt|rtf|epub|markdown); pass `mimeType` to use any other Drive-supported export mime.","parameters":{"type":"object","properties":{"documentId":{"type":"string"},"format":{"type":"string","description":"Friendly format alias: pdf, html, text, docx, odt, rtf, epub, markdown."},"mimeType":{"type":"string","description":"Explicit export mime type (overrides `format`)."}},"required":["documentId"]}}]},{"kind":"google-drive","displayName":"Google Drive","description":"Read and watch files in the user's Google Drive. List a folder, fetch a document's contents (Docs/Sheets/PDFs/.docx), and subscribe to folder changes via push notifications.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/drive.readonly","https://www.googleapis.com/auth/drive.file"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"storage","defaultConsistencyModel":"authoritative","rateLimit":{"requests":1000,"windowMs":60000,"scope":"oauth-client"},"capabilities":[{"name":"list_files","class":"read","description":"List files visible to the connected Drive account. Optionally scope to a folder by id and/or pass a Drive query string (e.g., \"mimeType='application/pdf' and modifiedTime > '2025-01-01T00:00:00Z'\").","parameters":{"type":"object","properties":{"folderId":{"type":"string","description":"Drive folder id; when present, restricts to direct children."},"query":{"type":"string","description":"Optional Drive query expression; appended with AND if folderId is set."},"pageSize":{"type":"integer","minimum":1,"maximum":1000,"default":100},"pageToken":{"type":"string","description":"Continuation token returned by a previous call."}}}},{"name":"read_file","class":"read","description":"Read a file's contents. Google-native types are exported (Docs → text/plain by default, Sheets → text/csv, Slides → application/pdf); binary types are returned as base64.","parameters":{"type":"object","properties":{"fileId":{"type":"string"},"exportMime":{"type":"string","description":"Export mime override for Google-native types. Defaults: Docs=text/plain, Sheets=text/csv, Slides=application/pdf."}},"required":["fileId"]}},{"name":"watch_folder","class":"mutation","description":"Create a push-notification channel for a folder. Drive POSTs change notifications to `address`; the channel expires at `expiration` (max 7 days). Pass the same channelId on retry to replay the existing channel.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/drive"],"parameters":{"type":"object","properties":{"folderId":{"type":"string"},"channelId":{"type":"string","description":"Caller-controlled UUID; also used as idempotency key."},"address":{"type":"string","description":"HTTPS URL Drive will POST change notifications to."},"ttlMs":{"type":"integer","minimum":60000,"description":"Channel lifetime in ms. Drive caps at 7 days."}},"required":["folderId","channelId","address"]}},{"name":"upload_file","class":"mutation","description":"Upload a file to Drive via multipart upload. `content` is the file body; set `encoding='base64'` for binary payloads. Optional `parents` places the file in a specific folder.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/drive.file"],"parameters":{"type":"object","properties":{"name":{"type":"string","description":"File name including extension."},"mimeType":{"type":"string","description":"MIME type. Defaults to 'application/octet-stream'."},"parents":{"type":"array","items":{"type":"string"},"description":"Parent folder ids."},"content":{"type":"string","description":"File contents. Decoded per `encoding`."},"encoding":{"type":"string","enum":["utf-8","base64"],"default":"utf-8"}},"required":["name","content"]}},{"name":"create_folder","class":"mutation","description":"Create a folder in Drive. Optionally nest under `parents`. Returns the new folder's id.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/drive.file"],"parameters":{"type":"object","properties":{"name":{"type":"string"},"parents":{"type":"array","items":{"type":"string"},"description":"Parent folder ids."}},"required":["name"]}},{"name":"delete_file","class":"mutation","description":"Permanently delete a file or folder by id. Bypasses trash — the operation is irreversible.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/drive.file"],"parameters":{"type":"object","properties":{"fileId":{"type":"string"}},"required":["fileId"]}},{"name":"move_file","class":"mutation","description":"Move a file/folder by changing its parents. Removes `removeParents` and adds `addParents` in a single PATCH. At least one of removeParents/addParents is required.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/drive.file"],"parameters":{"type":"object","properties":{"fileId":{"type":"string"},"addParents":{"type":"array","items":{"type":"string"}},"removeParents":{"type":"array","items":{"type":"string"}}},"required":["fileId"]}}]},{"kind":"google-forms","displayName":"Google Forms","description":"Read a Google Form's schema and paginate its responses for KB ingest, lead routing, or analytics. Returns answers keyed by questionId with the original item tree available for question→title joins.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/forms.body.readonly","https://www.googleapis.com/auth/forms.responses.readonly","https://www.googleapis.com/auth/forms.body"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"other","defaultConsistencyModel":"cache","rateLimit":{"requests":300,"windowMs":60000,"scope":"oauth-client"},"capabilities":[{"name":"get_form","class":"read","description":"Fetch the full Form resource by id. Returns info (title/description), the item tree (questions + sections), the current revisionId, and the public responderUri. Use the item tree to map answer questionIds back to human-readable question titles.","parameters":{"type":"object","properties":{"formId":{"type":"string","description":"Forms form id (the slug after /forms/d/ in the editor URL)."}},"required":["formId"]}},{"name":"list_responses","class":"read","description":"List form responses with pagination. `filter` accepts the Forms timestamp grammar (e.g. `timestamp > \"2026-01-01T00:00:00Z\"`) for incremental ingest. Each response carries flattened `answers: {questionId: {value: string[]}}` plus the original payload at `raw`.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"pageSize":{"type":"integer","minimum":1,"maximum":5000,"default":100,"description":"Max responses to return in this page. Forms API caps at 5000."},"pageToken":{"type":"string","description":"nextPageToken from a prior call to continue the same page sequence."},"filter":{"type":"string","description":"Optional Forms responses filter (timestamp grammar)."}},"required":["formId"]}},{"name":"get_response","class":"read","description":"Fetch a single response by id — the common path when a Forms watch notification delivers only the responseId.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"responseId":{"type":"string"}},"required":["formId","responseId"]}},{"name":"create_form","class":"mutation","description":"Create a new Google Form. Returns the freshly-created Form resource (formId, info, revisionId, responderUri). Only info.title/documentTitle are accepted at creation time per Forms API; use batch_update afterwards to add items.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/forms.body"],"parameters":{"type":"object","properties":{"title":{"type":"string","description":"Form title shown above the questions (info.title)."},"documentTitle":{"type":"string","description":"Drive document title (info.documentTitle). Defaults to `title` when omitted."}},"required":["title"]}},{"name":"batch_update","class":"mutation","description":"Apply a batch of Forms `Request` objects to an existing form (add items, update info, move/delete items, etc.). The `requests` array is passed through unchanged to the Forms API — see Google's Forms batchUpdate request reference.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://www.googleapis.com/auth/forms.body"],"parameters":{"type":"object","properties":{"formId":{"type":"string"},"requests":{"type":"array","description":"Array of Forms `Request` objects passed through to the batchUpdate endpoint.","items":{"type":"object"}},"includeFormInResponse":{"type":"boolean","default":false,"description":"When true, the response body includes the updated Form resource at `form`."},"writeControl":{"type":"object","description":"Optional Forms WriteControl object (e.g. `{requiredRevisionId: 'rev_1'}`) to guard against concurrent edits."}},"required":["formId","requests"]}}]},{"kind":"google-gemini","displayName":"Google Gemini","description":"Generate content, chat, create videos, and perform AI tasks with Google Gemini models.","auth":{"kind":"api-key","hint":"Google Gemini API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"models.list","description":"List available Gemini models.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"chat.generate","description":"Chat with Gemini and generate text responses.","parameters":{"type":"object","properties":{"model":{"type":"string"},"prompt":{"type":"string"},"temperature":{"type":"number"},"maxTokens":{"type":"integer"}},"required":["model","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"content.generate","description":"Generate content using Gemini with advanced options.","parameters":{"type":"object","properties":{"model":{"type":"string"},"prompt":{"type":"string"},"safetySettings":{"type":"object"}},"required":["model","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"video.generate","description":"Generate videos using Gemini video generation models.","parameters":{"type":"object","properties":{"model":{"type":"string"},"prompt":{"type":"string"},"duration":{"type":"integer"},"aspectRatio":{"type":"string"}},"required":["model","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"image.generateFromImage","description":"Generate content from an input image.","parameters":{"type":"object","properties":{"model":{"type":"string"},"prompt":{"type":"string"},"imageData":{"type":"string"}},"required":["model","prompt","imageData"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"search.generateWithFile","description":"Generate content with file search capabilities.","parameters":{"type":"object","properties":{"model":{"type":"string"},"query":{"type":"string"},"fileUri":{"type":"string"}},"required":["model","query","fileUri"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"audio.textToSpeech","description":"Convert text to speech using Gemini.","parameters":{"type":"object","properties":{"model":{"type":"string"},"text":{"type":"string"},"voice":{"type":"string"},"languageCode":{"type":"string"}},"required":["model","text","voice"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"google-meet","displayName":"Google Meet","description":"Create Google Meet spaces, fetch post-meeting conference records, and read participants, recordings, and transcripts via the Google Meet REST API v2.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/meetings.space.created","https://www.googleapis.com/auth/meetings.space.readonly","https://www.googleapis.com/auth/meetings.space.settings","https://www.googleapis.com/auth/drive.readonly"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"calendar","defaultConsistencyModel":"authoritative","capabilities":[{"name":"spaces.create","description":"Create a Meet space and return its meet.google.com URL. The space lives until the calling user deletes it or it expires per Google retention rules.","parameters":{"type":"object","properties":{"config":{"type":"object","description":"Optional SpaceConfig: accessType (OPEN | TRUSTED | RESTRICTED), entryPointAccess (ALL | CREATOR_APP_ONLY), moderation, attendanceReport, artifactConfig, chatRestriction, presentRestriction, defaultJoinAsViewerType."}}},"requiredScopes":["https://www.googleapis.com/auth/meetings.space.created"],"class":"mutation","cas":"none","externalEffect":true},{"name":"spaces.get","description":"Read a Meet space by resource name (e.g. \"spaces/abc-defg-hij\") or by short meeting code.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Resource name like \"spaces/{space_id}\" or \"spaces/{meeting_code}\"."}},"required":["name"]},"requiredScopes":["https://www.googleapis.com/auth/meetings.space.readonly"],"class":"read"},{"name":"spaces.update","description":"Patch a Meet space (accessType, entryPointAccess, moderation toggles, artifactConfig, chat/present restrictions). Caller supplies updateMask to specify mutated fields.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Resource name like \"spaces/{space_id}\"."},"updateMask":{"type":"string","description":"Comma-separated FieldMask of mutated fields, e.g. \"config.accessType,config.moderation\"."},"config":{"type":"object","description":"New SpaceConfig values."}},"required":["name"]},"requiredScopes":["https://www.googleapis.com/auth/meetings.space.settings"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"spaces.endActiveConference","description":"Terminate the currently active conference inside a Meet space. No-op (HTTP 200) if no conference is active.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Resource name like \"spaces/{space_id}\"."}},"required":["name"]},"requiredScopes":["https://www.googleapis.com/auth/meetings.space.created"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conferenceRecords.list","description":"List conference records for meetings the calling user attended or hosted. Supports server-side filtering by space.name and end_time.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer","minimum":1,"maximum":100},"pageToken":{"type":"string"},"filter":{"type":"string","description":"EBNF filter, e.g. 'space.name=\"spaces/abc\"' or 'end_time>=\"2024-01-01T00:00:00Z\"'."}}},"requiredScopes":["https://www.googleapis.com/auth/meetings.space.readonly"],"class":"read"},{"name":"conferenceRecords.get","description":"Read a conference record by resource name (e.g. \"conferenceRecords/abc123\").","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Resource name like \"conferenceRecords/{conference_record_id}\"."}},"required":["name"]},"requiredScopes":["https://www.googleapis.com/auth/meetings.space.readonly"],"class":"read"},{"name":"conferenceRecords.participants.list","description":"List participants for a finished conference, including anonymous and phone-dial-in attendees.","parameters":{"type":"object","properties":{"parent":{"type":"string","description":"Parent conferenceRecords/{conference_record_id}."},"pageSize":{"type":"integer","minimum":1,"maximum":250},"pageToken":{"type":"string"},"filter":{"type":"string","description":"EBNF filter, e.g. 'earliest_start_time<=\"2024-01-01T00:00:00Z\"'."}},"required":["parent"]},"requiredScopes":["https://www.googleapis.com/auth/meetings.space.readonly"],"class":"read"},{"name":"conferenceRecords.recordings.list","description":"List recordings for a conference record. Each entry includes the Drive file id and DriveFileExportUri for downstream Drive fetches.","parameters":{"type":"object","properties":{"parent":{"type":"string","description":"Parent conferenceRecords/{conference_record_id}."},"pageSize":{"type":"integer","minimum":1,"maximum":100},"pageToken":{"type":"string"}},"required":["parent"]},"requiredScopes":["https://www.googleapis.com/auth/meetings.space.readonly"],"class":"read"},{"name":"conferenceRecords.recordings.get","description":"Read a single recording by resource name.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Resource name like \"conferenceRecords/{conference_record_id}/recordings/{recording_id}\"."}},"required":["name"]},"requiredScopes":["https://www.googleapis.com/auth/meetings.space.readonly"],"class":"read"},{"name":"conferenceRecords.transcripts.list","description":"List transcripts (auto-generated captions exports) for a conference record.","parameters":{"type":"object","properties":{"parent":{"type":"string","description":"Parent conferenceRecords/{conference_record_id}."},"pageSize":{"type":"integer","minimum":1,"maximum":100},"pageToken":{"type":"string"}},"required":["parent"]},"requiredScopes":["https://www.googleapis.com/auth/meetings.space.readonly"],"class":"read"},{"name":"conferenceRecords.transcripts.get","description":"Read a transcript by resource name; payload links to the Drive Doc holding the transcript text.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Resource name like \"conferenceRecords/{conference_record_id}/transcripts/{transcript_id}\"."}},"required":["name"]},"requiredScopes":["https://www.googleapis.com/auth/meetings.space.readonly"],"class":"read"}]},{"kind":"google-my-business","displayName":"Google My Business","description":"Manage Google Business Profile (formerly Google My Business): list accounts and locations, read customer reviews, and post owner replies.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/business.manage"],"clientIdEnv":"GOOGLE_MY_BUSINESS_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_MY_BUSINESS_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"accounts.list","description":"List Business Profile accounts the authenticated user owns or co-manages.","parameters":{"type":"object","properties":{"pageSize":{"type":"integer","minimum":1,"maximum":50},"pageToken":{"type":"string"},"filter":{"type":"string"}},"required":[]},"requiredScopes":["https://www.googleapis.com/auth/business.manage"],"class":"read"},{"name":"locations.list","description":"List locations under a Business Profile account (Business Information API).","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Bare account id (the trailing segment of `accounts/{accountId}`)."},"pageSize":{"type":"integer","minimum":1,"maximum":100},"pageToken":{"type":"string"},"filter":{"type":"string"},"readMask":{"type":"string","description":"Field mask selecting which Location fields to return, e.g. `name,title,storefrontAddress`."}},"required":["accountId","readMask"]},"requiredScopes":["https://www.googleapis.com/auth/business.manage"],"class":"read"},{"name":"reviews.list","description":"List customer reviews for a location (legacy v4 endpoint — Google never migrated reviews onto the v1 split APIs).","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"locationId":{"type":"string"},"pageSize":{"type":"integer","minimum":1,"maximum":50},"pageToken":{"type":"string"},"orderBy":{"type":"string","description":"Sort order, e.g. `updateTime desc` or `rating desc`."}},"required":["accountId","locationId"]},"requiredScopes":["https://www.googleapis.com/auth/business.manage"],"class":"read"},{"name":"reviews.get","description":"Get a single customer review by id.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"locationId":{"type":"string"},"reviewId":{"type":"string"}},"required":["accountId","locationId","reviewId"]},"requiredScopes":["https://www.googleapis.com/auth/business.manage"],"class":"read"},{"name":"reviews.reply.create","description":"Create or replace the owner reply on a customer review (idempotent upsert on the review name).","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"locationId":{"type":"string"},"reviewId":{"type":"string"},"comment":{"type":"string","description":"Reply text, up to 4096 characters.","maxLength":4096}},"required":["accountId","locationId","reviewId","comment"]},"requiredScopes":["https://www.googleapis.com/auth/business.manage"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"reviews.reply.delete","description":"Delete the owner reply on a customer review.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"locationId":{"type":"string"},"reviewId":{"type":"string"}},"required":["accountId","locationId","reviewId"]},"requiredScopes":["https://www.googleapis.com/auth/business.manage"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"localPosts.create","description":"Publish a Google Business Profile local post (status update, offer, event, or call-to-action) on a location.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"locationId":{"type":"string"},"languageCode":{"type":"string","description":"BCP-47 language code, e.g. \"en\"."},"summary":{"type":"string","description":"Post body text (up to 1,500 characters).","maxLength":1500},"topicType":{"type":"string","description":"STANDARD | EVENT | OFFER | ALERT."},"callToAction":{"type":"object","description":"Optional { actionType, url } block, e.g. { actionType: \"LEARN_MORE\", url: \"https://...\" }."},"event":{"type":"object","description":"For topicType=EVENT: { title, schedule: { startDate, endDate, ... } }."},"offer":{"type":"object","description":"For topicType=OFFER: { couponCode, redeemOnlineUrl, termsConditions }."},"media":{"type":"array","description":"Optional MediaItem list to attach images/video to the post."}},"required":["accountId","locationId","languageCode","summary"]},"requiredScopes":["https://www.googleapis.com/auth/business.manage"],"class":"mutation","cas":"none","externalEffect":true},{"name":"localPosts.delete","description":"Delete a local post from a location. Repeating the call on an already-deleted post yields 404 but is idempotent in effect.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"locationId":{"type":"string"},"localPostId":{"type":"string"}},"required":["accountId","locationId","localPostId"]},"requiredScopes":["https://www.googleapis.com/auth/business.manage"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.create","description":"Upload a photo or video to a Google Business Profile location via the v4 /media endpoint. Pass a sourceUrl Google can fetch (HTTPS, publicly reachable). For bytestream uploads use the /media:startUpload + PUT bytestream flow instead.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"locationId":{"type":"string"},"mediaFormat":{"type":"string","description":"PHOTO | VIDEO."},"locationAssociation":{"type":"object","description":"Where the media attaches, e.g. { category: \"EXTERIOR\" } or { priceListItemId: \"...\" }."},"sourceUrl":{"type":"string","description":"Public HTTPS URL Google should fetch the media from."},"description":{"type":"string","description":"Optional caption shown alongside the media."}},"required":["accountId","locationId","mediaFormat","sourceUrl"]},"requiredScopes":["https://www.googleapis.com/auth/business.manage"],"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"google-search","displayName":"Google Search","description":"Search using Vertex AI Search (Discovery Engine).","auth":{"kind":"api-key","hint":"Google Cloud API key with Vertex AI Search access. Provide project ID and Vertex AI Search app (engine) ID per request."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"search","description":"Run a Vertex AI Search (Discovery Engine) query against a configured search app/engine.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Google Cloud project ID hosting the Vertex AI Search engine."},"appId":{"type":"string","description":"Vertex AI Search app (engine) ID."},"query":{"type":"string","description":"The query text to search."},"userPseudoId":{"type":"string","description":"Pseudonymized identifier for the user (max 128 chars). Improves personalization."}},"required":["projectId","appId","query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"google-search-console","displayName":"Google Search Console","description":"Inspect URLs against the Google index, run Search Analytics queries, and manage verified sites and sitemaps for properties the connected identity owns in Google Search Console.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/webmasters"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"other","defaultConsistencyModel":"cache","capabilities":[{"name":"urlInspection.index","description":"Inspect a URL against the Google index for a property in Search Console. Returns the indexing status, last crawl time, canonical URL, mobile usability, rich results status, and AMP analysis (POST /v1/urlInspection/index:inspect).","parameters":{"type":"object","properties":{"inspectionUrl":{"type":"string","description":"Fully-qualified URL to inspect. Must belong to the verified `siteUrl` property below."},"siteUrl":{"type":"string","description":"Verified property the inspectionUrl belongs to. URL-prefix property (e.g. \"https://example.com/\") or domain property (\"sc-domain:example.com\")."},"languageCode":{"type":"string","description":"BCP-47 language code (e.g. \"en-US\") that controls the locale of human-readable strings in the response."}},"required":["inspectionUrl","siteUrl"]},"requiredScopes":["https://www.googleapis.com/auth/webmasters"],"class":"read"},{"name":"searchAnalytics.query","description":"Run a Search Analytics query against a verified property. Pass startDate/endDate (ISO yyyy-MM-dd), optional dimensions (query, page, country, device, searchAppearance, date), filter groups, row limit, and aggregation type. Returns the rows Search Console emits with clicks, impressions, CTR, and average position (POST /webmasters/v3/sites/{siteUrl}/searchAnalytics/query).","parameters":{"type":"object","properties":{"siteUrl":{"type":"string","description":"Verified property identifier — URL-prefix or \"sc-domain:\" form."},"startDate":{"type":"string","description":"Inclusive start date, ISO yyyy-MM-dd. Search Console data lags 2–3 days."},"endDate":{"type":"string","description":"Inclusive end date, ISO yyyy-MM-dd."},"dimensions":{"type":"array","description":"Group-by dimensions, e.g. [\"query\",\"page\"]. Omit for a single totals row.","items":{"type":"string","enum":["query","page","country","device","searchAppearance","date"]}},"type":{"type":"string","description":"Search type filter: \"web\" (default), \"image\", \"video\", \"news\", \"discover\", \"googleNews\".","enum":["web","image","video","news","discover","googleNews"]},"dimensionFilterGroups":{"type":"array","description":"OR-grouped filters; each group is an AND of dimension/expression/operator filters.","items":{"type":"object"}},"aggregationType":{"type":"string","description":"\"auto\" (default) chooses byPage/byProperty per dimension set; \"byPage\" forces per-page aggregation.","enum":["auto","byPage","byProperty","byNewsShowcasePanel"]},"rowLimit":{"type":"integer","minimum":1,"maximum":25000,"description":"Max rows per page; Search Console caps at 25000."},"startRow":{"type":"integer","minimum":0,"description":"Zero-based offset for pagination."},"dataState":{"type":"string","description":"\"final\" (default, fully processed) or \"all\" (includes fresh-but-incomplete data from the last 1–2 days).","enum":["final","all"]}},"required":["siteUrl","startDate","endDate"]},"requiredScopes":["https://www.googleapis.com/auth/webmasters"],"class":"read"},{"name":"sites.list","description":"List every site the connected identity has at least read access to in Search Console. Returns the siteUrl identifiers other capabilities consume, plus the permissionLevel per site (GET /webmasters/v3/sites).","parameters":{"type":"object","properties":{}},"requiredScopes":["https://www.googleapis.com/auth/webmasters"],"class":"read"},{"name":"sites.add","description":"Add a site to the connected identity's Search Console account. The site will be unverified until ownership is proven through one of Search Console's verification methods (PUT /webmasters/v3/sites/{siteUrl}).","parameters":{"type":"object","properties":{"siteUrl":{"type":"string","description":"URL-prefix property (\"https://example.com/\") or domain property (\"sc-domain:example.com\") to add."}},"required":["siteUrl"]},"requiredScopes":["https://www.googleapis.com/auth/webmasters"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sites.delete","description":"Remove a site from the connected identity's Search Console account. The site itself is not affected; only the connected identity's access is revoked (DELETE /webmasters/v3/sites/{siteUrl}).","parameters":{"type":"object","properties":{"siteUrl":{"type":"string","description":"Property identifier to remove — URL-prefix or \"sc-domain:\" form."}},"required":["siteUrl"]},"requiredScopes":["https://www.googleapis.com/auth/webmasters"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sitemaps.list","description":"List every sitemap registered against a verified property in Search Console. Returns each sitemap's path, last-submitted time, last-downloaded time, type (sitemap/sitemapsIndex), and any errors/warnings (GET /webmasters/v3/sites/{siteUrl}/sitemaps).","parameters":{"type":"object","properties":{"siteUrl":{"type":"string","description":"Verified property identifier."},"sitemapIndex":{"type":"string","description":"Optional sitemap-index URL; if set, only sitemaps contained within that index are returned."}},"required":["siteUrl"]},"requiredScopes":["https://www.googleapis.com/auth/webmasters"],"class":"read"},{"name":"sitemaps.submit","description":"Submit a sitemap to Search Console for a verified property. The feedPath must be a fully-qualified URL hosted on the site; Search Console fetches it asynchronously after the call returns (PUT /webmasters/v3/sites/{siteUrl}/sitemaps/{feedpath}).","parameters":{"type":"object","properties":{"siteUrl":{"type":"string","description":"Verified property identifier the sitemap belongs to."},"feedpath":{"type":"string","description":"Fully-qualified sitemap URL, e.g. \"https://example.com/sitemap.xml\". The runtime URL-encodes this when substituting into the path."}},"required":["siteUrl","feedpath"]},"requiredScopes":["https://www.googleapis.com/auth/webmasters"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sitemaps.delete","description":"Remove a submitted sitemap from a verified property in Search Console. The sitemap file at feedpath is not touched — only Search Console's record of the submission is dropped (DELETE /webmasters/v3/sites/{siteUrl}/sitemaps/{feedpath}).","parameters":{"type":"object","properties":{"siteUrl":{"type":"string","description":"Verified property identifier the sitemap belongs to."},"feedpath":{"type":"string","description":"Fully-qualified sitemap URL previously submitted, e.g. \"https://example.com/sitemap.xml\". The runtime URL-encodes this when substituting into the path."}},"required":["siteUrl","feedpath"]},"requiredScopes":["https://www.googleapis.com/auth/webmasters"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"google-sheets","displayName":"Google Sheets","description":"Bind your agent's knowledge base or pricing/availability lookup to a live Google Sheet. Edit the sheet, and the agent picks up changes — no redeploys.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/spreadsheets"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"spreadsheet","defaultConsistencyModel":"cache","rateLimit":{"requests":300,"windowMs":60000,"scope":"oauth-client"},"capabilities":[{"name":"list_rows","class":"read","description":"Return rows from the connected sheet. Each row is keyed by the header cells declared at connect time.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":500,"default":100}}}},{"name":"query_rows","class":"read","description":"Return rows matching every key=value pair in `predicate` (string equality, case-insensitive).","parameters":{"type":"object","properties":{"predicate":{"type":"object","additionalProperties":{"type":"string"}},"limit":{"type":"integer","minimum":1,"maximum":500,"default":100}},"required":["predicate"]}},{"name":"update_row","class":"mutation","description":"Update a row identified by `rowKey` (the value in the configured key column). Patch is a {column: newValue} map. Returns conflict if the row changed since the agent last read it.","cas":"optimistic-read-verify","externalEffect":true,"parameters":{"type":"object","properties":{"rowKey":{"type":"string","description":"Value in the key column identifying the row to update."},"patch":{"type":"object","additionalProperties":{"type":"string"}},"expectedFingerprint":{"type":"string","description":"Optional. The fingerprint the agent read on its last list_rows/query_rows call. If supplied and stale, the update is rejected with conflict."}},"required":["rowKey","patch"]}},{"name":"append_row","class":"mutation","description":"Append rows to the end of `range` in `spreadsheetId`. `values` is a 2D array (rows × cells). `valueInputOption` defaults to USER_ENTERED so formulas + dates are parsed like a human-typed entry.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"spreadsheetId":{"type":"string"},"range":{"type":"string","description":"A1 notation, e.g. \"Sheet1!A1:C1\"."},"values":{"type":"array","items":{"type":"array","items":{"type":"string"}},"description":"2D array of cells; one inner array per appended row."},"valueInputOption":{"type":"string","enum":["RAW","USER_ENTERED"],"default":"USER_ENTERED"}},"required":["spreadsheetId","range","values"]}},{"name":"clear_range","class":"mutation","description":"Clear all cell values in `range` (formatting is preserved).","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"spreadsheetId":{"type":"string"},"range":{"type":"string","description":"A1 notation of the range to clear."}},"required":["spreadsheetId","range"]}},{"name":"create_sheet","class":"mutation","description":"Create a brand-new spreadsheet (workbook). Returns the new spreadsheetId. To add an additional tab inside an existing spreadsheet use the batchUpdate addSheet request (not modeled here).","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"title":{"type":"string","description":"Workbook title shown in Drive."}},"required":["title"]}}]},{"kind":"google-slides","displayName":"Google Slides","description":"Create presentations, refresh charts, and read Google Slides presentations.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/presentations"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"presentation.get","description":"Get a Google Slides presentation by ID.","parameters":{"type":"object","properties":{"presentationId":{"type":"string"}},"required":["presentationId"]},"requiredScopes":["https://www.googleapis.com/auth/presentations"],"class":"read"},{"name":"presentation.create","description":"Create a new Google Slides presentation.","parameters":{"type":"object","properties":{"title":{"type":"string"}},"required":["title"]},"requiredScopes":["https://www.googleapis.com/auth/presentations"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"charts.refresh","description":"Refresh Sheets charts embedded in a presentation.","parameters":{"type":"object","properties":{"presentationId":{"type":"string"},"objectIds":{"type":"array","items":{"type":"string"}}},"required":["presentationId"]},"requiredScopes":["https://www.googleapis.com/auth/presentations"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"presentation.update","description":"Apply a batch of Slides API edit requests (insertText, deleteObject, updateShapeProperties, etc.) to an existing presentation. Pass `requests` as an array of Slides batchUpdate Request objects; the API applies them atomically (POST /presentations/{presentationId}:batchUpdate).","parameters":{"type":"object","properties":{"presentationId":{"type":"string","description":"Presentation resource ID."},"requests":{"type":"array","description":"Array of Slides batchUpdate Request objects, e.g. [{ insertText: { objectId, text } }].","items":{"type":"object"}},"writeControl":{"type":"object","description":"Optional WriteControl object with required_revision_id for optimistic locking."}},"required":["presentationId","requests"]},"requiredScopes":["https://www.googleapis.com/auth/presentations"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"slides.duplicate","description":"Duplicate an existing slide within a presentation. Issues a Slides batchUpdate with a `duplicateObject` request keyed by the slide's objectId (POST /presentations/{presentationId}:batchUpdate).","parameters":{"type":"object","properties":{"presentationId":{"type":"string","description":"Presentation resource ID."},"objectId":{"type":"string","description":"Object ID of the slide to duplicate (slides are page-level objects)."},"objectIds":{"type":"object","description":"Optional map of source-objectId -> desired-objectId for the duplicated children, letting callers pin stable IDs."}},"required":["presentationId","objectId"]},"requiredScopes":["https://www.googleapis.com/auth/presentations"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"google-tasks","displayName":"Google Tasks","description":"Manage tasks in Google Tasks task lists.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/tasks"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tasklists.list","description":"List all task lists.","parameters":{"type":"object","properties":{"maxResults":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasklists.get","description":"Get a specific task list.","parameters":{"type":"object","properties":{"tasklistId":{"type":"string"}},"required":["tasklistId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.list","description":"List tasks in a task list.","parameters":{"type":"object","properties":{"tasklistId":{"type":"string"},"maxResults":{"type":"integer"},"pageToken":{"type":"string"},"showCompleted":{"type":"boolean"},"showDeleted":{"type":"boolean"},"showHidden":{"type":"boolean"},"showAssigned":{"type":"boolean"},"updatedMin":{"type":"string"},"dueMin":{"type":"string"},"dueMax":{"type":"string"},"completedMin":{"type":"string"},"completedMax":{"type":"string"}},"required":["tasklistId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.get","description":"Get a specific task.","parameters":{"type":"object","properties":{"tasklistId":{"type":"string"},"taskId":{"type":"string"}},"required":["tasklistId","taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.create","description":"Create a new task in a task list.","parameters":{"type":"object","properties":{"tasklistId":{"type":"string"},"title":{"type":"string"},"notes":{"type":"string"},"dueDate":{"type":"string"},"parent":{"type":"string"},"previous":{"type":"string"}},"required":["tasklistId","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update an existing task.","parameters":{"type":"object","properties":{"tasklistId":{"type":"string"},"taskId":{"type":"string"},"title":{"type":"string"},"notes":{"type":"string"},"dueDate":{"type":"string"},"status":{"type":"string"}},"required":["tasklistId","taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"tasks.delete","description":"Delete a task.","parameters":{"type":"object","properties":{"tasklistId":{"type":"string"},"taskId":{"type":"string"}},"required":["tasklistId","taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.complete","description":"Mark a task as completed. Issues a PATCH against the task with status=\"completed\"; Google records `completed` as the current time. To uncomplete, use tasks.update with status=\"needsAction\".","parameters":{"type":"object","properties":{"tasklistId":{"type":"string","description":"Containing task list ID."},"taskId":{"type":"string","description":"Task ID to mark complete."}},"required":["tasklistId","taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.create","description":"Create a new task list owned by the authenticated user.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"Display title of the new task list."}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"google-vertexai","displayName":"Google Vertex AI","description":"Generate content and images using Gemini and Imagen models on Google Vertex AI.","auth":{"kind":"api-key","hint":"Google Cloud API key with Vertex AI permissions."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"content.generate","description":"Generate content using Gemini model.","parameters":{"type":"object","properties":{"model":{"type":"string"},"userMessage":{"type":"string"},"systemMessage":{"type":"string"},"temperature":{"type":"number"},"maxOutputTokens":{"type":"integer"},"thinkingLevel":{"type":"string"}},"required":["model","userMessage"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"content.generateWithFiles","description":"Generate content with file attachments (images, PDFs, text, audio, video).","parameters":{"type":"object","properties":{"model":{"type":"string"},"userMessage":{"type":"string"},"files":{"type":"object"},"temperature":{"type":"number"},"maxOutputTokens":{"type":"integer"}},"required":["model","userMessage","files"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"image.generate","description":"Generate images using Imagen model.","parameters":{"type":"object","properties":{"prompt":{"type":"string"},"numberOfImages":{"type":"integer"},"sampleCount":{"type":"integer"}},"required":["prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"models.list","description":"List available models in the location.","parameters":{"type":"object","properties":{"filter":{"type":"string"},"pageSize":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"content.countTokens","description":"Count tokens for a given prompt.","parameters":{"type":"object","properties":{"model":{"type":"string"},"userMessage":{"type":"string"}},"required":["model","userMessage"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"googlechat","displayName":"Google Chat","description":"Send messages to Google Chat spaces and direct messages, fetch message details, add members to spaces, list/search messages, and locate space members.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/chat.messages","https://www.googleapis.com/auth/chat.spaces","https://www.googleapis.com/auth/chat.memberships","https://www.googleapis.com/auth/chat.messages.readonly"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"send.amessage","description":"Send a message to a Google Chat space or DM. Pass the parent space (e.g. \"spaces/AAAA1234\") and a Chat message payload (text or cardsV2).","parameters":{"type":"object","properties":{"space":{"type":"string","description":"Space resource name, e.g. \"spaces/AAAA1234\"."},"message":{"type":"object","description":"A Chat Message resource. Most callers set { text } or { cardsV2 }."},"threadKey":{"type":"string","description":"Optional thread key for grouping replies under a synthetic thread."},"messageReplyOption":{"type":"string","enum":["MESSAGE_REPLY_OPTION_UNSPECIFIED","REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD","REPLY_MESSAGE_OR_FAIL"],"description":"Controls thread reply behavior when message.thread is set."}},"required":["space","message"]},"requiredScopes":["https://www.googleapis.com/auth/chat.messages"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.direct.message.details","description":"Read a direct message by resource name. Direct messages live under the DM space (\"spaces/{dmId}/messages/{messageId}\").","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Full message resource name, e.g. \"spaces/AAAA/messages/BBBB\"."}},"required":["name"]},"requiredScopes":["https://www.googleapis.com/auth/chat.messages.readonly"],"class":"read"},{"name":"add.aspace.member","description":"Add a human user or Chat app as a member to a space. Provide the parent space and a Membership resource (member.name = \"users/{userId}\").","parameters":{"type":"object","properties":{"space":{"type":"string","description":"Parent space resource name, e.g. \"spaces/AAAA1234\"."},"membership":{"type":"object","description":"Membership resource. Typically { member: { name: \"users/123\", type: \"HUMAN\" } } or { groupMember: { name: \"groups/xyz\" } }."}},"required":["space","membership"]},"requiredScopes":["https://www.googleapis.com/auth/chat.memberships"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.message.details","description":"Read a Chat message by full resource name (\"spaces/{space}/messages/{message}\"). Returns the Message resource including text, sender, thread, and any cardsV2 payload.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Full message resource name, e.g. \"spaces/AAAA/messages/BBBB\"."}},"required":["name"]},"requiredScopes":["https://www.googleapis.com/auth/chat.messages.readonly"],"class":"read"},{"name":"search.messages","description":"List messages in a space, optionally filtered with the Chat API filter syntax (e.g. \"createTime > \\\"2024-01-01T00:00:00Z\\\"\") and ordered by createTime.","parameters":{"type":"object","properties":{"space":{"type":"string","description":"Parent space resource name, e.g. \"spaces/AAAA1234\"."},"filter":{"type":"string","description":"Chat API list filter expression."},"orderBy":{"type":"string","description":"e.g. \"createTime desc\"."},"pageSize":{"type":"integer","minimum":1,"maximum":1000},"pageToken":{"type":"string"},"showDeleted":{"type":"boolean"}},"required":["space"]},"requiredScopes":["https://www.googleapis.com/auth/chat.messages.readonly"],"class":"read"},{"name":"find.member","description":"List or filter memberships of a space to locate a specific user, group, or app. Use filter (e.g. \"member.type = \\\"HUMAN\\\"\") to narrow results.","parameters":{"type":"object","properties":{"space":{"type":"string","description":"Parent space resource name, e.g. \"spaces/AAAA1234\"."},"filter":{"type":"string","description":"Chat API membership filter expression."},"pageSize":{"type":"integer","minimum":1,"maximum":1000},"pageToken":{"type":"string"},"showGroups":{"type":"boolean"},"showInvited":{"type":"boolean"}},"required":["space"]},"requiredScopes":["https://www.googleapis.com/auth/chat.memberships"],"class":"read"},{"name":"message.update","description":"Edit a previously sent message in a Google Chat space. Pass the full message resource name and an updateMask listing the fields being modified (e.g. \"text\" or \"cardsV2\"). Body is the partial Message resource holding the new values.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Full message resource name, e.g. \"spaces/AAAA/messages/BBBB\"."},"updateMask":{"type":"string","description":"Comma-separated list of fields to update, e.g. \"text\" or \"cardsV2,attachment\"."},"message":{"type":"object","description":"Partial Message resource carrying the new field values referenced by updateMask."}},"required":["name","updateMask","message"]},"requiredScopes":["https://www.googleapis.com/auth/chat.messages"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"message.delete","description":"Delete a message from a Google Chat space. Only the authenticated user's own messages can be deleted with user-token credentials; Chat apps can delete their own messages.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Full message resource name, e.g. \"spaces/AAAA/messages/BBBB\"."},"force":{"type":"boolean","description":"When true, also delete threaded replies; defaults to false."}},"required":["name"]},"requiredScopes":["https://www.googleapis.com/auth/chat.messages"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"space.create","description":"Create a named Google Chat space. Pass a Space resource with displayName and spaceType (e.g. \"SPACE\" for a named group space). For DM creation use spaces.setup; this capability covers the spaces.create endpoint for human-named spaces.","parameters":{"type":"object","properties":{"space":{"type":"object","description":"Space resource. Typically { displayName: \"Engineering\", spaceType: \"SPACE\" } or { spaceType: \"GROUP_CHAT\" }."},"requestId":{"type":"string","description":"Optional client-supplied request ID; Chat uses it to deduplicate retries server-side."}},"required":["space"]},"requiredScopes":["https://www.googleapis.com/auth/chat.spaces"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"gorgias","displayName":"Gorgias","description":"Search, read, create, and update Gorgias support tickets, messages, and customers for ecommerce help desks.","auth":{"kind":"oauth2","authorizationUrl":"https://{subdomain}.gorgias.com/oauth2/authorize","tokenUrl":"https://{subdomain}.gorgias.com/oauth2/token","scopes":["openid","profile","offline","tickets:read","tickets:write","customers:read","customers:write","messages:read","messages:write"],"clientIdEnv":"GORGIAS_OAUTH_CLIENT_ID","clientSecretEnv":"GORGIAS_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tickets.search","description":"List tickets, optionally filtered by status/channel/assignee/customer. Pass any Gorgias ticket-list query parameter.","parameters":{"type":"object","properties":{"status":{"type":"string"},"channel":{"type":"string"},"assignee_user":{"type":"integer"},"customer_id":{"type":"integer"},"order_by":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"}}},"requiredScopes":["tickets:read"],"class":"read"},{"name":"tickets.get","description":"Read a single Gorgias ticket by id.","parameters":{"type":"object","properties":{"ticketId":{"type":"integer"}},"required":["ticketId"]},"requiredScopes":["tickets:read"],"class":"read"},{"name":"tickets.create","description":"Create a Gorgias ticket. Pass the full ticket payload as defined by Gorgias (channel, customer, messages, etc.).","parameters":{"type":"object","properties":{"channel":{"type":"string"},"via":{"type":"string"},"subject":{"type":"string"},"customer":{"type":"object"},"messages":{"type":"array","items":{"type":"object"}},"status":{"type":"string"},"priority":{"type":"string"},"tags":{"type":"array","items":{"type":"object"}},"assignee_user":{"type":"object"},"assignee_team":{"type":"object"}},"required":["channel","via","customer","messages"]},"requiredScopes":["tickets:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.update","description":"Update a Gorgias ticket. Pass any subset of mutable ticket fields (status, priority, assignee_user, tags, etc.).","parameters":{"type":"object","properties":{"ticketId":{"type":"integer"},"status":{"type":"string"},"priority":{"type":"string"},"assignee_user":{"type":"object"},"assignee_team":{"type":"object"},"tags":{"type":"array","items":{"type":"object"}},"subject":{"type":"string"},"meta":{"type":"object"}},"required":["ticketId"]},"requiredScopes":["tickets:write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"messages.create","description":"Append a message (agent reply or internal note) to an existing Gorgias ticket.","parameters":{"type":"object","properties":{"ticketId":{"type":"integer"},"channel":{"type":"string"},"via":{"type":"string"},"sender":{"type":"object"},"receiver":{"type":"object"},"body_text":{"type":"string"},"body_html":{"type":"string"},"public":{"type":"boolean"},"source":{"type":"object"}},"required":["ticketId","channel","via","sender"]},"requiredScopes":["messages:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.search","description":"List customers, optionally filtered by email or external_id. Pass any Gorgias customer-list query parameter.","parameters":{"type":"object","properties":{"email":{"type":"string"},"external_id":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"}}},"requiredScopes":["customers:read"],"class":"read"},{"name":"customers.create","description":"Create a Gorgias customer. Pass the customer payload (name, email, channels, etc.).","parameters":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"firstname":{"type":"string"},"lastname":{"type":"string"},"language":{"type":"string"},"channels":{"type":"array","items":{"type":"object"}},"external_id":{"type":"string"},"data":{"type":"object"},"meta":{"type":"object"}},"required":["email"]},"requiredScopes":["customers:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.close","description":"Close a Gorgias ticket. Issues PUT /api/tickets/{ticketId} with status=\"closed\"; idempotent — already-closed tickets stay closed. Use tickets.update to set status to a different value (open, pending, resolved).","parameters":{"type":"object","properties":{"ticketId":{"type":"integer","description":"Gorgias ticket ID to close."}},"required":["ticketId"]},"requiredScopes":["tickets:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"gotify","displayName":"Gotify","description":"Send push notifications to a self-hosted Gotify instance.","auth":{"kind":"api-key","hint":"Gotify app token."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"notification.send","description":"Send a notification to Gotify.","parameters":{"type":"object","properties":{"title":{"type":"string"},"message":{"type":"string"},"priority":{"type":"integer"}},"required":["title","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"message.send","description":"Send a Gotify push notification (alias of notification.send for catalog discovery).","parameters":{"type":"object","properties":{"title":{"type":"string"},"message":{"type":"string"},"priority":{"type":"integer"}},"required":["title","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"message.delete","description":"Delete a previously sent Gotify message by id. Requires a Gotify client token in the {client_token} arg.","parameters":{"type":"object","properties":{"messageId":{"type":"integer","description":"Numeric Gotify message id to delete."},"client_token":{"type":"string","description":"Gotify client token (not an app token) authorised to manage messages."}},"required":["messageId","client_token"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"application.create","description":"Create a Gotify application and return the new application token. Requires a Gotify client token in the {client_token} arg.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Display name of the new application."},"description":{"type":"string","description":"Optional human-readable description."},"client_token":{"type":"string","description":"Gotify client token (not an app token) authorised to manage applications."}},"required":["name","client_token"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"gptzero-detect-ai","displayName":"GPTZero","description":"Detect AI-generated text with GPTZero API.","auth":{"kind":"api-key","hint":"GPTZero API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"scan.text","description":"Scan text content for AI-generated content.","parameters":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"scan.file","description":"Scan file for AI-generated content.","parameters":{"type":"object","properties":{"file":{"type":"string"}},"required":["file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"granola","displayName":"Granola","description":"Retrieve meeting notes, search for notes, and access note transcripts.","auth":{"kind":"api-key","hint":"Granola API key from Settings > API."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"notes.list","description":"List all notes with optional filtering by creation/update date and pagination.","parameters":{"type":"object","properties":{"created_after":{"type":"string","description":"ISO 8601 date to filter notes created after this date."},"created_before":{"type":"string","description":"ISO 8601 date to filter notes created before this date."},"updated_after":{"type":"string","description":"ISO 8601 date to filter notes updated after this date."},"page_size":{"type":"integer","description":"Number of notes per page (1–30), default 10."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"notes.get","description":"Retrieve a specific note by ID, with optional transcript inclusion.","parameters":{"type":"object","properties":{"note_id":{"type":"string","description":"The unique identifier of the note."},"include_transcript":{"type":"boolean","description":"Include the full meeting transcript showing who said what and when."}},"required":["note_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"greenhouse","displayName":"Greenhouse","description":"Search, advance, and update Greenhouse candidates, applications, jobs, offers, and scorecards through the Harvest API.","auth":{"kind":"api-key","hint":"Greenhouse Harvest API key. In Greenhouse: Configure → Dev Center → API Credential Management → Create New API Key → \"Harvest\". Persist the base64 of `<apiKey>:` (note the trailing colon — Basic auth requires it even with an empty password)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"candidates.search","description":"List or search Greenhouse candidates. Filter by email, updated_after, created_after, or job_id; paginate with page+per_page (max 500).","parameters":{"type":"object","properties":{"email":{"type":"string"},"updated_after":{"type":"string","format":"date-time"},"updated_before":{"type":"string","format":"date-time"},"created_after":{"type":"string","format":"date-time"},"created_before":{"type":"string","format":"date-time"},"job_id":{"type":"integer"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":500}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"candidates.get","description":"Fetch a single Greenhouse candidate by id (includes nested applications, attachments, custom fields).","parameters":{"type":"object","properties":{"candidateId":{"type":"integer"}},"required":["candidateId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"candidates.create","description":"Create a Greenhouse candidate. Body is the Harvest candidate payload (first_name, last_name, emails[], phone_numbers[], addresses[], social_media_addresses[], applications[], …). On-Behalf-Of is required.","parameters":{"type":"object","properties":{"onBehalfOf":{"type":"string","description":"Greenhouse user id to attribute the action to (audit log + permission check)."},"first_name":{"type":"string"},"last_name":{"type":"string"},"company":{"type":"string"},"title":{"type":"string"},"phone_numbers":{"type":"array","items":{"type":"object"}},"addresses":{"type":"array","items":{"type":"object"}},"email_addresses":{"type":"array","items":{"type":"object"}},"website_addresses":{"type":"array","items":{"type":"object"}},"social_media_addresses":{"type":"array","items":{"type":"object"}},"educations":{"type":"array","items":{"type":"object"}},"employments":{"type":"array","items":{"type":"object"}},"tags":{"type":"array","items":{"type":"string"}},"custom_fields":{"type":"object"},"applications":{"type":"array","items":{"type":"object"}},"activity_feed_notes":{"type":"array","items":{"type":"object"}}},"required":["onBehalfOf","first_name","last_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"candidates.update","description":"Patch a Greenhouse candidate. Body is a partial Harvest candidate payload — only the fields you send are touched; arrays replace wholesale.","parameters":{"type":"object","properties":{"candidateId":{"type":"integer"},"onBehalfOf":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"company":{"type":"string"},"title":{"type":"string"},"phone_numbers":{"type":"array","items":{"type":"object"}},"addresses":{"type":"array","items":{"type":"object"}},"email_addresses":{"type":"array","items":{"type":"object"}},"website_addresses":{"type":"array","items":{"type":"object"}},"social_media_addresses":{"type":"array","items":{"type":"object"}},"tags":{"type":"array","items":{"type":"string"}},"custom_fields":{"type":"object"}},"required":["candidateId","onBehalfOf"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"candidates.anonymize","description":"GDPR/CCPA anonymize a candidate. Greenhouse permanently scrubs PII from the record; the action is irreversible.","parameters":{"type":"object","properties":{"candidateId":{"type":"integer"},"onBehalfOf":{"type":"string"},"fields":{"type":"string","description":"Comma-separated list of categories to scrub: `personal`, `application`, `referrer`. Defaults to all."}},"required":["candidateId","onBehalfOf"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"applications.list","description":"List applications across the tenant. Filter by status (active, hired, rejected), job_id, candidate_id, or last_activity windows.","parameters":{"type":"object","properties":{"status":{"type":"string","enum":["active","hired","rejected","converted"]},"job_id":{"type":"integer"},"candidate_id":{"type":"integer"},"last_activity_after":{"type":"string","format":"date-time"},"last_activity_before":{"type":"string","format":"date-time"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":500}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"applications.get","description":"Fetch a single Greenhouse application by id (includes current_stage, jobs[], rejection_reason, scorecards[]).","parameters":{"type":"object","properties":{"applicationId":{"type":"integer"}},"required":["applicationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"applications.advance","description":"Advance an application to the next interview stage in its job kit. Body may carry `from_stage_id` for a safety check (Greenhouse rejects if the application has already moved).","parameters":{"type":"object","properties":{"applicationId":{"type":"integer"},"onBehalfOf":{"type":"string"},"from_stage_id":{"type":"integer"}},"required":["applicationId","onBehalfOf"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"applications.reject","description":"Reject an application. Body carries rejection_reason (id) and optional rejection_email (subject, body, send_email_at).","parameters":{"type":"object","properties":{"applicationId":{"type":"integer"},"onBehalfOf":{"type":"string"},"rejection_reason":{"type":"object","description":"{ id: <rejectionReasonId> }"},"notes":{"type":"string"},"rejection_email":{"type":"object"}},"required":["applicationId","onBehalfOf"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"applications.hire","description":"Hire an application. Body carries start_date (ISO date) and opening_id (the job opening being filled). Greenhouse closes the opening on success.","parameters":{"type":"object","properties":{"applicationId":{"type":"integer"},"onBehalfOf":{"type":"string"},"start_date":{"type":"string","format":"date"},"opening_id":{"type":"integer"},"close_reason_id":{"type":"integer"}},"required":["applicationId","onBehalfOf","start_date","opening_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"jobs.list","description":"List jobs in the tenant. Filter by status (open, closed, draft), department_id, office_id, or created/updated windows.","parameters":{"type":"object","properties":{"status":{"type":"string","enum":["open","closed","draft"]},"department_id":{"type":"integer"},"office_id":{"type":"integer"},"requisition_id":{"type":"string"},"created_after":{"type":"string","format":"date-time"},"updated_after":{"type":"string","format":"date-time"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":500}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobs.get","description":"Fetch a single job by id (includes hiring_team, departments[], offices[], openings[], custom_fields).","parameters":{"type":"object","properties":{"jobId":{"type":"integer"}},"required":["jobId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobs.openings.list","description":"List openings (requisitions) on a job. Each opening can be filled by exactly one application.","parameters":{"type":"object","properties":{"jobId":{"type":"integer"},"status":{"type":"string","enum":["open","closed"]},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":500}},"required":["jobId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.list","description":"List Greenhouse users. Filter by email or updated_after. Use this to resolve the `onBehalfOf` id by email before mutations.","parameters":{"type":"object","properties":{"email":{"type":"string"},"updated_after":{"type":"string","format":"date-time"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":500}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.get","description":"Fetch a Greenhouse user by id (includes site_admin, employee_id, linked_candidate_ids).","parameters":{"type":"object","properties":{"userId":{"type":"integer"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"offers.list","description":"List offers, optionally scoped to an application or filtered by status (drafted, approved, sent, accepted, rejected).","parameters":{"type":"object","properties":{"application_id":{"type":"integer"},"status":{"type":"string","enum":["drafted","approval-sent","approved","sent","sent-manually","accepted","rejected","deprecated"]},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":500}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"offers.get","description":"Fetch a single offer by id (includes custom_fields, sent_at, resolved_at, opening, status).","parameters":{"type":"object","properties":{"offerId":{"type":"integer"}},"required":["offerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scorecards.list","description":"List scorecards, optionally scoped to an application. Includes interviewer, ratings, attributes, submitted_at.","parameters":{"type":"object","properties":{"application_id":{"type":"integer"},"updated_after":{"type":"string","format":"date-time"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":500}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scorecards.get","description":"Fetch a single scorecard by id.","parameters":{"type":"object","properties":{"scorecardId":{"type":"integer"}},"required":["scorecardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"prospects.create","description":"Create a prospect (a candidate not yet attached to a specific application/job stage). Body is the Harvest prospect payload; same field set as candidates plus `prospect_pool` and `prospect_owner`.","parameters":{"type":"object","properties":{"onBehalfOf":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"company":{"type":"string"},"title":{"type":"string"},"email_addresses":{"type":"array","items":{"type":"object"}},"phone_numbers":{"type":"array","items":{"type":"object"}},"social_media_addresses":{"type":"array","items":{"type":"object"}},"prospect_pool":{"type":"object","description":"{ id: <poolId> }"},"prospect_stage":{"type":"object","description":"{ id: <stageId> }"},"prospect_owner":{"type":"object","description":"{ id: <userId> }"},"custom_fields":{"type":"object"},"applications":{"type":"array","items":{"type":"object"}}},"required":["onBehalfOf","first_name","last_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"greenpt","displayName":"GreenPT","description":"Privacy-friendly GPT chat, embeddings, and audio transcription via the GreenPT API.","auth":{"kind":"api-key","hint":"GreenPT API key, sent as `Authorization: Bearer <key>`."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"chat.completion","description":"Run a chat completion against a GreenPT model (green-l, green-l-raw, green-r, …).","parameters":{"type":"object","properties":{"model":{"type":"string","description":"GreenPT model id, e.g. green-l, green-l-raw, green-r."},"messages":{"type":"array","description":"OpenAI-shaped chat messages.","items":{"type":"object","properties":{"role":{"type":"string","enum":["system","user","assistant"]},"content":{"type":"string"}},"required":["role","content"]}},"stream":{"type":"boolean","description":"Server-sent streaming. Defaults to false."}},"required":["model","messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.embeddings","description":"Generate embeddings for one or more text inputs using the green-embedding model.","parameters":{"type":"object","properties":{"input":{"description":"Text to embed. Either a single string or an array of strings.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"model":{"type":"string","description":"Embedding model id. Defaults to green-embedding when omitted."},"encoding_format":{"type":"string","enum":["float","base64"],"description":"Return floats or base64-encoded vectors."}},"required":["input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transcribe.audio","description":"Transcribe an audio recording. Accepts a publicly reachable audio URL plus Deepgram-style flags (diarize, punctuate, smart_format, filler_words, numerals, sentiment, topics, intents).","parameters":{"type":"object","properties":{"audioUrl":{"type":"string","description":"URL of the audio file to transcribe (WAV, MP3, FLAC, …)."},"model":{"type":"string","description":"Speech-to-text model id."},"language":{"type":"string","description":"BCP-47 language code (en, fr, de, …). Auto-detected when omitted."},"diarize":{"type":"boolean","description":"Identify distinct speakers."},"punctuate":{"type":"boolean","description":"Add punctuation and capitalisation."},"smart_format":{"type":"boolean","description":"Apply formatting for readability."},"filler_words":{"type":"boolean","description":"Preserve filler words."},"numerals":{"type":"boolean","description":"Convert spelled-out numbers to numerals."},"sentiment":{"type":"boolean","description":"Run sentiment analysis on the transcript."},"topics":{"type":"boolean","description":"Detect topics throughout the transcript."},"intents":{"type":"boolean","description":"Recognise speaker intents throughout the transcript."}},"required":["audioUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"greip","displayName":"Greip","description":"Detect and prevent fraud with Greip IP, BIN, ASN, email, phone, and profanity lookups.","auth":{"kind":"api-key","hint":"Greip API token (passed via the `key` query parameter)."},"category":"other","defaultConsistencyModel":"cache","capabilities":[{"name":"asn.lookup","description":"Look up an Autonomous System Number (AS Number) and return ownership + routing metadata.","parameters":{"type":"object","properties":{"asn":{"type":"string","description":"AS Number (e.g., AS6167 or 6167)."},"format":{"type":"string","enum":["JSON","XML","CSV","Newline"]},"mode":{"type":"string","enum":["live","test"]},"lang":{"type":"string"}},"required":["asn"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bin.lookup","description":"Look up a payment card BIN/IIN to retrieve issuer, brand, scheme, and country.","parameters":{"type":"object","properties":{"bin":{"type":"string","description":"Card BIN/IIN, minimum 6 digits."},"format":{"type":"string","enum":["JSON","XML","CSV","Newline"]},"mode":{"type":"string","enum":["live","test"]},"lang":{"type":"string"},"userID":{"type":"string"}},"required":["bin"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"ip.lookup","description":"Look up an IPv4 or IPv6 address for geolocation, security risk, currency, and timezone.","parameters":{"type":"object","properties":{"ip":{"type":"string","description":"IPv4 or IPv6 address to look up."},"params":{"type":"string","description":"Comma-separated module list (e.g., security,currency,timezone,location)."},"format":{"type":"string","enum":["JSON","XML","CSV","Newline"]},"mode":{"type":"string","enum":["live","test"]},"lang":{"type":"string"},"userID":{"type":"string"}},"required":["ip"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"email.validation","description":"Validate an email address for syntax, deliverability, and disposable / spam signals.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address to validate."},"format":{"type":"string","enum":["JSON","XML","CSV","Newline"]},"mode":{"type":"string","enum":["live","test"]},"userID":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"phone.validation","description":"Validate a phone number against its ISO country code for line type and reachability.","parameters":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number in international or local format."},"countryCode":{"type":"string","description":"ISO 3166-1 alpha-2 country code (e.g., US, GB)."},"format":{"type":"string","enum":["JSON","XML","CSV","Newline"]},"mode":{"type":"string","enum":["live","test"]},"userID":{"type":"string"}},"required":["phone","countryCode"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"profanity.detection","description":"Score arbitrary text for profanity; optionally return matched words and safety score.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"Text to scan for profanity."},"scoreOnly":{"type":"string","enum":["yes","no"]},"listBadWords":{"type":"string","enum":["yes","no"]},"format":{"type":"string","enum":["JSON","XML","CSV","Newline"]},"mode":{"type":"string","enum":["live","test"]},"userID":{"type":"string"}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"griptape","displayName":"Griptape Cloud","description":"Create and run AI agents and structures. Execute assistant runs, structure runs, and manage automated workflows with Griptape Cloud.","auth":{"kind":"api-key","hint":"Griptape Cloud API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"assistants.run.create","description":"Create an assistant run with input and optional thread settings.","parameters":{"type":"object","properties":{"assistantId":{"type":"string","description":"ID of the assistant to run"},"input":{"type":"string","description":"Input to provide to the assistant"},"createNewThread":{"type":"boolean","description":"Create a new thread for this run"},"threadId":{"type":"string","description":"Optional thread ID to use for the run"}},"required":["assistantId","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assistants.run.get","description":"Retrieve the status and results of an assistant run.","parameters":{"type":"object","properties":{"assistantId":{"type":"string","description":"ID of the assistant"},"runId":{"type":"string","description":"ID of the run to retrieve"}},"required":["assistantId","runId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"structures.run.create","description":"Create a structure run with input and input arguments.","parameters":{"type":"object","properties":{"structureId":{"type":"string","description":"ID of the structure to run"},"input":{"type":"string","description":"Input to provide to the structure"},"inputArgs":{"type":"object","description":"Input arguments for the structure run"}},"required":["structureId","input","inputArgs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"structures.run.get","description":"Retrieve the status and results of a structure run.","parameters":{"type":"object","properties":{"structureId":{"type":"string","description":"ID of the structure"},"runId":{"type":"string","description":"ID of the run to retrieve"}},"required":["structureId","runId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"grist","displayName":"Grist","description":"Create, update, and search records in Grist documents.","auth":{"kind":"api-key","hint":"Grist API Key and Domain URL (e.g., https://example.grist.org)"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.create","description":"Create a new record in a Grist table.","parameters":{"type":"object","properties":{"docId":{"type":"string","description":"Document ID"},"tableId":{"type":"string","description":"Table ID"},"record":{"type":"object","description":"Record fields"}},"required":["docId","tableId","record"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Update an existing record in a Grist table.","parameters":{"type":"object","properties":{"docId":{"type":"string","description":"Document ID"},"tableId":{"type":"string","description":"Table ID"},"recordId":{"type":"number","description":"Record ID"},"record":{"type":"object","description":"Fields to update"}},"required":["docId","tableId","recordId","record"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.search","description":"Search for records matching a column value.","parameters":{"type":"object","properties":{"docId":{"type":"string","description":"Document ID"},"tableId":{"type":"string","description":"Table ID"},"column":{"type":"string","description":"Column to search in"},"value":{"type":"string","description":"Search value (case-sensitive, exact match, Text columns only)"}},"required":["docId","tableId","column","value"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.add","description":"Add one or more records to a Grist table.","parameters":{"type":"object","properties":{"docId":{"type":"string","description":"Document ID"},"tableId":{"type":"string","description":"Table ID"},"records":{"type":"array","description":"Array of `{ fields: { ... } }` record entries to insert.","items":{"type":"object"}}},"required":["docId","tableId","records"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.delete","description":"Delete one or more records by id from a Grist table.","parameters":{"type":"object","properties":{"docId":{"type":"string","description":"Document ID"},"tableId":{"type":"string","description":"Table ID"},"recordIds":{"type":"array","description":"Array of numeric record ids to delete.","items":{"type":"number"}}},"required":["docId","tableId","recordIds"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tables.create","description":"Create one or more tables in a Grist document.","parameters":{"type":"object","properties":{"docId":{"type":"string","description":"Document ID"},"tableId":{"type":"string","description":"Table ID (string identifier) for the new table."},"columns":{"type":"array","description":"Column definitions, e.g. `[{ id: \"Name\", fields: { label: \"Name\", type: \"Text\" } }]`.","items":{"type":"object"}}},"required":["docId","tableId","columns"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"attachments.upload","description":"Upload attachments to a Grist record.","parameters":{"type":"object","properties":{"docId":{"type":"string","description":"Document ID"},"tableId":{"type":"string","description":"Table ID"},"recordId":{"type":"number","description":"Record ID"},"attachment":{"type":"string","description":"Attachment file content (base64 or URL)"},"attachmentName":{"type":"string","description":"Custom name for the attachment (optional)"}},"required":["docId","tableId","recordId","attachment"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"guidelite","displayName":"GuideLite","description":"Send prompts to a GuideLite assistant, continue prior conversations, and poll for new lead submissions.","auth":{"kind":"api-key","hint":"GuideLite API key (Workspace → Settings → API Keys)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"assistant.sendPrompt","description":"Send an input message to a GuideLite assistant. If conversationId is omitted, a new conversation is created and returned in the response.","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The input message to be processed by the assistant."},"conversationId":{"type":"string","description":"Conversation ID of a previous conversation to continue. Omit to start a new conversation."},"assistantId":{"type":"string","description":"Optional assistant ID when the workspace has multiple assistants. Defaults to the workspace default assistant."}},"required":["message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.get","description":"Fetch the message history of an existing GuideLite conversation.","parameters":{"type":"object","properties":{"conversationId":{"type":"string","description":"Exact conversation ID."},"limit":{"type":"integer","description":"Maximum messages to return."}},"required":["conversationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversations.list.recent","description":"List recently active GuideLite conversations in the workspace, ordered by most recent activity.","parameters":{"type":"object","properties":{"since":{"type":"string","description":"ISO-8601 timestamp; only return conversations updated after this point."},"assistantId":{"type":"string","description":"Restrict the list to a single assistant."},"limit":{"type":"integer","description":"Maximum conversations to return."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.list.recent","description":"List recently submitted leads — used by the newLeadSubmission polling trigger upstream.","parameters":{"type":"object","properties":{"since":{"type":"string","description":"ISO-8601 timestamp; only return leads submitted after this point."},"assistantId":{"type":"string","description":"Restrict the list to leads captured by a single assistant."},"limit":{"type":"integer","description":"Maximum leads to return."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"guide.create","description":"Create a GuideLite guide (assistant). Maps to POST /assistants — the upstream resource that backs \"guides\" in the catalog.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Display name of the new guide."},"description":{"type":"string","description":"Optional description shown in the workspace UI."},"systemPrompt":{"type":"string","description":"Optional system prompt configuring the guide behaviour."},"knowledgeBaseIds":{"type":"array","description":"Optional knowledge-base ids to wire to the guide.","items":{"type":"string"}}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"guide.update","description":"Update an existing GuideLite guide (assistant).","parameters":{"type":"object","properties":{"guideId":{"type":"string","description":"Assistant id to update."},"name":{"type":"string"},"description":{"type":"string"},"systemPrompt":{"type":"string"},"knowledgeBaseIds":{"type":"array","items":{"type":"string"}}},"required":["guideId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"guide.delete","description":"Delete a GuideLite guide (assistant) by id.","parameters":{"type":"object","properties":{"guideId":{"type":"string","description":"Assistant id to delete."}},"required":["guideId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assistants.list","description":"List assistants configured in the GuideLite workspace.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum assistants to return."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"gusto","displayName":"Gusto","description":"Read Gusto companies, employees, jobs, compensations, contractors, and payrolls; create payrolls and run mutations against the Embedded API.","auth":{"kind":"oauth2","authorizationUrl":"https://api.gusto.com/oauth/authorize","tokenUrl":"https://api.gusto.com/oauth/token","scopes":["companies:read","employees:read","employees:write","jobs:read","jobs:write","compensations:read","compensations:write","contractors:read","contractors:write","payrolls:read","payrolls:write"],"clientIdEnv":"GUSTO_OAUTH_CLIENT_ID","clientSecretEnv":"GUSTO_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"me.get","description":"Return the authenticated user (current_user) including the companies and roles the token can access.","parameters":{"type":"object","properties":{}},"requiredScopes":["companies:read"],"class":"read"},{"name":"companies.get","description":"Read a Gusto company by uuid.","parameters":{"type":"object","properties":{"company_uuid":{"type":"string"}},"required":["company_uuid"]},"requiredScopes":["companies:read"],"class":"read"},{"name":"employees.list","description":"List the employees of a company. Supports `terminated` and pagination via `page` / `per`.","parameters":{"type":"object","properties":{"company_uuid":{"type":"string"},"terminated":{"type":"boolean"},"page":{"type":"integer","minimum":1},"per":{"type":"integer","minimum":1,"maximum":100}},"required":["company_uuid"]},"requiredScopes":["employees:read"],"class":"read"},{"name":"employees.get","description":"Read a Gusto employee by uuid.","parameters":{"type":"object","properties":{"employee_uuid":{"type":"string"}},"required":["employee_uuid"]},"requiredScopes":["employees:read"],"class":"read"},{"name":"employees.create","description":"Create an employee on a company. `first_name`, `last_name`, and `work_email` are required.","parameters":{"type":"object","properties":{"company_uuid":{"type":"string"},"first_name":{"type":"string"},"middle_initial":{"type":"string"},"last_name":{"type":"string"},"date_of_birth":{"type":"string","format":"date"},"email":{"type":"string","format":"email"},"work_email":{"type":"string","format":"email"},"ssn":{"type":"string"},"self_onboarding":{"type":"boolean"}},"required":["company_uuid","first_name","last_name"]},"requiredScopes":["employees:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"employees.update","description":"Update a Gusto employee. Caller must supply `version` (the optimistic-concurrency token from the prior read).","parameters":{"type":"object","properties":{"employee_uuid":{"type":"string"},"version":{"type":"string"},"first_name":{"type":"string"},"middle_initial":{"type":"string"},"last_name":{"type":"string"},"date_of_birth":{"type":"string","format":"date"},"email":{"type":"string","format":"email"},"work_email":{"type":"string","format":"email"},"two_percent_shareholder":{"type":"boolean"}},"required":["employee_uuid","version"]},"requiredScopes":["employees:write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"employees.terminate","description":"Create a termination record for an employee.","parameters":{"type":"object","properties":{"employee_uuid":{"type":"string"},"effective_date":{"type":"string","format":"date"},"run_termination_payroll":{"type":"boolean"}},"required":["employee_uuid","effective_date"]},"requiredScopes":["employees:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"jobs.list","description":"List the jobs assigned to an employee.","parameters":{"type":"object","properties":{"employee_uuid":{"type":"string"}},"required":["employee_uuid"]},"requiredScopes":["jobs:read"],"class":"read"},{"name":"jobs.create","description":"Create a job for an employee.","parameters":{"type":"object","properties":{"employee_uuid":{"type":"string"},"title":{"type":"string"},"location_uuid":{"type":"string"},"hire_date":{"type":"string","format":"date"},"two_percent_shareholder":{"type":"boolean"}},"required":["employee_uuid","title","hire_date"]},"requiredScopes":["jobs:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"jobs.update","description":"Update a job. Caller must supply `version` from the prior read.","parameters":{"type":"object","properties":{"job_uuid":{"type":"string"},"version":{"type":"string"},"title":{"type":"string"},"location_uuid":{"type":"string"},"hire_date":{"type":"string","format":"date"},"two_percent_shareholder":{"type":"boolean"}},"required":["job_uuid","version"]},"requiredScopes":["jobs:write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"compensations.list","description":"List compensations attached to a job.","parameters":{"type":"object","properties":{"job_uuid":{"type":"string"}},"required":["job_uuid"]},"requiredScopes":["compensations:read"],"class":"read"},{"name":"compensations.create","description":"Create a compensation record on a job. `rate` is a stringified decimal, `payment_unit` is one of \"Hour\" | \"Week\" | \"Month\" | \"Year\" | \"Paycheck\".","parameters":{"type":"object","properties":{"job_uuid":{"type":"string"},"rate":{"type":"string"},"payment_unit":{"type":"string","enum":["Hour","Week","Month","Year","Paycheck"]},"flsa_status":{"type":"string","enum":["Exempt","Salaried Nonexempt","Nonexempt","Owner"]},"effective_date":{"type":"string","format":"date"},"adjust_for_minimum_wage":{"type":"boolean"}},"required":["job_uuid","rate","payment_unit","flsa_status","effective_date"]},"requiredScopes":["compensations:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"compensations.update","description":"Update a compensation record. Caller must supply `version` from the prior read.","parameters":{"type":"object","properties":{"compensation_uuid":{"type":"string"},"version":{"type":"string"},"rate":{"type":"string"},"payment_unit":{"type":"string","enum":["Hour","Week","Month","Year","Paycheck"]},"flsa_status":{"type":"string","enum":["Exempt","Salaried Nonexempt","Nonexempt","Owner"]},"effective_date":{"type":"string","format":"date"},"adjust_for_minimum_wage":{"type":"boolean"}},"required":["compensation_uuid","version"]},"requiredScopes":["compensations:write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contractors.list","description":"List the contractors of a company.","parameters":{"type":"object","properties":{"company_uuid":{"type":"string"},"page":{"type":"integer","minimum":1},"per":{"type":"integer","minimum":1,"maximum":100}},"required":["company_uuid"]},"requiredScopes":["contractors:read"],"class":"read"},{"name":"contractors.get","description":"Read a contractor by uuid.","parameters":{"type":"object","properties":{"contractor_uuid":{"type":"string"}},"required":["contractor_uuid"]},"requiredScopes":["contractors:read"],"class":"read"},{"name":"contractors.create","description":"Create a contractor on a company. `type` is \"Individual\" or \"Business\"; for \"Business\" supply `business_name`, for \"Individual\" supply `first_name` + `last_name`.","parameters":{"type":"object","properties":{"company_uuid":{"type":"string"},"type":{"type":"string","enum":["Individual","Business"]},"wage_type":{"type":"string","enum":["Fixed","Hourly"]},"first_name":{"type":"string"},"last_name":{"type":"string"},"business_name":{"type":"string"},"ein":{"type":"string"},"email":{"type":"string","format":"email"},"start_date":{"type":"string","format":"date"},"self_onboarding":{"type":"boolean"}},"required":["company_uuid","type","wage_type","start_date"]},"requiredScopes":["contractors:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payrolls.list","description":"List a company's payrolls. Supports `processed`, `include_off_cycle`, `start_date`, `end_date` filters.","parameters":{"type":"object","properties":{"company_uuid":{"type":"string"},"processed":{"type":"boolean"},"include_off_cycle":{"type":"boolean"},"start_date":{"type":"string","format":"date"},"end_date":{"type":"string","format":"date"},"page":{"type":"integer","minimum":1},"per":{"type":"integer","minimum":1,"maximum":100}},"required":["company_uuid"]},"requiredScopes":["payrolls:read"],"class":"read"},{"name":"payrolls.get","description":"Read a single payroll. `include` accepts comma-separated extras (e.g. \"benefits,deductions,taxes\").","parameters":{"type":"object","properties":{"company_uuid":{"type":"string"},"payroll_uuid":{"type":"string"},"include":{"type":"string"},"show_calculation":{"type":"boolean"}},"required":["company_uuid","payroll_uuid"]},"requiredScopes":["payrolls:read"],"class":"read"},{"name":"payrolls.create_off_cycle","description":"Create an off-cycle payroll for a company. `off_cycle_reason` is one of \"Bonus\" | \"Correction\" | \"Dismissed Employee\" | \"Transition From Old Pay Schedule\".","parameters":{"type":"object","properties":{"company_uuid":{"type":"string"},"off_cycle_reason":{"type":"string","enum":["Bonus","Correction","Dismissed Employee","Transition From Old Pay Schedule"]},"start_date":{"type":"string","format":"date"},"end_date":{"type":"string","format":"date"},"check_date":{"type":"string","format":"date"},"employee_uuids":{"type":"array","items":{"type":"string"}},"withholding_pay_period":{"type":"string","enum":["Every week","Every other week","Twice per month","Monthly","Quarterly","Semiannually","Annually"]}},"required":["company_uuid","off_cycle_reason","start_date","end_date","check_date"]},"requiredScopes":["payrolls:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payrolls.submit","description":"Submit a previously-prepared payroll for processing. Once submitted Gusto begins funds movement.","parameters":{"type":"object","properties":{"company_uuid":{"type":"string"},"payroll_uuid":{"type":"string"}},"required":["company_uuid","payroll_uuid"]},"requiredScopes":["payrolls:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payrolls.cancel","description":"Cancel a submitted-but-not-yet-processed payroll.","parameters":{"type":"object","properties":{"company_uuid":{"type":"string"},"payroll_uuid":{"type":"string"}},"required":["company_uuid","payroll_uuid"]},"requiredScopes":["payrolls:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"harvest","displayName":"Harvest","description":"Read Harvest invoices, projects, tasks, clients, estimates, expenses, time entries, roles, users, and run the uninvoiced report.","auth":{"kind":"oauth2","authorizationUrl":"https://id.getharvest.com/oauth2/authorize","tokenUrl":"https://id.getharvest.com/api/v2/oauth2/token","scopes":["harvest:all"],"clientIdEnv":"HARVEST_OAUTH_CLIENT_ID","clientSecretEnv":"HARVEST_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"invoices.get","description":"List invoices in a Harvest account, optionally filtered by client/project/state/date window.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Harvest Account ID (sent as the Harvest-Account-Id header)."},"client_id":{"type":"string"},"project_id":{"type":"string"},"state":{"type":"string","enum":["draft","open","paid","closed"]},"updated_since":{"type":"string","description":"ISO-8601 timestamp."},"from":{"type":"string","description":"ISO-8601 date."},"to":{"type":"string","description":"ISO-8601 date."},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":2000}},"required":["accountId"]},"requiredScopes":["harvest:all"],"class":"read"},{"name":"projects.get","description":"List projects, optionally filtered by client or active state.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"is_active":{"type":"boolean"},"client_id":{"type":"string"},"updated_since":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":2000}},"required":["accountId"]},"requiredScopes":["harvest:all"],"class":"read"},{"name":"tasks.get","description":"List billable/non-billable tasks defined on the Harvest account.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"is_active":{"type":"boolean"},"updated_since":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":2000}},"required":["accountId"]},"requiredScopes":["harvest:all"],"class":"read"},{"name":"clients.get","description":"List clients in the Harvest account.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"is_active":{"type":"boolean"},"updated_since":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":2000}},"required":["accountId"]},"requiredScopes":["harvest:all"],"class":"read"},{"name":"estimates.get","description":"List estimates, optionally filtered by client/state/updated_since.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"client_id":{"type":"string"},"state":{"type":"string","enum":["draft","sent","accepted","declined"]},"updated_since":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":2000}},"required":["accountId"]},"requiredScopes":["harvest:all"],"class":"read"},{"name":"expenses.get","description":"List expenses in the account, with optional user/client/project/billed/date filters.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"user_id":{"type":"string"},"client_id":{"type":"string"},"project_id":{"type":"string"},"is_billed":{"type":"boolean"},"updated_since":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":2000}},"required":["accountId"]},"requiredScopes":["harvest:all"],"class":"read"},{"name":"time.entries.get","description":"List time entries with optional user/client/project/task/billed/running/date filters.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"user_id":{"type":"string"},"client_id":{"type":"string"},"project_id":{"type":"string"},"task_id":{"type":"string"},"is_billed":{"type":"boolean"},"is_running":{"type":"boolean"},"updated_since":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":2000}},"required":["accountId"]},"requiredScopes":["harvest:all"],"class":"read"},{"name":"roles.get","description":"List user roles defined in the Harvest account.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":2000}},"required":["accountId"]},"requiredScopes":["harvest:all"],"class":"read"},{"name":"users.get","description":"List Harvest users in the account.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"is_active":{"type":"boolean"},"updated_since":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":2000}},"required":["accountId"]},"requiredScopes":["harvest:all"],"class":"read"},{"name":"reports.uninvoiced","description":"Pull the uninvoiced report for a date window — totals of uninvoiced hours/expenses per project.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"from":{"type":"string","description":"Window start date (YYYY-MM-DD)."},"to":{"type":"string","description":"Window end date (YYYY-MM-DD)."},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":2000}},"required":["accountId","from","to"]},"requiredScopes":["harvest:all"],"class":"read"}]},{"kind":"hashi-corp-vault","displayName":"HashiCorp Vault","description":"Read, write, list, and delete secrets in a HashiCorp Vault KV v2 secrets engine.","auth":{"kind":"api-key","hint":"Vault client token (X-Vault-Token). For AppRole, exchange role_id+secret_id for a token first."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"secrets.read","description":"Read a secret from a KV v2 secrets engine. Pass version=0 (or omit) for the latest version.","parameters":{"type":"object","properties":{"secretEngine":{"type":"string","description":"KV v2 mount path (e.g. \"secret\")."},"secretPath":{"type":"string","description":"Secret path within the engine (e.g. \"myapp/database\")."},"version":{"type":"integer","description":"Optional secret version; omit or 0 for latest."}},"required":["secretEngine","secretPath"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"secrets.write","description":"Create or update a secret in a KV v2 secrets engine.","parameters":{"type":"object","properties":{"secretEngine":{"type":"string"},"secretPath":{"type":"string"},"secretData":{"type":"object","description":"Key/value payload to persist under data."}},"required":["secretEngine","secretPath","secretData"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"secrets.delete","description":"Delete a secret and all of its versions from a KV v2 secrets engine.","parameters":{"type":"object","properties":{"secretEngine":{"type":"string"},"secretPath":{"type":"string"}},"required":["secretEngine","secretPath"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"kv.write","description":"Create or update a KV v2 secret (alias of secrets.write surfaced under the kv.* namespace).","parameters":{"type":"object","properties":{"secretEngine":{"type":"string"},"secretPath":{"type":"string"},"secretData":{"type":"object","description":"Key/value payload to persist under data."}},"required":["secretEngine","secretPath","secretData"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"kv.delete","description":"Delete a KV v2 secret and all versions (alias of secrets.delete under the kv.* namespace).","parameters":{"type":"object","properties":{"secretEngine":{"type":"string"},"secretPath":{"type":"string"}},"required":["secretEngine","secretPath"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"token.revoke","description":"Revoke a Vault auth token (and its children). POSTs the token to /v1/auth/token/revoke.","parameters":{"type":"object","properties":{"token":{"type":"string","description":"The Vault token to revoke."}},"required":["token"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lease.revoke","description":"Revoke a Vault lease immediately. POSTs the lease id to /v1/sys/leases/revoke.","parameters":{"type":"object","properties":{"leaseId":{"type":"string","description":"The lease id to revoke."},"sync":{"type":"boolean","description":"If true, the call blocks until revocation completes."}},"required":["leaseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"secrets.list","description":"List secret keys under a path in a KV v2 secrets engine.","parameters":{"type":"object","properties":{"secretEngine":{"type":"string"},"listPath":{"type":"string","description":"Path prefix to list (e.g. \"myapp/\")."}},"required":["secretEngine","listPath"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"hastewire","displayName":"Hastewire","description":"Detect AI-generated text and humanize AI-sounding prose via the Hastewire API.","auth":{"kind":"api-key","hint":"Hastewire API key (account dashboard → API). Sent as `Authorization: Bearer <key>`."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"detect.text","description":"Classify a passage of text as AI- or human-written. Returns a probability score plus a per-span breakdown.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"The text to analyze. Required."}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"humanize.text","description":"Rewrite AI-sounding text so it reads as if written by a human. Optionally constrain the rewrite to a particular writing style.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"The text to rewrite. Required."},"style":{"type":"string","description":"Optional writing style for the rewrite (e.g. \"casual\", \"formal\", \"academic\"). Maps to the catalog `style` auth field."}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"heartbeat","displayName":"Heartbeat","description":"Monitoring and alerting made easy. Create and manage users in your Heartbeat community.","auth":{"kind":"api-key","hint":"Heartbeat API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.create","description":"Create a new user in Heartbeat community.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"The user name"},"email":{"type":"string","description":"The user email"},"role_id":{"type":"string","description":"The role the user should have"},"group_ids":{"type":"array","items":{"type":"string"},"description":"A list of the ids of the groups that the user should belong to"},"profile_picture":{"type":"string","description":"A Data URI scheme in the JPG, GIF, or PNG format. Ensure you use the proper content type (image/jpeg, image/png, image/gif) that matches the image data being provided"},"bio":{"type":"string","description":"The user bio"},"status":{"type":"string","description":"The user status"},"linkedin":{"type":"string","description":"A link to the user LinkedIn profile"},"twitter":{"type":"string","description":"A link to the user Twitter profile"},"instagram":{"type":"string","description":"A link to the user Instagram profile"},"create_introduction_thread":{"type":"boolean","description":"If true and a value for bio is provided, an introduction thread for the user will be created in the channel designated for introductions in your community settings"}},"required":["name","email","role_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"threads.create","description":"Create a new thread in a Heartbeat channel.","parameters":{"type":"object","properties":{"channel_id":{"type":"string","description":"The id of the channel where the thread will be created."},"title":{"type":"string","description":"The title of the thread."},"body":{"type":"string","description":"The body of the thread."},"sender_user_id":{"type":"string","description":"The id of the user who will be recorded as the author of the thread."}},"required":["channel_id","title","body","sender_user_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.create","description":"Post a message to an existing Heartbeat thread.","parameters":{"type":"object","properties":{"thread_id":{"type":"string","description":"The id of the thread to post the message to."},"body":{"type":"string","description":"The body of the message."},"sender_user_id":{"type":"string","description":"The id of the user who will be recorded as the author of the message."}},"required":["thread_id","body","sender_user_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"hedy","displayName":"Hedy","description":"AI-powered meeting intelligence — manage topics, sessions, and custom context for meeting analysis and insights.","auth":{"kind":"api-key","hint":"Hedy API key. Generate one from your Hedy dashboard under Settings → API."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"topics.create","description":"Create a new topic for organizing meetings and sessions within Hedy.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Name of the topic (max 100 characters)."},"description":{"type":"string","description":"Description of the topic (max 500 characters)."},"color":{"type":"string","description":"Hex color code for the topic (e.g., #4A90D9)."},"iconName":{"type":"string","description":"Material icon name for the topic (e.g., groups)."},"topicContext":{"type":"string","description":"Custom instructions for AI processing of sessions in this topic (max 20,000 characters)."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"topics.get","description":"Retrieve details for a specific topic.","parameters":{"type":"object","properties":{"topicId":{"type":"string","description":"The unique identifier of the topic."}},"required":["topicId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"topics.list","description":"List all topics in your Hedy workspace.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of topics to return (default 50)."},"offset":{"type":"integer","description":"Pagination offset (default 0)."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"topics.update","description":"Update an existing topic.","parameters":{"type":"object","properties":{"topicId":{"type":"string","description":"The unique identifier of the topic."},"name":{"type":"string","description":"Updated topic name."},"description":{"type":"string","description":"Updated topic description."},"color":{"type":"string","description":"Updated hex color code."},"iconName":{"type":"string","description":"Updated Material icon name."},"topicContext":{"type":"string","description":"Updated custom AI processing instructions."}},"required":["topicId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"sessions.get","description":"Get details for a specific meeting session.","parameters":{"type":"object","properties":{"sessionId":{"type":"string","description":"The unique identifier of the session."}},"required":["sessionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sessions.list_by_topic","description":"List all sessions within a specific topic.","parameters":{"type":"object","properties":{"topicId":{"type":"string","description":"The topic ID to list sessions from."},"limit":{"type":"integer","description":"Maximum number of sessions to return (default 50)."},"offset":{"type":"integer","description":"Pagination offset (default 0)."}},"required":["topicId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"context.create","description":"Create or update a session context — custom instructions or domain knowledge for AI analysis of meetings in a topic.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"Title of the session context (max 200 characters)."},"content":{"type":"string","description":"Instructions or context for AI analysis (max 20,000 characters)."},"isDefault":{"type":"boolean","description":"Whether this context should be the default for new sessions."}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"context.get","description":"Retrieve a specific session context by ID.","parameters":{"type":"object","properties":{"contextId":{"type":"string","description":"The unique identifier of the context."}},"required":["contextId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"topics.delete","description":"Delete a Hedy topic. Sessions stored under the topic become orphaned per the upstream API contract.","parameters":{"type":"object","properties":{"topicId":{"type":"string","description":"The unique identifier of the topic to delete."}},"required":["topicId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"context.update","description":"Update an existing session context (title, content, default flag).","parameters":{"type":"object","properties":{"contextId":{"type":"string","description":"The unique identifier of the context to update."},"title":{"type":"string","description":"Updated title."},"content":{"type":"string","description":"Updated content."},"isDefault":{"type":"boolean","description":"Updated default flag."}},"required":["contextId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"context.delete","description":"Delete a Hedy session context entry.","parameters":{"type":"object","properties":{"contextId":{"type":"string","description":"The unique identifier of the context to delete."}},"required":["contextId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"hellosign","displayName":"Dropbox Sign","description":"Send documents for e-signature via Dropbox Sign templates, poll signature-request status, cancel in-flight requests, and react to push events when signers complete.","auth":{"kind":"oauth2","authorizationUrl":"https://app.hellosign.com/oauth/authorize","tokenUrl":"https://app.hellosign.com/oauth/token","scopes":["basic_account_info","request_signature","signature_request_access"],"clientIdEnv":"HELLOSIGN_OAUTH_CLIENT_ID","clientSecretEnv":"HELLOSIGN_OAUTH_CLIENT_SECRET","sendScopeParam":false},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"get_signature_request","class":"read","description":"Fetch the current status of a Dropbox Sign signature request and each signer.","parameters":{"type":"object","properties":{"signatureRequestId":{"type":"string"}},"required":["signatureRequestId"]},"requiredScopes":["signature_request_access"]},{"name":"send_signature_request","class":"mutation","description":"Send a template for signature to one or more signers. The MutationGuard idempotency-key short-circuit prevents duplicate sends on retry; tangle_idempotency_key is also written into metadata for forensic dedup.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"templateIds":{"type":"array","items":{"type":"string"},"description":"One or more Dropbox Sign template ids to compose into the signature request."},"signers":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","description":"Template role name as configured in Dropbox Sign."},"email":{"type":"string"},"name":{"type":"string"}},"required":["role","email","name"]}},"subject":{"type":"string"},"message":{"type":"string"},"testMode":{"type":"boolean","description":"When true, no real signature is collected."},"customFields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}},"required":["name","value"]}}},"required":["templateIds","signers"]},"requiredScopes":["request_signature"]},{"name":"cancel_signature_request","class":"mutation","description":"Cancel an in-flight signature request. Idempotent — a second cancel of an already-canceled request returns committed with idempotentReplay=true.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"signatureRequestId":{"type":"string"}},"required":["signatureRequestId"]},"requiredScopes":["request_signature"]},{"name":"remind_signature_request","class":"mutation","description":"Send a reminder email to a signer who has not yet signed. POST /signature_request/remind/:id with the signer email address; safe to retry — Dropbox Sign rate-limits reminders per signer per request, so a duplicate reminder is a no-op on its end.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"signatureRequestId":{"type":"string"},"emailAddress":{"type":"string","description":"Email address of the signer to remind."},"name":{"type":"string","description":"Optional display name of the signer (must match the original signer name on multi-signer requests)."}},"required":["signatureRequestId","emailAddress"]},"requiredScopes":["request_signature"]}]},{"kind":"helpscout","displayName":"Help Scout","description":"Search and update Help Scout conversations, reply to support tickets, and read customer profiles.","auth":{"kind":"oauth2","authorizationUrl":"https://secure.helpscout.net/authentication/authorizeClientApplication","tokenUrl":"https://api.helpscout.net/v2/oauth2/token","scopes":["tickets.search.read","tickets.reply.write","customers.read"],"clientIdEnv":"HELPSCOUT_OAUTH_CLIENT_ID","clientSecretEnv":"HELPSCOUT_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tickets.search","description":"Search Help Scout conversations using the documented query DSL (e.g. status:active subject:\"login\").","parameters":{"type":"object","properties":{"query":{"type":"string"},"page":{"type":"integer","minimum":1},"size":{"type":"integer","minimum":1,"maximum":50}},"required":["query"]},"requiredScopes":["tickets.search.read"],"class":"read"},{"name":"tickets.read","description":"Read a single Help Scout conversation by id.","parameters":{"type":"object","properties":{"conversationId":{"type":"string"}},"required":["conversationId"]},"requiredScopes":["tickets.search.read"],"class":"read"},{"name":"customers.read","description":"Read a Help Scout customer profile.","parameters":{"type":"object","properties":{"customerId":{"type":"string"}},"required":["customerId"]},"requiredScopes":["customers.read"],"class":"read"},{"name":"tickets.reply","description":"Post a reply on a Help Scout conversation (creates a customer-visible reply thread).","parameters":{"type":"object","properties":{"conversationId":{"type":"string"},"text":{"type":"string"},"customer":{"type":"object"},"user":{"type":"integer"},"attachments":{"type":"array","items":{"type":"object"}}},"required":["conversationId","text","customer"]},"requiredScopes":["tickets.reply.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.update","description":"Update conversation status, assignee, or tags via a JSON-patch op.","parameters":{"type":"object","properties":{"conversationId":{"type":"string"},"op":{"type":"string","enum":["replace","add","remove","move"]},"path":{"type":"string"},"value":{}},"required":["conversationId","op","path"]},"requiredScopes":["tickets.reply.write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"conversations.create","description":"Create a new Help Scout conversation (support ticket). Caller supplies subject, customer, mailboxId and the initial thread payload. Help Scout assigns a unique conversation id.","parameters":{"type":"object","properties":{"subject":{"type":"string"},"customer":{"type":"object","description":"Customer envelope: { email } at minimum; full Help Scout customer schema accepted."},"mailboxId":{"type":"integer"},"type":{"type":"string","enum":["email","chat","phone"]},"status":{"type":"string","enum":["active","pending","closed","spam"]},"threads":{"type":"array","description":"Initial thread payload — at least one thread is required by the upstream API.","items":{"type":"object"}},"tags":{"type":"array","items":{"type":"string"}},"assignTo":{"type":"integer"}},"required":["subject","customer","mailboxId","type","threads"]},"requiredScopes":["tickets.reply.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.delete","description":"Delete a Help Scout conversation. Help Scout returns 204 on success; a second delete returns 404 (treated as committed-replay by the caller).","parameters":{"type":"object","properties":{"conversationId":{"type":"string"}},"required":["conversationId"]},"requiredScopes":["tickets.reply.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"heygen","displayName":"HeyGen","description":"Generate and manage AI avatar videos using HeyGen: render from templates, translate, list assets, and poll job status.","auth":{"kind":"api-key","hint":"HeyGen workspace API key. Create one at https://app.heygen.com/settings under API."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"videos.createFromTemplate","description":"Submit a template-based video render. Returns a video_id; poll videos.status until the asset is ready.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"HeyGen template id to render from."},"title":{"type":"string","description":"Title of the generated video."},"variables":{"type":"object","description":"Template variable bindings (text/avatar/voice overrides keyed by variable name)."},"caption":{"type":"boolean","description":"Burn-in captions on the rendered video."},"includeGif":{"type":"boolean","description":"Also produce a GIF preview."},"enableSharing":{"type":"boolean","description":"Enable public share link on completion."},"callbackUrl":{"type":"string","description":"Webhook URL to notify when rendering completes."},"callbackId":{"type":"string","description":"Caller-supplied ID echoed in webhook payload."},"dimensionWidth":{"type":"integer","description":"Output video width in pixels."},"dimensionHeight":{"type":"integer","description":"Output video height in pixels."}},"required":["templateId","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"videos.status","description":"Retrieve the status, progress, and (if complete) output URLs for a generated video.","parameters":{"type":"object","properties":{"videoId":{"type":"string","description":"video_id returned from a generation call."}},"required":["videoId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"videos.translateStatus","description":"Retrieve the status of a translated video by its translate id.","parameters":{"type":"object","properties":{"videoTranslateId":{"type":"string","description":"video_translate_id returned from videos.translate."}},"required":["videoTranslateId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"videos.shareUrl","description":"Mint or fetch a sharable URL for a previously generated video.","parameters":{"type":"object","properties":{"videoId":{"type":"string"}},"required":["videoId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"videos.list","description":"List videos in the workspace.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Max videos to return (server caps at 100)."},"token":{"type":"string","description":"Pagination token from a previous response."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"avatars.list","description":"List avatars available to the workspace (system + custom).","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"voices.list","description":"List voices available to the workspace.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"videos.translate","description":"Submit a video translation job. Returns a video_translate_id; poll videos.translateStatus for completion.","parameters":{"type":"object","properties":{"videoUrl":{"type":"string","description":"URL of the video to translate (direct URL, Google Drive, or YouTube)."},"outputLanguage":{"type":"string","description":"Target language code (e.g. en, es, fr, ja)."},"title":{"type":"string","description":"Title for the translated output."},"translateAudioOnly":{"type":"boolean","description":"Translate audio without modifying faces."},"speakerNum":{"type":"integer","description":"Number of distinct speakers in the source video."},"callbackUrl":{"type":"string","description":"Webhook URL to notify when translation completes."},"callbackId":{"type":"string","description":"Caller-supplied ID echoed in webhook payload."}},"required":["videoUrl","outputLanguage"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assets.upload","description":"Register an asset by URL for use in subsequent renders. Multipart binary upload is not exposed here; the JSON body accepts a hosted URL plus the declared content type.","parameters":{"type":"object","properties":{"fileUrl":{"type":"string","description":"Publicly fetchable URL of the asset (JPEG, PNG, MP4, WEBM, or MPEG)."},"contentType":{"type":"string","description":"MIME type, e.g. image/png, video/mp4. Required so HeyGen can route the asset to the right pipeline."},"fileName":{"type":"string","description":"Optional display name for the asset."}},"required":["fileUrl","contentType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"heymarket-sms","displayName":"Heymarket SMS","description":"Heymarket business texting: create or update contacts, send custom and template messages, update lists.","auth":{"kind":"api-key","hint":"Heymarket private API token, sent as Bearer in the Authorization header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.createOrUpdate","description":"Create a new Heymarket contact or update an existing one keyed by phone number (or contact_id when supplied).","parameters":{"type":"object","properties":{"phone":{"type":"string"},"first":{"type":"string"},"last":{"type":"string"},"display_name":{"type":"string"},"email":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"is_opted_out":{"type":"boolean"},"contact_id":{"type":"string"},"overwrite":{"type":"boolean"}},"required":["phone"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"messages.sendCustom","description":"Send a custom SMS/MMS message from a Heymarket inbox to a phone number or group of targets.","parameters":{"type":"object","properties":{"inbox_id":{"type":"integer"},"creator_id":{"type":"integer"},"text":{"type":"string"},"phone_number":{"type":"string"},"targets":{"type":"array","items":{"type":"string"}}},"required":["inbox_id","creator_id","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.sendTemplate","description":"Send a templated Heymarket message identified by template_id from the given inbox.","parameters":{"type":"object","properties":{"inbox_id":{"type":"integer"},"creator_id":{"type":"integer"},"template_id":{"type":"integer"},"phone_number":{"type":"string"},"targets":{"type":"array","items":{"type":"string"}}},"required":["inbox_id","creator_id","template_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.update","description":"Rename a Heymarket list and add/remove member phone numbers. Risk-classed as read by the upstream piece but mutates list membership.","parameters":{"type":"object","properties":{"list_id":{"type":"integer"},"title":{"type":"string"},"add_phone":{"type":"string"},"remove_phone":{"type":"string"},"members":{"type":"object"}},"required":["list_id","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.delete","description":"Delete a Heymarket contact by contact_id. Heymarket returns 200 on first delete, 404 on subsequent calls.","parameters":{"type":"object","properties":{"contact_id":{"type":"string","description":"The Heymarket contact identifier to delete."}},"required":["contact_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"heyreach","displayName":"HeyReach","description":"LinkedIn outreach automation at agency scale. List campaigns and lists, add leads to campaigns, look up leads, and read inbox conversations.","auth":{"kind":"api-key","hint":"Generate an API key in HeyReach (Settings -> Integrations -> Public API). Sent as the X-API-KEY header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"campaign.list","description":"List campaigns in the workspace with pagination.","parameters":{"type":"object","properties":{"offset":{"type":"integer","description":"Number of records to skip."},"limit":{"type":"integer","description":"Maximum records to return."}},"required":["offset","limit"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"list.list","description":"List lead lists in the workspace with pagination.","parameters":{"type":"object","properties":{"offset":{"type":"integer","description":"Number of records to skip."},"limit":{"type":"integer","description":"Maximum records to return."}},"required":["offset","limit"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lead.get","description":"Get details for a lead by their LinkedIn profile URL.","parameters":{"type":"object","properties":{"profileUrl":{"type":"string","description":"LinkedIn profile URL of the lead."}},"required":["profileUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaign.add_leads","description":"Add leads (LinkedIn profiles) to an active campaign, assigned to specific sender accounts.","parameters":{"type":"object","properties":{"campaignId":{"type":"integer","description":"Target campaign ID (must be ACTIVE or IN_PROGRESS)."},"accountLeadPairs":{"type":"array","description":"Array of pairs, each with an optional linkedInAccountId (sender) and a lead object (profileUrl, firstName, lastName, companyName, position, location, emailAddress).","items":{"type":"object"}}},"required":["campaignId","accountLeadPairs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"inbox.get_conversations","description":"Retrieve inbox conversations with filtering and pagination.","parameters":{"type":"object","properties":{"offset":{"type":"integer","description":"Number of records to skip."},"limit":{"type":"integer","description":"Maximum records to return."},"filters":{"type":"object","description":"Optional conversation filters."}},"required":["offset","limit"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"hightouch","displayName":"Hightouch","description":"List and inspect Reverse ETL syncs, sources, destinations, and runs, and trigger sync runs.","auth":{"kind":"api-key","hint":"API key from Settings -> API keys (Add API key). Sent as the Authorization: Bearer header."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"syncs.list","description":"List configured syncs in the workspace.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"modelId":{"type":"number"},"slug":{"type":"string"},"orderBy":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"syncs.get","description":"Retrieve a single sync by its id.","parameters":{"type":"object","properties":{"syncId":{"type":"number"}},"required":["syncId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"syncs.list_runs","description":"List the runs (execution history and status) for a sync.","parameters":{"type":"object","properties":{"syncId":{"type":"number"},"limit":{"type":"integer"},"offset":{"type":"integer"},"runId":{"type":"number"},"orderBy":{"type":"string"}},"required":["syncId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sources.list","description":"List configured data sources.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"name":{"type":"string"},"slug":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"destinations.list","description":"List configured destinations.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"name":{"type":"string"},"slug":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"syncs.trigger","description":"Trigger a run of the given sync, optionally forcing a full resync.","parameters":{"type":"object","properties":{"syncId":{"type":"string"},"fullResync":{"type":"boolean"},"resetCDC":{"type":"boolean"}},"required":["syncId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"housecall-pro","displayName":"Housecall Pro","description":"Manage Housecall Pro customers, jobs, leads, line items, attachments, notes, and tags for home-service CRM workflows.","auth":{"kind":"api-key","hint":"Housecall Pro Public API key (Settings → API). Sent as a Bearer token on every request."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"customers.search","description":"Search customers by name, email, or phone number.","parameters":{"type":"object","properties":{"q":{"type":"string"},"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":200}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.get","description":"Read a single customer by id.","parameters":{"type":"object","properties":{"customer_id":{"type":"string"}},"required":["customer_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.create","description":"Create a new Housecall Pro customer.","parameters":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"},"mobile_number":{"type":"string"},"home_number":{"type":"string"},"work_number":{"type":"string"},"company":{"type":"string"},"notifications_enabled":{"type":"boolean"}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.update","description":"Update an existing Housecall Pro customer.","parameters":{"type":"object","properties":{"customer_id":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"},"mobile_number":{"type":"string"},"home_number":{"type":"string"},"work_number":{"type":"string"},"company":{"type":"string"},"notifications_enabled":{"type":"boolean"}},"required":["customer_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"customers.addresses.create","description":"Add an address to an existing customer.","parameters":{"type":"object","properties":{"customer_id":{"type":"string"},"street":{"type":"string"},"street_line_2":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"},"country":{"type":"string"},"type":{"type":"string"}},"required":["customer_id","street","city","state"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"jobs.search","description":"Search jobs by customer, status, or scheduled date window.","parameters":{"type":"object","properties":{"customer_id":{"type":"string"},"work_status":{"type":"string"},"scheduled_start_min":{"type":"string"},"scheduled_start_max":{"type":"string"},"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":200}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobs.get","description":"Read a single job by id.","parameters":{"type":"object","properties":{"job_id":{"type":"string"}},"required":["job_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobs.update","description":"Update a job, including replacing or appending its line items and refreshing input materials.","parameters":{"type":"object","properties":{"job_id":{"type":"string"},"line_items":{"type":"array"},"append_line_items":{"type":"boolean"},"job_input_materials":{"type":"array"},"work_status":{"type":"string"},"description":{"type":"string"}},"required":["job_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"jobs.line_items.create","description":"Create a single line item on a job.","parameters":{"type":"object","properties":{"job_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"unit_price":{"type":"number"},"unit_cost":{"type":"number"},"quantity":{"type":"number"},"taxable":{"type":"boolean"},"kind":{"type":"string"},"tax_surcharge_type":{"type":"string"},"service_line_id":{"type":"string"},"service_line_type":{"type":"string"}},"required":["job_id","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"jobs.notes.create","description":"Add a note to a job.","parameters":{"type":"object","properties":{"job_id":{"type":"string"},"content":{"type":"string"}},"required":["job_id","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"jobs.attachments.create","description":"Upload a file attachment to a job.","parameters":{"type":"object","properties":{"job_id":{"type":"string"},"name":{"type":"string"},"file":{"type":"string"},"content_type":{"type":"string"}},"required":["job_id","name","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"jobs.tags.add","description":"Apply a tag to a job by tag id.","parameters":{"type":"object","properties":{"job_id":{"type":"string"},"tag_id":{"type":"string"}},"required":["job_id","tag_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.search","description":"Search leads by status or assigned employee.","parameters":{"type":"object","properties":{"status":{"type":"string"},"assigned_employee_id":{"type":"string"},"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":200}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.get","description":"Read a single lead by id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.convert","description":"Convert a lead into an estimate or a job. type must be \"estimate\" or \"job\".","parameters":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["estimate","job"]}},"required":["id","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"http","displayName":"HTTP Request","description":"Send an arbitrary HTTP request to any http(s) URL. Useful for hitting one-off APIs, probes, public JSON feeds, or operator-controlled webhooks. No shared auth — the agent supplies the full URL, method, headers, and body at invocation time.","auth":{"kind":"none"},"category":"webhook","defaultConsistencyModel":"advisory","capabilities":[{"name":"request.fetch","class":"read","description":"Issue a GET/HEAD/OPTIONS request to a URL. Returns the parsed JSON body if the response Content-Type is application/json, otherwise the raw text. The `etag` of the response (when present) is exposed for downstream conditional reads.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Absolute http(s) URL to fetch."},"method":{"type":"string","enum":["GET","HEAD","OPTIONS"],"description":"HTTP verb. Defaults to GET."},"headers":{"type":"object","description":"Optional request headers. Header names are lower-cased before send.","additionalProperties":{"type":"string"}},"query":{"type":"object","description":"Optional query-string parameters. Values are coerced to string; arrays become repeated keys.","additionalProperties":true},"timeoutMs":{"type":"number","description":"Per-request timeout in milliseconds. Defaults to 15000, capped at 60000."}},"required":["url"]}},{"name":"request.send","class":"mutation","description":"Issue a POST/PUT/PATCH/DELETE request to a URL. The agent supplies the body verbatim — pass an object for JSON, a string for raw text. The idempotency key is forwarded as the `Idempotency-Key` header; receivers that honour it (Stripe, Square, many SaaS APIs) dedupe automatically.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Absolute http(s) URL to call."},"method":{"type":"string","enum":["POST","PUT","PATCH","DELETE"],"description":"HTTP verb. Defaults to POST."},"headers":{"type":"object","description":"Optional request headers. Header names are lower-cased before send.","additionalProperties":{"type":"string"}},"query":{"type":"object","description":"Optional query-string parameters appended to the URL.","additionalProperties":true},"body":{"description":"Request body. Objects are JSON-encoded with `content-type: application/json`; strings are sent verbatim with the caller-supplied content-type (defaulting to text/plain)."},"timeoutMs":{"type":"number","description":"Per-request timeout in milliseconds. Defaults to 15000, capped at 60000."}},"required":["url"]},"cas":"none","externalEffect":true}]},{"kind":"hubspot","displayName":"HubSpot CRM","description":"Look up callers in HubSpot, upsert contacts without duplicates, and log call notes as CRM activities. Three capabilities — the voice-agent's CRM hot path.","auth":{"kind":"oauth2","authorizationUrl":"https://app.hubspot.com/oauth/authorize","tokenUrl":"https://api.hubapi.com/oauth/v1/token","scopes":["oauth","crm.objects.contacts.read","crm.objects.contacts.write"],"clientIdEnv":"HUBSPOT_OAUTH_CLIENT_ID","clientSecretEnv":"HUBSPOT_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"find_contact","class":"read","description":"Search HubSpot contacts by email. Returns the first match or {found:false}.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email to search for (case-insensitive)."}},"required":["email"]}},{"name":"upsert_contact","class":"mutation","description":"Create-or-update a contact identified by email. Returns the contact id and a `created` flag indicating whether the row was new.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"email":{"type":"string"},"properties":{"type":"object","additionalProperties":{"type":"string"},"description":"Property map (firstname, lastname, phone, company, …)."}},"required":["email"]}},{"name":"create_note","class":"mutation","description":"Log a note engagement against a contact. Append-only — note bodies do not conflict.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"contactId":{"type":"string"},"body":{"type":"string","description":"Note body (HTML or plain text)."}},"required":["contactId","body"]}},{"name":"create_deal","class":"mutation","description":"Create a new deal in the connected HubSpot account. Optionally associate the deal with one or more contacts at creation time via `associations.contactIds`.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["crm.objects.deals.write"],"parameters":{"type":"object","properties":{"properties":{"type":"object","properties":{"dealname":{"type":"string","description":"Deal name shown in HubSpot."},"amount":{"type":"string","description":"Deal amount (HubSpot stores as string)."},"dealstage":{"type":"string","description":"Deal stage id within the target pipeline."},"pipeline":{"type":"string","description":"Pipeline id; defaults to the portal default pipeline when omitted."},"closedate":{"type":"string","description":"RFC3339 / ISO8601 close date."}},"required":["dealname"]},"associations":{"type":"object","properties":{"contactIds":{"type":"array","items":{"type":"string"},"description":"Contact ids to associate with the new deal."}}}},"required":["properties"]}},{"name":"update_deal_stage","class":"mutation","description":"Move an existing deal to a different stage. Use update_deal_stage when only the stage changes — for richer property updates, use the generic HubSpot CRM batch APIs.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["crm.objects.deals.write"],"parameters":{"type":"object","properties":{"dealId":{"type":"string","description":"HubSpot deal object id."},"dealstage":{"type":"string","description":"Target deal stage id."}},"required":["dealId","dealstage"]}},{"name":"create_ticket","class":"mutation","description":"Create a support ticket. `subject` is the only required property; `hs_pipeline_stage` and `hs_ticket_priority` default to the portal defaults when omitted.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["tickets"],"parameters":{"type":"object","properties":{"properties":{"type":"object","properties":{"subject":{"type":"string","description":"Ticket subject / title."},"content":{"type":"string","description":"Ticket body (HTML or plain text)."},"hs_pipeline_stage":{"type":"string","description":"Stage id within the ticket pipeline."},"hs_ticket_priority":{"type":"string","enum":["LOW","MEDIUM","HIGH"],"description":"HubSpot ticket priority enum."}},"required":["subject"]}},"required":["properties"]}}]},{"kind":"hugging-face","displayName":"Hugging Face","description":"Run inference on 100,000+ open ML models on Hugging Face for NLP, vision, and audio tasks via the Inference API and the OpenAI-compatible Inference Router.","auth":{"kind":"api-key","hint":"Hugging Face user access token (starts with hf_…). Create one at https://huggingface.co/settings/tokens with at least the \"Make calls to inference providers\" scope."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"chat.completion","description":"OpenAI-compatible chat completion against any Hugging Face router-exposed model (e.g. meta-llama/Meta-Llama-3-8B-Instruct, Qwen/Qwen2.5-72B-Instruct). Pass the OpenAI-style body (model, messages, temperature, max_tokens, top_p, stop, stream).","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Hugging Face model id served by the Inference Router."},"messages":{"type":"array","description":"Ordered conversation turns ({ role, content }).","items":{"type":"object"}},"max_tokens":{"type":"integer","minimum":1},"temperature":{"type":"number","minimum":0,"maximum":2},"top_p":{"type":"number","minimum":0,"maximum":1},"frequency_penalty":{"type":"number","minimum":-2,"maximum":2},"presence_penalty":{"type":"number","minimum":-2,"maximum":2},"stop":{"type":"array","items":{"type":"string"}},"stream":{"type":"boolean"}},"required":["model","messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"text.summarization","description":"Summarize input text against a summarization model (default upstream: facebook/bart-large-cnn). Body shape: { inputs, parameters }.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Summarization model id, e.g. facebook/bart-large-cnn."},"inputs":{"type":"string","description":"Source text to summarize."},"parameters":{"type":"object","properties":{"min_length":{"type":"integer","minimum":0},"max_length":{"type":"integer","minimum":1},"do_sample":{"type":"boolean"}}},"options":{"type":"object","properties":{"use_cache":{"type":"boolean"},"wait_for_model":{"type":"boolean"}}}},"required":["model","inputs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"text.classification","description":"Classify input text (sentiment, topic, NLI, etc.) against a text-classification model (default upstream: distilbert-base-uncased-finetuned-sst-2-english).","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Text classification model id."},"inputs":{"type":"string","description":"Text to classify."},"options":{"type":"object","properties":{"use_cache":{"type":"boolean"},"wait_for_model":{"type":"boolean"}}}},"required":["model","inputs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"language.translation","description":"Translate input text using a translation model (e.g. Helsinki-NLP/opus-mt-en-fr or facebook/nllb-200-distilled-600M).","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Translation model id."},"inputs":{"type":"string","description":"Source text to translate."},"parameters":{"type":"object","properties":{"src_lang":{"type":"string"},"tgt_lang":{"type":"string"}}},"options":{"type":"object","properties":{"use_cache":{"type":"boolean"},"wait_for_model":{"type":"boolean"}}}},"required":["model","inputs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"document.question.answering","description":"Answer a question grounded in a document image against a document-question-answering model (e.g. impira/layoutlm-document-qa). `inputs` carries `image` as a base64 string or hosted URL plus the natural-language `question`.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Document QA model id."},"inputs":{"type":"object","properties":{"image":{"type":"string","description":"Base64-encoded image bytes or a URL the model server can fetch."},"question":{"type":"string"}},"required":["image","question"]},"options":{"type":"object","properties":{"use_cache":{"type":"boolean"},"wait_for_model":{"type":"boolean"}}}},"required":["model","inputs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"create.image","description":"Generate an image from a text prompt with a text-to-image model (e.g. stabilityai/stable-diffusion-xl-base-1.0, black-forest-labs/FLUX.1-dev). Response is raw image bytes.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Text-to-image model id."},"inputs":{"type":"string","description":"Prompt describing the desired image."},"parameters":{"type":"object","properties":{"negative_prompt":{"type":"string"},"width":{"type":"integer","minimum":64,"maximum":2048},"height":{"type":"integer","minimum":64,"maximum":2048},"num_inference_steps":{"type":"integer","minimum":1,"maximum":100},"guidance_scale":{"type":"number","minimum":0,"maximum":20},"seed":{"type":"integer"}}},"options":{"type":"object","properties":{"use_cache":{"type":"boolean"},"wait_for_model":{"type":"boolean"}}}},"required":["model","inputs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"object.detection","description":"Detect objects in an image with an object-detection model (e.g. facebook/detr-resnet-50). `inputs` is a base64 image string or hosted URL.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Object detection model id."},"inputs":{"type":"string","description":"Base64-encoded image bytes or a URL the model server can fetch."},"options":{"type":"object","properties":{"use_cache":{"type":"boolean"},"wait_for_model":{"type":"boolean"}}}},"required":["model","inputs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"image.classification","description":"Classify an image with an image-classification model (e.g. google/vit-base-patch16-224). `inputs` is a base64 image string or hosted URL.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Image classification model id."},"inputs":{"type":"string","description":"Base64-encoded image bytes or a URL the model server can fetch."},"options":{"type":"object","properties":{"use_cache":{"type":"boolean"},"wait_for_model":{"type":"boolean"}}}},"required":["model","inputs"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"models.get","description":"Fetch Hub metadata for a model (pipeline tag, license, downloads, last-modified) from the public Hub API.","parameters":{"type":"object","properties":{"model":{"type":"string"}},"required":["model"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"models.search","description":"Search the Hugging Face model Hub. Use `search` for free-text queries, `filter` for pipeline-tag/library filters, and `sort` to order by downloads, likes, or modification time.","parameters":{"type":"object","properties":{"search":{"type":"string"},"filter":{"type":"string","description":"Filter expression, e.g. \"text-classification\" or \"pipeline_tag:summarization\"."},"author":{"type":"string"},"sort":{"type":"string","enum":["downloads","likes","lastModified"]},"direction":{"type":"integer","enum":[-1,1]},"limit":{"type":"integer","minimum":1,"maximum":1000}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"huggingface","displayName":"Hugging Face","description":"Browse the Hugging Face Hub (models, datasets, spaces), manage repos and discussions, and run OpenAI-compatible chat completions through the Inference Router.","auth":{"kind":"api-key","hint":"Hugging Face User Access Token (starts with hf_…). Create one at https://huggingface.co/settings/tokens. The token must carry at least the read-repos scope for catalog reads, write-repos for repo mutations, discussion for discussion writes, and inference-api for chat completions."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"auth.whoami","description":"Resolve the calling token to its Hub user / org identity, including the token name and granted scopes. Cheap probe used to validate a freshly-connected token before declaring a connection healthy.","parameters":{"type":"object","properties":{}},"requiredScopes":["read-repos"],"class":"read"},{"name":"models.list","description":"Search and page the model catalog. Supports the Hub`s standard query knobs: free-text search, author/owner filter, library/task filter, and ordering.","parameters":{"type":"object","properties":{"search":{"type":"string","description":"Free-text search across model card and repo id."},"author":{"type":"string","description":"Restrict to a user or org namespace."},"filter":{"type":"string","description":"Hub filter tag, e.g. `text-generation`, `pytorch`, `dataset:wikitext`."},"sort":{"type":"string","description":"Sort key: `downloads`, `likes`, `lastModified`, `createdAt`."},"direction":{"type":"string","enum":["-1","1"],"description":"-1 descending, 1 ascending."},"limit":{"type":"integer","minimum":1,"maximum":1000},"full":{"type":"boolean","description":"Include full siblings + cardData payload per row."}}},"requiredScopes":["read-repos"],"class":"read"},{"name":"models.get","description":"Fetch the full repo record for one model — including siblings (files), cardData (parsed README front-matter), tags, license, and gated-access state.","parameters":{"type":"object","properties":{"repo_id":{"type":"string","description":"Fully-qualified id, e.g. `mistralai/Mistral-7B-Instruct-v0.3`."},"revision":{"type":"string","description":"Optional git ref (branch, tag, or sha). Defaults to main."}},"required":["repo_id"]},"requiredScopes":["read-repos"],"class":"read"},{"name":"datasets.list","description":"Search and page the dataset catalog with the same query knobs as the model catalog.","parameters":{"type":"object","properties":{"search":{"type":"string"},"author":{"type":"string"},"filter":{"type":"string"},"sort":{"type":"string"},"direction":{"type":"string","enum":["-1","1"]},"limit":{"type":"integer","minimum":1,"maximum":1000},"full":{"type":"boolean"}}},"requiredScopes":["read-repos"],"class":"read"},{"name":"datasets.get","description":"Fetch the full repo record for one dataset.","parameters":{"type":"object","properties":{"repo_id":{"type":"string","description":"Fully-qualified id, e.g. `wikitext` or `squad`."},"revision":{"type":"string"}},"required":["repo_id"]},"requiredScopes":["read-repos"],"class":"read"},{"name":"spaces.list","description":"Search and page Hugging Face Spaces (community-hosted demo apps).","parameters":{"type":"object","properties":{"search":{"type":"string"},"author":{"type":"string"},"filter":{"type":"string"},"sort":{"type":"string"},"direction":{"type":"string","enum":["-1","1"]},"limit":{"type":"integer","minimum":1,"maximum":1000}}},"requiredScopes":["read-repos"],"class":"read"},{"name":"spaces.get","description":"Fetch the full repo record for one Space, including its runtime status and hardware tier.","parameters":{"type":"object","properties":{"repo_id":{"type":"string"},"revision":{"type":"string"}},"required":["repo_id"]},"requiredScopes":["read-repos"],"class":"read"},{"name":"repos.create","description":"Create a new repo under the authenticated namespace. The Hub treats repo creation as idempotent on (type, name) — a duplicate POST returns 409 surfaced by the engine as a conflict result rather than a thrown error.","parameters":{"type":"object","properties":{"type":{"type":"string","enum":["model","dataset","space"]},"name":{"type":"string","description":"Repo slug (without owner prefix)."},"organization":{"type":"string","description":"Owner namespace. Omit to create under the authenticated user."},"private":{"type":"boolean","description":"Create as private. Defaults to public."},"sdk":{"type":"string","enum":["gradio","streamlit","docker","static"],"description":"Only meaningful for type=space."}},"required":["type","name"]},"requiredScopes":["write-repos"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"repos.delete","description":"Delete a repo under the authenticated namespace. The Hub accepts repeated DELETEs of an already-deleted repo as 404 — caller-side dedupe is recommended.","parameters":{"type":"object","properties":{"type":{"type":"string","enum":["model","dataset","space"]},"name":{"type":"string"},"organization":{"type":"string"}},"required":["type","name"]},"requiredScopes":["write-repos"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"discussions.list","description":"List discussions and pull requests on a model repo. Returns paged threads with status, author, and last-updated metadata.","parameters":{"type":"object","properties":{"repo_id":{"type":"string"},"status":{"type":"string","enum":["open","closed","all"]},"type":{"type":"string","enum":["discussion","pull-request","all"]},"p":{"type":"integer","minimum":0,"description":"Zero-indexed page."}},"required":["repo_id"]},"requiredScopes":["read-repos"],"class":"read"},{"name":"discussions.create","description":"Open a new discussion thread on a model repo with an initial comment. The Hub does not honour an idempotency key here; replays create duplicate threads.","parameters":{"type":"object","properties":{"repo_id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string","description":"Markdown body of the opening comment."},"pull_request":{"type":"boolean","description":"If true, open as a pull request (requires the matching branch)."}},"required":["repo_id","title","description"]},"requiredScopes":["discussion"],"class":"mutation","cas":"none","externalEffect":true},{"name":"discussions.comment","description":"Append a comment to an existing discussion or pull request thread. Replays produce duplicate comments — caller-owned dedupe.","parameters":{"type":"object","properties":{"repo_id":{"type":"string"},"discussion_num":{"type":"integer","minimum":1},"comment":{"type":"string","description":"Markdown body."}},"required":["repo_id","discussion_num","comment"]},"requiredScopes":["discussion"],"class":"mutation","cas":"none","externalEffect":true},{"name":"inference.chat_completions","description":"Run a chat completion against the Hugging Face Inference Router, which exposes an OpenAI-compatible /v1/chat/completions surface and routes the request to the appropriate serverless or dedicated endpoint. Generation is non-idempotent — replay yields a new sample.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Routed model id, e.g. `meta-llama/Llama-3.1-70B-Instruct` or `<owner>/<model>:<provider>` to pin a backend."},"messages":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["system","user","assistant","tool"]},"content":{},"name":{"type":"string"},"tool_call_id":{"type":"string"}},"required":["role"]}},"max_tokens":{"type":"integer","minimum":1},"temperature":{"type":"number","minimum":0,"maximum":2},"top_p":{"type":"number","minimum":0,"maximum":1},"stream":{"type":"boolean"},"stop":{"type":"array","items":{"type":"string"}},"tools":{"type":"array","items":{"type":"object"}},"tool_choice":{},"response_format":{"type":"object"},"seed":{"type":"integer"}},"required":["model","messages"]},"requiredScopes":["inference-api"],"class":"mutation","cas":"none","externalEffect":true},{"name":"inference.models.list","description":"Enumerate models reachable through the Inference Router for the calling token (serverless + dedicated). Useful before chat_completions to validate model availability.","parameters":{"type":"object","properties":{}},"requiredScopes":["inference-api"],"class":"read"}]},{"kind":"hume-ai","displayName":"Hume AI","description":"Generate speech synthesis, analyze emotions from media, and manage custom voices.","auth":{"kind":"api-key","hint":"Hume AI API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"speech.generate","description":"Convert text to speech using Hume AI voice synthesis.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"The text to convert to speech"},"voiceDescription":{"type":"string","description":"Natural language description of how the speech should sound"},"voiceName":{"type":"string","description":"Optional name of a custom voice to use"},"format":{"type":"string","enum":["wav","mp3","ulaw"],"description":"The output audio file format"},"speed":{"type":"number","description":"Speed multiplier for the synthesized speech (0.75-1.5)"},"contextText":{"type":"string","description":"Optional context text to influence speech style"},"contextDescription":{"type":"string","description":"Description for the context text"},"trailingSilence":{"type":"number","description":"Duration of silence to add at the end in seconds"},"splitUtterances":{"type":"boolean","description":"Automatically split text into natural-sounding segments"},"numGenerations":{"type":"integer","description":"Number of audio generations to produce (1-5)"}},"required":["text","format"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"speech.from-file","description":"Generate speech from an audio file using voice cloning.","parameters":{"type":"object","properties":{"generationId":{"type":"string","description":"The unique ID from a previous TTS generation to use as voice"},"text":{"type":"string","description":"The text to convert to speech"},"format":{"type":"string","enum":["wav","mp3","ulaw"],"description":"The output audio file format"},"speed":{"type":"number","description":"Speed multiplier for the synthesized speech"}},"required":["generationId","text","format"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"voice.create","description":"Create a custom voice from a TTS generation.","parameters":{"type":"object","properties":{"generationId":{"type":"string","description":"The unique ID from a previous TTS generation to save as voice"},"voiceName":{"type":"string","description":"A descriptive name for the custom voice"}},"required":["generationId","voiceName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"voice.delete","description":"Delete a custom voice.","parameters":{"type":"object","properties":{"voiceName":{"type":"string","description":"The name of the custom voice to delete"}},"required":["voiceName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"emotions.analyze","description":"Analyze emotions from media URLs (images, videos, or audio).","parameters":{"type":"object","properties":{"urls":{"type":"array","items":{"type":"string"},"description":"URLs to media files to analyze"},"models":{"type":"object","description":"Specify which models to use for inference"},"transcription":{"type":"boolean","description":"Include speech-to-text transcription in the analysis"},"callbackUrl":{"type":"string","description":"Optional webhook URL to receive results when the job completes"},"notify":{"type":"boolean","description":"Send email notification upon job completion or failure"}},"required":["urls"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"emotions.results","description":"Retrieve results from a completed emotion analysis job.","parameters":{"type":"object","properties":{"jobId":{"type":"string","description":"The ID of the emotion analysis job"}},"required":["jobId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"hunter","displayName":"Hunter","description":"Find, verify and manage professional email addresses at scale. Automate email discovery, validation, lead tracking, and campaign outreach with Hunter.io.","auth":{"kind":"api-key","hint":"Hunter API key from API → API keys. Sent as the api_key query parameter."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"find.email","description":"Find the most likely email address of a person at a company, given the company domain and the person name.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name of the company (e.g. stripe.com)."},"company":{"type":"string","description":"Company name, used when the domain is not known."},"first_name":{"type":"string"},"last_name":{"type":"string"},"full_name":{"type":"string"},"max_duration":{"type":"integer","minimum":3,"maximum":20}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"verify.email","description":"Verify the deliverability of an email address. Marked as a mutation because Hunter bills a verification credit per call.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address to verify."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"count.emails","description":"Return the total number of email addresses Hunter has indexed for a given domain or company. Counts against the search-quota.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"company":{"type":"string"},"type":{"type":"string","enum":["personal","generic"],"description":"Restrict the count to personal or generic email addresses."}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"search.leads","description":"List or search leads in the Hunter account.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0},"lead_list_id":{"type":"integer"},"query":{"type":"string","description":"Free-text query (matches email, name, company)."},"email":{"type":"string"},"company":{"type":"string"},"phone_number":{"type":"string"},"twitter":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.lead","description":"Return a single lead by its Hunter lead ID.","parameters":{"type":"object","properties":{"id":{"type":"integer","description":"The Hunter lead ID."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"create.lead","description":"Create a new lead in the Hunter account.","parameters":{"type":"object","properties":{"email":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"position":{"type":"string"},"company":{"type":"string"},"company_industry":{"type":"string"},"company_size":{"type":"string"},"confidence_score":{"type":"integer","minimum":0,"maximum":100},"website":{"type":"string"},"country_code":{"type":"string"},"linkedin_url":{"type":"string"},"phone_number":{"type":"string"},"twitter":{"type":"string"},"notes":{"type":"string"},"source":{"type":"string"},"lead_list_id":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.lead","description":"Update an existing lead. Only fields included in the request are modified.","parameters":{"type":"object","properties":{"id":{"type":"integer","description":"The Hunter lead ID."},"email":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"position":{"type":"string"},"company":{"type":"string"},"company_industry":{"type":"string"},"company_size":{"type":"string"},"confidence_score":{"type":"integer","minimum":0,"maximum":100},"website":{"type":"string"},"country_code":{"type":"string"},"linkedin_url":{"type":"string"},"phone_number":{"type":"string"},"twitter":{"type":"string"},"notes":{"type":"string"},"source":{"type":"string"},"lead_list_id":{"type":"integer"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"delete.lead","description":"Permanently delete a lead from the Hunter account.","parameters":{"type":"object","properties":{"id":{"type":"integer","description":"The Hunter lead ID."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"add.recipients","description":"Add recipients (leads or raw email addresses) to a Hunter Campaigns campaign.","parameters":{"type":"object","properties":{"campaign_id":{"type":"integer","description":"The Hunter campaign ID to add recipients to."},"emails":{"type":"array","items":{"type":"string"},"description":"Email addresses to add as recipients."},"lead_ids":{"type":"array","items":{"type":"integer"},"description":"Existing Hunter lead IDs to add as recipients."}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"hystruct","displayName":"Hystruct","description":"AI-powered document structuring and data extraction.","auth":{"kind":"api-key","hint":"Hystruct API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"job.create","description":"Create a document extraction job.","parameters":{"type":"object","properties":{"workflowId":{"type":"string","description":"The ID of the workflow to run"},"markdown":{"type":"string","description":"The markdown content to structure"}},"required":["workflowId","markdown"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"ibm-cognose","displayName":"IBM Cognos Analytics","description":"Business intelligence and performance management suite for data analysis and reporting","auth":{"kind":"api-key","hint":"IBM Cognos Analytics API key with base URL and CAM namespace."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"datasources.create","description":"Create a new data source in Cognos.","parameters":{"type":"object","properties":{"defaultName":{"type":"string"},"connectionString":{"type":"string"},"driverName":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"},"signonDefaultName":{"type":"string"},"disabled":{"type":"boolean"},"hidden":{"type":"boolean"}},"required":["defaultName","connectionString"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"datasources.update","description":"Update an existing data source.","parameters":{"type":"object","properties":{"id":{"type":"string"},"defaultName":{"type":"string"},"connectionString":{"type":"string"},"driverName":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"},"version":{"type":"number"},"disabled":{"type":"boolean"},"hidden":{"type":"boolean"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"datasources.delete","description":"Delete a data source.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"datasources.get","description":"Retrieve details of a data source.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"objects.update","description":"Update a content object (report, dashboard, folder).","parameters":{"type":"object","properties":{"id":{"type":"string"},"defaultDescriptions":{"type":"string"},"type":{"type":"string"},"version":{"type":"number"},"disabled":{"type":"boolean"},"hidden":{"type":"boolean"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"objects.get","description":"Retrieve a content object.","parameters":{"type":"object","properties":{"id":{"type":"string"},"fields":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"objects.move","description":"Move a content object to a different folder.","parameters":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string"}},"required":["id","parentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"objects.copy","description":"Copy a content object.","parameters":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string"},"recursive":{"type":"boolean"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"image-router","displayName":"ImageRouter","description":"Generate images with any model available on ImageRouter — text-to-image and image-to-image edits via an OpenAI-compatible API surface.","auth":{"kind":"api-key","hint":"ImageRouter API key. Create one at https://imagerouter.io under Account > API Keys."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"models.list","description":"List image generation and edit models routable through ImageRouter. Use the returned `id` values to populate createImage.model / imageToImage.model.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"createImage","description":"Generate one or more images from a text prompt. Returns a JSON envelope with `data[]` containing `url` (when response_format=url, default) or `b64_json` (when response_format=b64_json).","parameters":{"type":"object","properties":{"prompt":{"type":"string","description":"Text prompt describing the image you want to generate."},"model":{"type":"string","description":"Routable model id (see models.list). Examples: \"openai/dall-e-3\", \"stabilityai/sdxl-turbo\"."},"n":{"type":"integer","minimum":1,"maximum":10,"description":"Number of images to generate. Not all models honor n>1."},"quality":{"type":"string","description":"Image quality hint (e.g. \"standard\", \"hd\"). Not all models support this."},"size":{"type":"string","description":"Image size in `WxH` form (e.g. \"1024x1024\"). Model-dependent allowed values."},"responseFormat":{"type":"string","enum":["url","b64_json"],"description":"How to receive the generated image: hosted URL or inline base64."},"user":{"type":"string","description":"End-user identifier forwarded to the upstream model for abuse tracking."}},"required":["prompt","model"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"imageToImage","description":"Edit or transform an input image (optionally with one or more mask images) using a prompt. Returns the same `data[]` envelope as createImage.","parameters":{"type":"object","properties":{"prompt":{"type":"string","description":"Text prompt describing the desired edit / transformation."},"model":{"type":"string","description":"Routable model id supporting image edit (see models.list)."},"image":{"type":"string","description":"Input image as a publicly-fetchable URL, a `data:image/...;base64,...` URI, or a hosted asset id the model can resolve."},"images":{"type":"array","items":{"type":"string"},"description":"Up to 16 additional input images (URLs or data: URIs) for multi-image edit models that accept a reference set."},"mask":{"type":"string","description":"Optional single mask image. White pixels are the editable region; black pixels are preserved."},"masks":{"type":"array","items":{"type":"string"},"description":"Optional list of mask images, one per entry in `images`."},"n":{"type":"integer","minimum":1,"maximum":10,"description":"Number of edited images to generate."},"size":{"type":"string","description":"Output image size in `WxH` form (model-dependent allowed values)."},"responseFormat":{"type":"string","enum":["url","b64_json"],"description":"How to receive the edited image: hosted URL or inline base64."},"user":{"type":"string","description":"End-user identifier forwarded to the upstream model for abuse tracking."}},"required":["prompt","model","image"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"imap","displayName":"IMAP","description":"Receive new email via IMAP, mark emails as read, copy, move, or delete emails.","auth":{"kind":"api-key","hint":"IMAP server credentials (host, username, password, port, TLS settings)."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"emails.mark-as-read","description":"Mark an email as read.","parameters":{"type":"object","properties":{"mailbox":{"type":"string"},"messageId":{"type":"string"}},"required":["mailbox","messageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"emails.copy","description":"Copy an email to another mailbox.","parameters":{"type":"object","properties":{"mailbox":{"type":"string"},"messageId":{"type":"string"},"targetMailbox":{"type":"string"}},"required":["mailbox","messageId","targetMailbox"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"emails.move","description":"Move an email to another mailbox.","parameters":{"type":"object","properties":{"mailbox":{"type":"string"},"messageId":{"type":"string"},"targetMailbox":{"type":"string"}},"required":["mailbox","messageId","targetMailbox"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"emails.delete","description":"Delete an email permanently.","parameters":{"type":"object","properties":{"mailbox":{"type":"string"},"messageId":{"type":"string"}},"required":["mailbox","messageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"folders.create","description":"Create a new IMAP folder (mailbox).","parameters":{"type":"object","properties":{"folder":{"type":"string","description":"IMAP folder name to create (e.g. INBOX/Archive)."}},"required":["folder"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"influencers-club","displayName":"Influencers.club","description":"Enrich and discover social-media creators on Influencers.club for marketing campaigns: resolve creators by email or handle and find lookalike profiles.","auth":{"kind":"api-key","hint":"Influencers.club API key, sent as the X-API-Key header. Issued from Account → API."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"creators.enrich_by_email","description":"Enrich a creator profile from a known email address, optionally filtering by platform and follower count. Maps to the catalog action enrich.creator.by.email.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"The email address of the creator to enrich."},"exclude_platforms":{"type":"array","items":{"type":"string"},"description":"Social platforms to exclude from the enrichment response."},"min_followers":{"type":"integer","description":"Minimum follower count filter. Defaults to 1000 server-side."},"email_required":{"type":"string","description":"Controls how the upstream handles email availability on returned profiles."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"creators.enrich_by_handle","description":"Enrich a creator profile from a social-media handle and platform. Maps to the catalog action enrich.creator.by.handle.","parameters":{"type":"object","properties":{"handle":{"type":"string","description":"The social-media handle (without leading @) of the creator."},"platform":{"type":"string","description":"The social-media platform that owns the handle (e.g. instagram, tiktok, youtube)."},"include_lookalikes":{"type":"boolean","description":"Include similar creators alongside the primary enrichment. Defaults to true on the upstream."},"email_required":{"type":"string","description":"Controls upstream handling of email availability."}},"required":["handle","platform"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"creators.find_similar","description":"Find creators similar to a seed profile identified by URL, handle, or user id, with optional follower / engagement / verification filters. Maps to the catalog action find.similar.creator.","parameters":{"type":"object","properties":{"filter_key":{"type":"string","description":"The type of identifier supplied in filter_value (e.g. url, handle, user_id)."},"filter_value":{"type":"string","description":"The platform URL, profile handle, or upstream user id of the seed creator."},"platform":{"type":"string","description":"Optional platform hint for the seed profile."},"limit":{"type":"integer","description":"Maximum number of similar creators to return (1-50)."},"number_of_followers":{"type":"object","description":"Follower-count range filter, expressed as { min, max }.","properties":{"min":{"type":"integer"},"max":{"type":"integer"}}},"engagement_percent":{"type":"object","description":"Engagement-rate range filter, expressed as { min, max }.","properties":{"min":{"type":"number"},"max":{"type":"number"}}},"is_verified":{"type":"boolean","description":"When true, restrict results to verified creators."},"exclude_private_profile":{"type":"boolean","description":"When true, drop creators whose profile is private."}},"required":["filter_key","filter_value"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.create","description":"Create a new influencer list. Lists group creators for campaigns, exports, and bulk outreach.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Display name for the new list."},"description":{"type":"string","description":"Optional list description."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.add","description":"Add a creator (by upstream creator id) to an influencer list. Uses native upsert semantics — adding the same creator twice is a no-op.","parameters":{"type":"object","properties":{"list_id":{"type":"string","description":"Target list id."},"creator_id":{"type":"string","description":"Upstream creator id to add to the list."}},"required":["list_id","creator_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.delete","description":"Delete an influencer list and all of its memberships.","parameters":{"type":"object","properties":{"list_id":{"type":"string","description":"List id to delete."}},"required":["list_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"inkbox","displayName":"Inkbox","description":"Use an existing agent identity for email, SMS and iMessage. A send is provider acceptance, not delivery.","auth":{"kind":"api-key","hint":"Claimed, identity-scoped Inkbox X-API-Key. Do not give agents an organization admin key."},"category":"comms","defaultConsistencyModel":"advisory","capabilities":[{"name":"identity.status","description":"Read the connected identity and channel readiness.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"imessage.conversations","description":"List iMessage conversations with offset pagination.","parameters":{"type":"object","properties":{"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"imessage.messages","description":"Read messages in an existing iMessage conversation.","parameters":{"type":"object","properties":{"conversation_id":{"type":"string","minLength":1,"maxLength":256},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":100}},"required":["conversation_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"imessage.reply","description":"Reply to an existing iMessage conversation. Do not blindly retry an uncertain send.","parameters":{"type":"object","properties":{"conversation_id":{"type":"string","minLength":1,"maxLength":256},"text":{"type":"string","minLength":1,"maxLength":18000}},"required":["conversation_id","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"email.list","description":"List messages in the connected identity mailbox.","parameters":{"type":"object","properties":{"email_address":{"type":"string","minLength":1,"maxLength":256},"cursor":{"type":"string","minLength":1,"maxLength":256},"limit":{"type":"integer","minimum":1,"maximum":100}},"required":["email_address"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"email.get","description":"Read the complete stored message before acting on a truncated webhook body.","parameters":{"type":"object","properties":{"email_address":{"type":"string","minLength":1,"maxLength":256},"message_id":{"type":"string","minLength":1,"maxLength":256}},"required":["email_address","message_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"email.send","description":"Send plain-text email; retain the returned message id. The mailbox is the sender, not a model-authored From header.","parameters":{"type":"object","properties":{"email_address":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"string","minLength":1,"maxLength":256}},"subject":{"type":"string","maxLength":998},"text":{"type":"string","minLength":1,"maxLength":18000},"in_reply_to_message_id":{"type":"string","minLength":1,"maxLength":256}},"required":["email_address","to","subject","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"sms.reply","description":"Reply in an existing SMS/MMS conversation from an owned phone number. Provider opt-in rules still apply.","parameters":{"type":"object","properties":{"phone_number_id":{"type":"string","minLength":1,"maxLength":256},"conversation_id":{"type":"string","minLength":1,"maxLength":256},"text":{"type":"string","minLength":1,"maxLength":1600}},"required":["phone_number_id","conversation_id","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"sms.list","description":"List phone messages for reconciliation after a missed webhook.","parameters":{"type":"object","properties":{"phone_number_id":{"type":"string","minLength":1,"maxLength":256},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":100}},"required":["phone_number_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"insightly","displayName":"Insightly","description":"Manage Insightly CRM records (contacts, leads, opportunities, organisations, projects, tasks) across the Insightly v3.1 REST surface.","auth":{"kind":"api-key","hint":"Insightly API key from User Settings → API Key. The connection must also store the per-account apiUrl (e.g. https://api.na1.insightly.com/v3.1) derived from the `pod` field."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.create","description":"Create a record on a supported Insightly object (Contacts, Leads, Opportunities, Organisations, Projects, Tasks, Events, Notes).","parameters":{"type":"object","properties":{"objectName":{"type":"string"},"fields":{"type":"object"}},"required":["objectName","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Update a record on a supported Insightly object. The body must include the existing primary id field (e.g. CONTACT_ID, LEAD_ID, OPPORTUNITY_ID).","parameters":{"type":"object","properties":{"objectName":{"type":"string"},"fields":{"type":"object"}},"required":["objectName","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.get","description":"Fetch a single record by id from the given Insightly object.","parameters":{"type":"object","properties":{"objectName":{"type":"string"},"recordId":{"type":"string"}},"required":["objectName","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.delete","description":"Delete a record by id from the given Insightly object.","parameters":{"type":"object","properties":{"objectName":{"type":"string"},"recordId":{"type":"string"}},"required":["objectName","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.find","description":"Find records on a supported Insightly object by exact field match. Returns up to `top` records (default 100).","parameters":{"type":"object","properties":{"objectName":{"type":"string"},"fieldName":{"type":"string"},"fieldValue":{"type":"string"},"top":{"type":"integer","minimum":1,"maximum":500}},"required":["objectName","fieldName","fieldValue"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"webhooks.list","description":"List webhook subscriptions registered on the Insightly tenant.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"webhooks.create","description":"Register a webhook subscription so Insightly notifies the given URL on object events. Used to back the New/Updated/Deleted Record triggers.","parameters":{"type":"object","properties":{"objectType":{"type":"string"},"eventType":{"type":"string","enum":["Created","Updated","Deleted"]},"webhookUrl":{"type":"string"}},"required":["objectType","eventType","webhookUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Remove a previously registered webhook by id.","parameters":{"type":"object","properties":{"webhookId":{"type":"string"}},"required":["webhookId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"insighto-ai","displayName":"Insighto AI","description":"Build, deploy, and manage AI-powered voice campaigns via Insighto AI.","auth":{"kind":"api-key","hint":"Insighto AI API key. Create one in the Insighto AI dashboard under Settings → API Keys."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"textblobs.add","description":"Add a text blob (text content) to a data source for use in AI models.","parameters":{"type":"object","properties":{"datasource_id":{"type":"string","description":"The UUID of the data source."},"text_content":{"type":"string","description":"The text content to add to the data source."},"name":{"type":"string","description":"Optional name for this text blob entry."},"description":{"type":"string","description":"Optional description of what this text blob contains."},"org_id":{"type":"string","description":"The UUID of the organization."}},"required":["datasource_id","text_content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.upsert","description":"Create or update a contact in Insighto AI.","parameters":{"type":"object","properties":{"first_name":{"type":"string","description":"First name of the contact."},"last_name":{"type":"string","description":"Last name of the contact."},"email":{"type":"string","description":"Email address of the contact."},"phone_number":{"type":"string","description":"Phone number including country code (e.g., 16501111234)."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"calls.create","description":"Make an outbound call using Insighto AI voice capabilities.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Phone number in E.164 format (e.g., 16501234567)."},"prompt_dynamic_variables":{"type":"object","description":"Variables for call prompts (e.g., name, account_id)."}},"required":["to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.create","description":"Create a new campaign for automated outreach via Insighto AI.","parameters":{"type":"object","properties":{"type":{"type":"string","description":"Campaign type (e.g., voice, sms)."},"start_time":{"type":"string","description":"ISO 8601 timestamp for when the campaign should start."},"interval":{"type":"integer","description":"Time between executions in minutes (e.g., 60 for hourly, 1440 for daily)."},"widget_id":{"type":"string","description":"Widget to associate with this campaign."},"status":{"type":"string","enum":["active","paused","stopped"],"description":"Initial campaign status."},"attributes":{"type":"object","description":"Additional campaign attributes as key-value pairs."},"execution_weekdays":{"type":"array","items":{"type":"number"},"description":"Weekdays as numbers (e.g., [1, 2, 3] for Mon, Tue, Wed)."},"time_window_start":{"type":"string","description":"Start time in HH:MM format."},"time_window_end":{"type":"string","description":"End time in HH:MM format."},"time_zone":{"type":"string","description":"Time zone (defaults to UTC)."},"enabled":{"type":"boolean","description":"Whether the campaign is enabled."}},"required":["type","start_time","interval"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assistants.create","description":"Create an Insighto AI assistant (voice/chat agent) with provider, model, and prompt.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Assistant display name."},"provider":{"type":"string","description":"LLM provider (e.g. openai, anthropic)."},"model":{"type":"string","description":"Model identifier from the chosen provider."},"first_message":{"type":"string","description":"Opening line the assistant should speak."},"system_prompt":{"type":"string","description":"System prompt that scopes assistant behavior."},"voice_id":{"type":"string","description":"Voice id (when the assistant is voice-capable)."},"org_id":{"type":"string","description":"Organization id this assistant belongs to."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assistants.delete","description":"Delete an Insighto AI assistant by id.","parameters":{"type":"object","properties":{"assistant_id":{"type":"string","description":"Assistant id to delete."}},"required":["assistant_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.cancel","description":"Cancel a running Insighto AI campaign. Halts pending executions and stops further outreach.","parameters":{"type":"object","properties":{"campaign_id":{"type":"string","description":"Campaign id to cancel."}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"insta-charts","displayName":"InstaCharts","description":"Create and visualize charts using InstaCharts.","auth":{"kind":"oauth2","authorizationUrl":"https://app.instacharts.com/oauth/authorize","tokenUrl":"https://app.instacharts.com/oauth/token","scopes":["chart.create","chart.read"],"clientIdEnv":"INSTACHARTS_OAUTH_CLIENT_ID","clientSecretEnv":"INSTACHARTS_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"chart.generate","description":"Generate a chart image from data.","parameters":{"type":"object","properties":{"chartType":{"type":"string","enum":["line","bar","pie","area","scatter"]},"title":{"type":"string"},"data":{"type":"object"},"options":{"type":"object"}},"required":["chartType","title","data"]},"requiredScopes":["chart.create"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chart.update","description":"Update an existing chart by id (title, data, options, or chart type).","parameters":{"type":"object","properties":{"chartId":{"type":"string","description":"Chart id to update."},"chartType":{"type":"string","enum":["line","bar","pie","area","scatter"]},"title":{"type":"string"},"data":{"type":"object"},"options":{"type":"object"}},"required":["chartId"]},"requiredScopes":["chart.create"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chart.delete","description":"Delete a chart by id.","parameters":{"type":"object","properties":{"chartId":{"type":"string","description":"Chart id to delete."}},"required":["chartId"]},"requiredScopes":["chart.create"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"instagram-business","displayName":"Instagram Business","description":"Publish, read, and moderate content on an Instagram Business or Creator account via the Facebook Graph API: create media containers, publish posts/reels/stories, read insights, fetch comments, and reply or hide threads.","auth":{"kind":"oauth2","authorizationUrl":"https://www.facebook.com/v21.0/dialog/oauth","tokenUrl":"https://graph.facebook.com/v21.0/oauth/access_token","scopes":["instagram_basic","instagram_content_publish","instagram_manage_comments","instagram_manage_insights","instagram_manage_messages","pages_show_list","pages_read_engagement","business_management"],"clientIdEnv":"INSTAGRAM_BUSINESS_OAUTH_CLIENT_ID","clientSecretEnv":"INSTAGRAM_BUSINESS_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.get","description":"Read the connected IG Business account profile (id, username, name, biography, followers_count, follows_count, media_count, profile_picture_url, website).","parameters":{"type":"object","properties":{"igUserId":{"type":"string"},"fields":{"type":"string"}},"required":["igUserId"]},"requiredScopes":["instagram_basic"],"class":"read"},{"name":"media.list","description":"List media (posts / reels / stories) published by the IG Business account, paginated via the Graph API cursor (after/before).","parameters":{"type":"object","properties":{"igUserId":{"type":"string"},"fields":{"type":"string"},"limit":{"type":"integer"},"after":{"type":"string"},"before":{"type":"string"}},"required":["igUserId"]},"requiredScopes":["instagram_basic"],"class":"read"},{"name":"media.get","description":"Read a single media object (post, reel, or story) including caption, media_type, permalink, timestamp, like_count, comments_count, and thumbnail_url.","parameters":{"type":"object","properties":{"mediaId":{"type":"string"},"fields":{"type":"string"}},"required":["mediaId"]},"requiredScopes":["instagram_basic"],"class":"read"},{"name":"media.insights","description":"Read engagement insights (impressions, reach, saved, video_views, plays, total_interactions, etc.) for a published media object.","parameters":{"type":"object","properties":{"mediaId":{"type":"string"},"metric":{"type":"string"},"period":{"type":"string"},"breakdown":{"type":"string"}},"required":["mediaId","metric"]},"requiredScopes":["instagram_manage_insights"],"class":"read"},{"name":"account.insights","description":"Read account-level insights (reach, impressions, profile_views, follower_count, audience_gender_age, online_followers) for the IG Business account.","parameters":{"type":"object","properties":{"igUserId":{"type":"string"},"metric":{"type":"string"},"period":{"type":"string"},"metric_type":{"type":"string"},"since":{"type":"integer"},"until":{"type":"integer"}},"required":["igUserId","metric","period"]},"requiredScopes":["instagram_manage_insights"],"class":"read"},{"name":"comments.list","description":"List top-level comments on a media object. Use replies.list to walk nested threads.","parameters":{"type":"object","properties":{"mediaId":{"type":"string"},"fields":{"type":"string"},"limit":{"type":"integer"},"after":{"type":"string"}},"required":["mediaId"]},"requiredScopes":["instagram_manage_comments"],"class":"read"},{"name":"comment.get","description":"Read a single comment by id including text, timestamp, like_count, hidden, replies, and from.username.","parameters":{"type":"object","properties":{"commentId":{"type":"string"},"fields":{"type":"string"}},"required":["commentId"]},"requiredScopes":["instagram_manage_comments"],"class":"read"},{"name":"replies.list","description":"List replies to a comment thread.","parameters":{"type":"object","properties":{"commentId":{"type":"string"},"fields":{"type":"string"},"limit":{"type":"integer"}},"required":["commentId"]},"requiredScopes":["instagram_manage_comments"],"class":"read"},{"name":"hashtag.search","description":"Resolve a hashtag string into its IG hashtag id. Hashtag-search quotas are enforced per IG user per 7-day window.","parameters":{"type":"object","properties":{"igUserId":{"type":"string"},"q":{"type":"string"}},"required":["igUserId","q"]},"requiredScopes":["instagram_basic"],"class":"read"},{"name":"hashtag.recentMedia","description":"List recently tagged media for a hashtag id.","parameters":{"type":"object","properties":{"hashtagId":{"type":"string"},"igUserId":{"type":"string"},"fields":{"type":"string"},"limit":{"type":"integer"}},"required":["hashtagId","igUserId"]},"requiredScopes":["instagram_basic"],"class":"read"},{"name":"mentions.list","description":"List media in which the IG Business account is @-mentioned.","parameters":{"type":"object","properties":{"igUserId":{"type":"string"},"fields":{"type":"string"},"limit":{"type":"integer"}},"required":["igUserId"]},"requiredScopes":["instagram_basic"],"class":"read"},{"name":"media.createContainer","description":"Step 1 of the Content Publishing API: create a media container holding the image_url / video_url + caption. The container id returned must be passed to media.publish once `status_code=FINISHED`.","parameters":{"type":"object","properties":{"igUserId":{"type":"string"},"container":{"type":"object","properties":{"image_url":{"type":"string"},"video_url":{"type":"string"},"media_type":{"type":"string","enum":["IMAGE","VIDEO","REELS","STORIES","CAROUSEL"]},"caption":{"type":"string"},"location_id":{"type":"string"},"user_tags":{"type":"array"},"product_tags":{"type":"array"},"children":{"type":"array","items":{"type":"string"}},"is_carousel_item":{"type":"boolean"},"thumb_offset":{"type":"integer"},"share_to_feed":{"type":"boolean"},"cover_url":{"type":"string"},"audio_name":{"type":"string"},"collaborators":{"type":"array","items":{"type":"string"}}}}},"required":["igUserId","container"]},"requiredScopes":["instagram_content_publish"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.containerStatus","description":"Poll the container processing status (status_code: IN_PROGRESS | FINISHED | ERROR | EXPIRED | PUBLISHED). Required between createContainer and publish for video / reel uploads.","parameters":{"type":"object","properties":{"containerId":{"type":"string"}},"required":["containerId"]},"requiredScopes":["instagram_content_publish"],"class":"read"},{"name":"media.publish","description":"Step 2 of the Content Publishing API: publish a previously-created container to the IG Business feed. Returns the newly created media id.","parameters":{"type":"object","properties":{"igUserId":{"type":"string"},"creationId":{"type":"string"}},"required":["igUserId","creationId"]},"requiredScopes":["instagram_content_publish"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"publishingLimit.get","description":"Read the IG Business account publishing-rate quota: how many of the 50 / 24h publishes remain. Use before bulk-scheduling.","parameters":{"type":"object","properties":{"igUserId":{"type":"string"}},"required":["igUserId"]},"requiredScopes":["instagram_content_publish"],"class":"read"},{"name":"comments.reply","description":"Post a reply to a comment thread on a media object.","parameters":{"type":"object","properties":{"commentId":{"type":"string"},"message":{"type":"string"}},"required":["commentId","message"]},"requiredScopes":["instagram_manage_comments"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.hide","description":"Hide or unhide a comment from public view (does not delete it).","parameters":{"type":"object","properties":{"commentId":{"type":"string"},"hide":{"type":"boolean"}},"required":["commentId","hide"]},"requiredScopes":["instagram_manage_comments"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"comments.delete","description":"Permanently delete a comment authored by, or moderatable by, the connected account.","parameters":{"type":"object","properties":{"commentId":{"type":"string"}},"required":["commentId"]},"requiredScopes":["instagram_manage_comments"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"instantly-ai","displayName":"Instantly.ai","description":"Manage Instantly.ai cold-email outreach: create campaigns, build lead lists, add leads to campaigns, and search the campaign/lead corpus.","auth":{"kind":"api-key","hint":"Instantly.ai API key from Settings -> Integrations. Sent as Authorization: Bearer <key>."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"campaigns.create","description":"Create a new outreach campaign with schedule and sending rules.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Campaign name."},"campaign_schedule":{"type":"object","description":"Sending schedule (timing windows, timezone, weekday/weekend rules).","properties":{"schedules":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"timing":{"type":"object","properties":{"from":{"type":"string","description":"Start time in 24h format (HH:MM)."},"to":{"type":"string","description":"End time in 24h format (HH:MM)."}},"required":["from","to"]},"days":{"type":"object","description":"Weekday flags keyed 0 (Sun) .. 6 (Sat)."},"timezone":{"type":"string","description":"IANA timezone (e.g. America/New_York)."}},"required":["timing","timezone"]}},"start_date":{"type":"string","description":"ISO start date (YYYY-MM-DD)."},"end_date":{"type":"string","description":"ISO end date (YYYY-MM-DD)."}},"required":["schedules"]},"pl_value":{"type":"number","description":"Value of every positive lead."},"is_evergreen":{"type":"boolean"},"email_gap":{"type":"integer","description":"Gap between emails in minutes."},"random_wait_max":{"type":"integer","description":"Maximum random wait time in minutes."},"text_only":{"type":"boolean"},"daily_limit":{"type":"integer","description":"Daily limit for sending emails."},"stop_on_reply":{"type":"boolean"},"link_tracking":{"type":"boolean"},"open_tracking":{"type":"boolean"},"stop_on_auto_reply":{"type":"boolean"},"daily_max_leads":{"type":"integer"},"prioritize_new_leads":{"type":"boolean"},"match_lead_esp":{"type":"boolean"},"stop_for_company":{"type":"boolean"},"insert_unsubscribe_header":{"type":"boolean"}},"required":["name","campaign_schedule"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lead-lists.create","description":"Create a new lead list to group prospects before assigning them to campaigns.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Lead list name."},"has_enrichment_task":{"type":"boolean","description":"If true, Instantly will run enrichment on imported leads."},"owned_by":{"type":"string","description":"Workspace member id that should own the list."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.add-to-campaign","description":"Add a lead (by email) to a campaign, optionally skipping duplicates already enrolled.","parameters":{"type":"object","properties":{"campaign":{"type":"string","description":"Campaign id to add the lead to."},"email":{"type":"string","description":"Lead email address."},"first_name":{"type":"string"},"last_name":{"type":"string"},"company_name":{"type":"string"},"phone":{"type":"string"},"website":{"type":"string"},"personalization":{"type":"string","description":"Custom personalization snippet."},"custom_variables":{"type":"object","description":"Free-form custom variables merged into the lead record."},"skip_if_in_campaign":{"type":"boolean","description":"Skip the lead if it already exists in the target campaign."},"skip_if_in_workspace":{"type":"boolean","description":"Skip the lead if it already exists anywhere in the workspace."}},"required":["campaign","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.search","description":"List or search campaigns by name, status, and pagination cursor.","parameters":{"type":"object","properties":{"search":{"type":"string","description":"Substring match against campaign name."},"status":{"type":"integer","description":"Campaign status filter (0=draft, 1=active, 2=paused, 3=completed, 4=running-subseq)."},"limit":{"type":"integer","minimum":1,"maximum":100},"starting_after":{"type":"string","description":"Pagination cursor: id of the last campaign on the previous page."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.search","description":"Search leads by campaign, list, email, or free-text query.","parameters":{"type":"object","properties":{"campaign":{"type":"string","description":"Restrict to leads in this campaign id."},"list_id":{"type":"string","description":"Restrict to leads in this lead-list id."},"search":{"type":"string","description":"Free-text search across lead fields."},"email":{"type":"string","description":"Filter by exact email match."},"limit":{"type":"integer","minimum":1,"maximum":100},"starting_after":{"type":"string","description":"Pagination cursor: id of the last lead on the previous page."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.delete","description":"Delete a lead from Instantly.ai by its lead id.","parameters":{"type":"object","properties":{"lead_id":{"type":"string","description":"Lead id to delete."}},"required":["lead_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.pause","description":"Pause a running campaign. Halts further sends until resumed.","parameters":{"type":"object","properties":{"campaign_id":{"type":"string","description":"Campaign id to pause."}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.resume","description":"Resume a previously paused campaign.","parameters":{"type":"object","properties":{"campaign_id":{"type":"string","description":"Campaign id to resume."}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"instasent","displayName":"Instasent","description":"Manage contacts and track events in Instasent for audience segmentation and personalized marketing.","auth":{"kind":"api-key","hint":"Instasent API Bearer Token."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.add_or_update","description":"Add or update a contact with properties and optional instant event processing.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"datasourceId":{"type":"string"},"userId":{"type":"string"},"contactProperties":{"type":"object"},"instant":{"type":"boolean"}},"required":["projectId","datasourceId","userId","contactProperties"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.create","description":"Create an event for a contact with event type and parameters.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"datasourceId":{"type":"string"},"userId":{"type":"string"},"eventId":{"type":"string"},"eventType":{"type":"string"},"eventParameters":{"type":"object"},"eventDate":{"type":"string"}},"required":["projectId","datasourceId","userId","eventId","eventType","eventParameters"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.delete","description":"Delete a contact from a datasource.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"datasourceId":{"type":"string"},"userId":{"type":"string"}},"required":["projectId","datasourceId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sms.send","description":"Send a single SMS message via Instasent. Requires the originator (alphanumeric sender or MSISDN), the recipient MSISDN in E.164 form, and the message body.","parameters":{"type":"object","properties":{"from":{"type":"string","description":"Originator: alphanumeric sender id (max 11 chars) or sender MSISDN in E.164."},"to":{"type":"string","description":"Recipient MSISDN in E.164 (e.g. +34666112233)."},"text":{"type":"string","description":"SMS body text."},"clientMessageId":{"type":"string","description":"Optional client-supplied message id used for idempotency / dedupe."}},"required":["from","to","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaign.create","description":"Create an SMS campaign targeting a contact segment. The campaign is scheduled for delivery at `scheduledAt` (ISO-8601) or sent immediately if omitted.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Campaign display name."},"from":{"type":"string","description":"Originator: alphanumeric sender id or sender MSISDN."},"text":{"type":"string","description":"Campaign SMS body."},"datasourceId":{"type":"string","description":"Datasource id whose contacts will receive the campaign."},"segmentId":{"type":"string","description":"Optional segment id to narrow the recipient set within the datasource."},"scheduledAt":{"type":"string","description":"Optional ISO-8601 timestamp to schedule delivery; omit to send immediately."}},"required":["name","from","text","datasourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaign.cancel","description":"Cancel a scheduled SMS campaign. Once a campaign has started delivering, Instasent rejects the cancel; only future-scheduled campaigns can be cancelled.","parameters":{"type":"object","properties":{"campaignId":{"type":"string","description":"Campaign id to cancel."}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"intercom","displayName":"Intercom","description":"Search Intercom conversations and contacts, reply to support tickets, and update conversation state.","auth":{"kind":"oauth2","authorizationUrl":"https://app.intercom.com/oauth","tokenUrl":"https://api.intercom.io/auth/eagle/token","scopes":[],"clientIdEnv":"INTERCOM_OAUTH_CLIENT_ID","clientSecretEnv":"INTERCOM_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tickets.search","description":"Search Intercom conversations using Intercom search syntax. Pass `body` as `{ query, pagination? }` per Intercom REST docs.","parameters":{"type":"object","properties":{"body":{"type":"object","description":"Intercom search payload: { query: { field, operator, value } | { operator, value: [...] }, pagination?: { per_page, starting_after } }."}},"required":["body"]},"requiredScopes":["intercom.read"],"class":"read"},{"name":"customers.read","description":"Read an Intercom contact (lead or user) by id.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":["intercom.read"],"class":"read"},{"name":"tickets.reply","description":"Reply to an Intercom conversation. Pass the full reply payload as `body` (must include message_type, type, and body text per Intercom REST docs).","parameters":{"type":"object","properties":{"conversationId":{"type":"string"},"body":{"type":"object","description":"Intercom reply payload: { message_type, type, admin_id?, body, attachment_urls? }."}},"required":["conversationId","body"]},"requiredScopes":["intercom.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.update","description":"Update an Intercom conversation (mark read, change state, set custom attributes).","parameters":{"type":"object","properties":{"conversationId":{"type":"string"},"body":{"type":"object","description":"Intercom conversation update payload: { read?, state?, custom_attributes? }."}},"required":["conversationId","body"]},"requiredScopes":["intercom.write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.create","description":"Create an Intercom contact (user or lead). Top-level fields are sent as the POST /contacts body per Intercom REST docs.","parameters":{"type":"object","properties":{"role":{"type":"string","enum":["user","lead"],"description":"Contact role. `user` for identified users, `lead` for anonymous visitors."},"email":{"type":"string","description":"Primary email address for the contact."},"name":{"type":"string"},"phone":{"type":"string"},"external_id":{"type":"string","description":"Customer-side identifier used to dedupe/upsert on Intercom."},"custom_attributes":{"type":"object","description":"Free-form custom attributes — must match attributes defined in your Intercom workspace."}},"required":["role","email"]},"requiredScopes":["intercom.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update an existing Intercom contact by id. Pass updatable fields in `body` (any of email, name, phone, external_id, role, custom_attributes).","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Intercom contact id (the Intercom-side id, not external_id)."},"body":{"type":"object","description":"Intercom contact update payload: { email?, name?, phone?, external_id?, role?, custom_attributes? }."}},"required":["id","body"]},"requiredScopes":["intercom.write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"invoiceninja","displayName":"Invoice Ninja","description":"Manage Invoice Ninja clients, invoices, recurring invoices, tasks, and reports for billing and accounting workflows.","auth":{"kind":"api-key","hint":"Invoice Ninja API token from Settings → Account Management → API Tokens. The connection must also store the instance baseUrl (e.g. https://invoicing.co)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"clients.create","description":"Create a client (organization or natural person) in Invoice Ninja.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Business name or natural-person name."},"vat_number":{"type":"string","description":"Tax/VAT number; leave blank if N/A."},"private_notes":{"type":"string"},"address1":{"type":"string"},"address2":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"postal_code":{"type":"string"},"country_id":{"type":"string"},"contacts":{"type":"array","items":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"send_email":{"type":"boolean"}},"required":["email"]}}},"required":["name","contacts"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"clients.get","description":"Look up a client by email (returns the matching client record).","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Client contact email to search."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"invoices.create","description":"Create an invoice for a client.","parameters":{"type":"object","properties":{"client_id":{"type":"string","description":"Invoice Ninja client id."},"po_number":{"type":"string","description":"Purchase order number (optional)."},"discount":{"type":"number"},"is_amount_discount":{"type":"boolean","description":"true = discount is an amount, false = percentage."},"public_notes":{"type":"string"},"private_notes":{"type":"string"},"due_date":{"type":"string","description":"Due date in YYYY-MM-DD."},"line_items":{"type":"array","items":{"type":"object","properties":{"product_key":{"type":"string"},"notes":{"type":"string"},"cost":{"type":"number"},"quantity":{"type":"number"},"tax_name1":{"type":"string"},"tax_rate1":{"type":"number"}},"required":["notes","cost","quantity"]}},"email_invoice":{"type":"boolean","description":"Send the invoice to the client by email on creation."},"mark_sent":{"type":"boolean","description":"Mark the invoice as sent."}},"required":["client_id","line_items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.list","description":"List or filter invoices by status and/or client.","parameters":{"type":"object","properties":{"client_status":{"type":"string","description":"Comma-separated list of statuses: draft, sent, viewed, approved, partial, paid, overdue."},"client_id":{"type":"string"},"per_page":{"type":"integer","minimum":1,"maximum":9999}},"required":["client_status"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"recurring_invoices.create","description":"Create a recurring invoice for a client.","parameters":{"type":"object","properties":{"client_id":{"type":"string"},"frequency_id":{"type":"integer","description":"Frequency: 1 daily, 2 weekly, 3 two-weeks, 4 four-weeks, 5 monthly, 6 two-months, 7 three-months, 8 four-months, 9 six-months, 10 annually, 11 two-years, 12 three-years."},"remaining_cycles":{"type":"integer","description":"How many cycles remain; -1 = indefinite."},"next_send_date":{"type":"string","description":"Next send date in YYYY-MM-DD."},"discount":{"type":"number"},"is_amount_discount":{"type":"boolean"},"public_notes":{"type":"string"},"private_notes":{"type":"string"},"line_items":{"type":"array","items":{"type":"object","properties":{"product_key":{"type":"string"},"notes":{"type":"string"},"cost":{"type":"number"},"quantity":{"type":"number"}},"required":["notes","cost","quantity"]}}},"required":["client_id","frequency_id","line_items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"recurring_invoices.action","description":"Perform an action on a recurring invoice (start, stop, send_now, restore, archive, delete).","parameters":{"type":"object","properties":{"recurring_id":{"type":"string","description":"Recurring invoice id."},"action":{"type":"string","enum":["start","stop","send_now","restore","archive","delete"]}},"required":["recurring_id","action"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.create","description":"Create a billable task entry against a client (and optionally a project).","parameters":{"type":"object","properties":{"number":{"type":"string","description":"Unique task or ticket number not previously used."},"client_id":{"type":"string"},"project_id":{"type":"string"},"description":{"type":"string"},"rate":{"type":"number","description":"Custom hourly rate (optional)."},"time_log":{"type":"string","description":"JSON-encoded time-log array, e.g. [[start_epoch, end_epoch]]."}},"required":["number","client_id","description"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.exists","description":"Check whether a task with the given number already exists.","parameters":{"type":"object","properties":{"number":{"type":"string"}},"required":["number"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reports.get","description":"Generate a report (clients, invoices, payments, profit_and_loss, tax_summary).","parameters":{"type":"object","properties":{"report_type":{"type":"string","enum":["clients","invoices","payments","profit_and_loss","tax_summary","aged_receivables"]},"start_date":{"type":"string","description":"YYYY-MM-DD."},"end_date":{"type":"string","description":"YYYY-MM-DD."},"client_id":{"type":"string"}},"required":["report_type"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"ironclad","displayName":"Ironclad","description":"Read and mutate Ironclad workflows, records, and approval state across the contract lifecycle.","auth":{"kind":"oauth2","authorizationUrl":"https://ironcladapp.com/oauth/authorize","tokenUrl":"https://ironcladapp.com/oauth/token","scopes":["read","write"],"clientIdEnv":"IRONCLAD_OAUTH_CLIENT_ID","clientSecretEnv":"IRONCLAD_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"workflows.list","description":"List Ironclad workflows, optionally filtered by status, schema, or last-updated window. Page with `cursor`.","parameters":{"type":"object","properties":{"status":{"type":"string","description":"Workflow status filter, e.g. draft, review, signing, signed, cancelled, archived."},"schemaId":{"type":"string","description":"Restrict to a single workflow schema."},"asUserId":{"type":"string","description":"Run the request as this Ironclad user id; visibility scopes to their permissions."},"lastUpdated":{"type":"string","description":"ISO-8601 lower bound on workflow.lastUpdated (filters to workflows changed at or after this time)."},"page":{"type":"integer","minimum":0},"pageSize":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"}}},"requiredScopes":["read"],"class":"read"},{"name":"workflows.get","description":"Read a single Ironclad workflow by id, including attributes, status, and participants.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"},"asUserId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":["read"],"class":"read"},{"name":"workflows.create","description":"Launch a new workflow from a published workflow schema. `attributes` is a map of schema field id → value matching the schema definition.","parameters":{"type":"object","properties":{"template":{"type":"string","description":"Workflow schema id this workflow instantiates."},"creator":{"type":"object","description":"Ironclad user creating the workflow, e.g. { email: \"user@example.com\" }."},"attributes":{"type":"object","description":"Schema field id → value map; field types must match the schema (string, number, date, monetaryAmount, etc.)."},"launch":{"type":"boolean","description":"If true, advance the workflow past the create step immediately."}},"required":["template","creator","attributes"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflows.attributes.update","description":"Patch attribute values on an in-flight workflow. Only fields present in the request are overwritten.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"},"attributes":{"type":"object","description":"Schema field id → new value map. Pass null to clear a field."},"asUserId":{"type":"string"}},"required":["workflowId","attributes"]},"requiredScopes":["write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"workflows.turn","description":"Advance a workflow to the next step (e.g. review → sign → signed). Returns the new step descriptor.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"},"actionId":{"type":"string","description":"Optional turn action id when the step exposes multiple branches (e.g. \"approve\" vs \"reject\")."},"asUserId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":["write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"workflows.cancel","description":"Cancel an in-flight workflow. Once cancelled the workflow cannot be resumed; create a new one instead.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"},"reason":{"type":"string"},"asUserId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflows.comments.list","description":"List comments on a workflow, including system events and human-authored notes.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"},"page":{"type":"integer","minimum":0},"pageSize":{"type":"integer","minimum":1,"maximum":100}},"required":["workflowId"]},"requiredScopes":["read"],"class":"read"},{"name":"workflows.comments.create","description":"Post a comment on a workflow. Comments are write-only — there is no server-side dedupe, so callers must scope their own dedupe window.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"},"comment":{"type":"string"},"asUserId":{"type":"string"}},"required":["workflowId","comment"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflows.documents.list","description":"List documents (drafts, signed copies, attachments) on an Ironclad workflow.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":["read"],"class":"read"},{"name":"workflow-schemas.list","description":"List the published workflow schemas available in the workspace.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":0},"pageSize":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":["read"],"class":"read"},{"name":"workflow-schemas.get","description":"Read a single workflow schema definition (field types, required fields, step graph).","parameters":{"type":"object","properties":{"schemaId":{"type":"string"}},"required":["schemaId"]},"requiredScopes":["read"],"class":"read"},{"name":"records.list","description":"List Repository records (signed contracts and uploaded counter-party paper). Filter by record type or last-updated window.","parameters":{"type":"object","properties":{"recordType":{"type":"string","description":"Repository record type id."},"lastUpdated":{"type":"string"},"page":{"type":"integer","minimum":0},"pageSize":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"}}},"requiredScopes":["read"],"class":"read"},{"name":"records.get","description":"Read a single Repository record by id, including its property values.","parameters":{"type":"object","properties":{"recordId":{"type":"string"}},"required":["recordId"]},"requiredScopes":["read"],"class":"read"},{"name":"records.update","description":"Patch property values on a Repository record. Only fields present in `properties` are overwritten.","parameters":{"type":"object","properties":{"recordId":{"type":"string"},"properties":{"type":"object","description":"Property id → new value map. Property types must match the record type schema."}},"required":["recordId","properties"]},"requiredScopes":["write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"webhooks.list","description":"List active webhook subscriptions for the workspace.","parameters":{"type":"object","properties":{}},"requiredScopes":["read"],"class":"read"},{"name":"webhooks.create","description":"Register a webhook subscription. `events` is an array of Ironclad event names (e.g. workflow.launched, workflow.signed).","parameters":{"type":"object","properties":{"targetURL":{"type":"string"},"events":{"type":"array","items":{"type":"string"}}},"required":["targetURL","events"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Remove a webhook subscription by id.","parameters":{"type":"object","properties":{"webhookId":{"type":"string"}},"required":["webhookId"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"jina-ai","displayName":"Jina AI","description":"AI-powered web content extraction (Reader), web search (SERP), classification, embeddings, reranking, and DeepSearch reasoning against the Jina AI APIs.","auth":{"kind":"api-key","hint":"Jina AI API key from https://jina.ai/?sui=apikey. Used as a Bearer token across r.jina.ai, s.jina.ai, api.jina.ai and deepsearch.jina.ai."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"reader.read","description":"Extract clean content (markdown, HTML, text, screenshot, or JSON) from a webpage via Jina Reader (r.jina.ai).","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Target webpage URL."},"format":{"type":"string","enum":["markdown","html","text","screenshot","pageshot"],"description":"Reader X-Return-Format. Defaults to markdown server-side."},"remove_all_images":{"type":"boolean"},"links_summary":{"type":"string","enum":["none","all","true"]},"images_summary":{"type":"string","enum":["none","all","true"]},"do_not_track":{"type":"boolean"},"iframe_extraction":{"type":"boolean"},"shadow_dom_extraction":{"type":"boolean"},"follow_redirect":{"type":"boolean"},"eu_compliance":{"type":"boolean"},"json_response":{"type":"boolean"},"timeout_seconds":{"type":"integer","minimum":0},"css_selector":{"type":"string"},"wait_for_selector":{"type":"string"},"exclude_selector":{"type":"string"},"bypass_cached_content":{"type":"boolean"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.query","description":"Run a web search via Jina Search (s.jina.ai). Returns ranked SERP results and optionally the full Reader-extracted content of every hit.","parameters":{"type":"object","properties":{"query":{"type":"string"},"read_full_content":{"type":"boolean"},"fetch_favicons":{"type":"boolean"},"preferred_country":{"type":"string","description":"ISO 3166-1 alpha-2 country code."},"preferred_location":{"type":"string"},"preferred_language":{"type":"string"},"pagination":{"type":"integer","minimum":0},"in_site_search":{"type":"string"},"bypass_cached_content":{"type":"boolean"},"boost_hostnames":{"type":"string"},"bad_hostnames":{"type":"string"},"only_hostnames":{"type":"string"},"response_format":{"type":"string","enum":["default","json"]}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"classifier.classify","description":"Classify text or images against a label set (zero-shot) or against a previously trained Jina classifier.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Jina classifier model identifier."},"classifier_id":{"type":"string","description":"ID of a trained classifier. Required when invoking a custom classifier instead of a zero-shot model."},"input":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"image":{"type":"string"}}}}],"description":"Text or image-URL inputs. Strings without a scheme are treated as text; URLs are treated as image references."},"labels":{"type":"array","items":{"type":"string"},"description":"Zero-shot label set. Omit when invoking a trained classifier."}},"required":["input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"classifier.train","description":"Train a Jina classifier on a labelled dataset. Returns a classifier id usable from classifier.classify.","parameters":{"type":"object","properties":{"model":{"type":"string"},"access":{"type":"string","enum":["public","private"],"description":"Visibility of the trained model."},"num_iters":{"type":"integer","minimum":1},"input_type":{"type":"string","enum":["text","image"],"description":"Type of training inputs."},"training_data":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string"},"label":{"type":"string"}},"required":["input","label"]}}},"required":["training_data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"embeddings.create","description":"Generate dense embedding vectors with a Jina embeddings model (jina-embeddings-v3, v4, clip-v2, …).","parameters":{"type":"object","properties":{"model":{"type":"string"},"input":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"image":{"type":"string"}}}}]},"task":{"type":"string","enum":["retrieval.query","retrieval.passage","separation","classification","text-matching"]},"dimensions":{"type":"integer","minimum":1},"normalized":{"type":"boolean"},"embedding_type":{"type":"string","enum":["float","base64","binary","ubinary"]},"late_chunking":{"type":"boolean"},"truncate":{"type":"boolean"}},"required":["model","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"reranker.rerank","description":"Re-score a candidate document list against a query with a Jina reranker model.","parameters":{"type":"object","properties":{"model":{"type":"string"},"query":{"type":"string"},"documents":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}}]},"top_n":{"type":"integer","minimum":1},"return_documents":{"type":"boolean"}},"required":["model","query","documents"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deepsearch.chat","description":"Run a DeepSearch reasoning + web-search query (chat-completions shape). Iteratively searches, reads, and reasons until it produces a cited answer.","parameters":{"type":"object","properties":{"model":{"type":"string"},"messages":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["system","user","assistant"]},"content":{"type":"string"}},"required":["role","content"]}},"reasoning_effort":{"type":"string","enum":["low","medium","high"],"description":"Constrains effort spent reasoning before responding."},"budget_tokens":{"type":"integer","minimum":1},"max_attempts":{"type":"integer","minimum":1},"no_direct_answer":{"type":"boolean"},"max_returned_urls":{"type":"integer","minimum":0},"response_format":{"type":"object"},"boost_hostnames":{"type":"array","items":{"type":"string"}},"bad_hostnames":{"type":"array","items":{"type":"string"}},"only_hostnames":{"type":"array","items":{"type":"string"}},"stream":{"type":"boolean","const":false}},"required":["messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"models.list","description":"List Jina embedding / classifier / reranker models the API key is authorized to use.","parameters":{"type":"object","properties":{"family":{"type":"string","enum":["embeddings","rerank","classify"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"jira-cloud","displayName":"Jira Cloud","description":"Issue tracking and project management on Jira Cloud — create, update, comment on, transition, and search issues via the REST API v3.","auth":{"kind":"oauth2","authorizationUrl":"https://auth.atlassian.com/authorize","tokenUrl":"https://auth.atlassian.com/oauth/token","scopes":["offline_access","read:jira-work","write:jira-work","read:jira-user"],"clientIdEnv":"ATLASSIAN_OAUTH_CLIENT_ID","clientSecretEnv":"ATLASSIAN_OAUTH_CLIENT_SECRET","extraAuthParams":{"audience":"api.atlassian.com","prompt":"consent"}},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"resources.list","description":"List Atlassian sites authorized for this connection. Use a returned id as the cloudId required by every Jira action.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"issues.create","description":"Create an issue. Caller provides the full v3 create-issue envelope (fields, transition, update, properties).","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"fields":{"type":"object","description":"Issue fields — must include project, summary, and issuetype."},"update":{"type":"object"},"transition":{"type":"object"},"properties":{"type":"array"},"historyMetadata":{"type":"object"}},"required":["cloudId","fields"]},"requiredScopes":["write:jira-work"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.search","description":"Search issues with JQL. Returns the v3 search envelope with pagination tokens.","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"jql":{"type":"string","description":"JQL query (see https://support.atlassian.com/jira-software-cloud/docs/use-advanced-search-with-jira-query-language-jql/)."},"startAt":{"type":"integer","minimum":0},"maxResults":{"type":"integer","minimum":1,"maximum":100},"fields":{"type":"string","description":"Comma-delimited field IDs (e.g. \"summary,status,assignee\") or \"*all\"."},"expand":{"type":"string"},"validateQuery":{"type":"string","enum":["strict","warn","none","true","false"]}},"required":["cloudId","jql"]},"requiredScopes":["read:jira-work"],"class":"read"},{"name":"issues.get","description":"Get a single issue by ID or key, optionally expanding rendered fields, names, schemas, transitions, etc.","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"issueIdOrKey":{"type":"string"},"fields":{"type":"string"},"expand":{"type":"string","description":"Comma-delimited expand list — e.g. \"renderedFields,names,schema,transitions\"."},"properties":{"type":"string"}},"required":["cloudId","issueIdOrKey"]},"requiredScopes":["read:jira-work"],"class":"read"},{"name":"issues.update","description":"Edit an issue — partial update of the fields or update envelope.","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"issueIdOrKey":{"type":"string"},"fields":{"type":"object"},"update":{"type":"object"},"properties":{"type":"array"},"historyMetadata":{"type":"object"},"notifyUsers":{"type":"boolean"}},"required":["cloudId","issueIdOrKey"]},"requiredScopes":["write:jira-work"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"issues.assign","description":"Assign an issue to an accountId, \"-1\" (default assignee), or null (unassigned).","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"issueIdOrKey":{"type":"string"},"accountId":{"type":["string","null"]}},"required":["cloudId","issueIdOrKey"]},"requiredScopes":["write:jira-work"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"issues.transition","description":"Move an issue through a workflow transition. Look up valid transition IDs via /rest/api/3/issue/{key}/transitions.","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"issueIdOrKey":{"type":"string"},"transition":{"type":"object","description":"Object with at least { id: string }."},"fields":{"type":"object"},"update":{"type":"object"},"historyMetadata":{"type":"object"}},"required":["cloudId","issueIdOrKey","transition"]},"requiredScopes":["write:jira-work"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.link","description":"Create an issue link between two issues (e.g. \"blocks\", \"is blocked by\").","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"type":{"type":"object","description":"Link type — { name: string } or { id: string }."},"inwardIssue":{"type":"object","description":"{ key: string } | { id: string }."},"outwardIssue":{"type":"object","description":"{ key: string } | { id: string }."},"comment":{"type":"object"}},"required":["cloudId","type","inwardIssue","outwardIssue"]},"requiredScopes":["write:jira-work"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.watchers.add","description":"Add a watcher to an issue. Body is the watcher accountId as a raw JSON string.","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"issueIdOrKey":{"type":"string"},"accountId":{"type":"string"}},"required":["cloudId","issueIdOrKey","accountId"]},"requiredScopes":["write:jira-work"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.list","description":"List comments on an issue (paginated).","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"issueIdOrKey":{"type":"string"},"startAt":{"type":"integer","minimum":0},"maxResults":{"type":"integer","minimum":1,"maximum":100},"orderBy":{"type":"string","enum":["created","-created","+created"]},"expand":{"type":"string"}},"required":["cloudId","issueIdOrKey"]},"requiredScopes":["read:jira-work"],"class":"read"},{"name":"comments.create","description":"Add a comment to an issue. Body field accepts the Atlassian Document Format envelope.","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"issueIdOrKey":{"type":"string"},"body":{"type":["object","string"],"description":"ADF document or plain string (wiki text via \"expand=renderedBody\" in subsequent fetch)."},"visibility":{"type":"object"},"properties":{"type":"array"}},"required":["cloudId","issueIdOrKey","body"]},"requiredScopes":["write:jira-work"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.update","description":"Edit an existing comment by its ID.","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"issueIdOrKey":{"type":"string"},"commentId":{"type":"string"},"body":{"type":["object","string"]},"visibility":{"type":"object"},"properties":{"type":"array"}},"required":["cloudId","issueIdOrKey","commentId","body"]},"requiredScopes":["write:jira-work"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"comments.delete","description":"Remove a comment from an issue.","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"issueIdOrKey":{"type":"string"},"commentId":{"type":"string"}},"required":["cloudId","issueIdOrKey","commentId"]},"requiredScopes":["write:jira-work"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"attachments.get","description":"Fetch attachment metadata by attachment ID.","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"attachmentId":{"type":"string"}},"required":["cloudId","attachmentId"]},"requiredScopes":["read:jira-work"],"class":"read"},{"name":"users.find","description":"Look up users by query string (email, display name fragment, etc.).","parameters":{"type":"object","properties":{"cloudId":{"type":"string","description":"Atlassian site id from resources.list."},"query":{"type":"string"},"accountId":{"type":"string"},"startAt":{"type":"integer","minimum":0},"maxResults":{"type":"integer","minimum":1,"maximum":1000}},"required":["cloudId"]},"requiredScopes":["read:jira-user"],"class":"read"}]},{"kind":"jira-data-center","displayName":"Jira Data Center","description":"Issue tracking and project management for Jira Data Center and Server.","auth":{"kind":"api-key","hint":"Jira Data Center Personal Access Token (PAT). Provide the instance URL (e.g. https://jira.yourcompany.com) as connection metadata under instanceUrl."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"issues.create","description":"Create a Jira issue with the supplied fields.","parameters":{"type":"object","properties":{"fields":{"type":"object"},"update":{"type":"object"}},"required":["fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.search","description":"Search issues with a JQL query.","parameters":{"type":"object","properties":{"jql":{"type":"string"},"startAt":{"type":"integer"},"maxResults":{"type":"integer"},"fields":{"type":"array","items":{"type":"string"}},"expand":{"type":"string"}},"required":["jql"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"issues.get","description":"Get a single Jira issue by key or id.","parameters":{"type":"object","properties":{"issueIdOrKey":{"type":"string"},"fields":{"type":"string"},"expand":{"type":"string"}},"required":["issueIdOrKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"issues.update","description":"Update fields on a Jira issue.","parameters":{"type":"object","properties":{"issueIdOrKey":{"type":"string"},"fields":{"type":"object"},"update":{"type":"object"}},"required":["issueIdOrKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"issues.assign","description":"Assign a Jira issue to a user (by name on Data Center / Server).","parameters":{"type":"object","properties":{"issueIdOrKey":{"type":"string"},"name":{"type":"string"}},"required":["issueIdOrKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"issues.link","description":"Create a link between two Jira issues.","parameters":{"type":"object","properties":{"type":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"inwardIssue":{"type":"object","properties":{"key":{"type":"string"}},"required":["key"]},"outwardIssue":{"type":"object","properties":{"key":{"type":"string"}},"required":["key"]},"comment":{"type":"object"}},"required":["type","inwardIssue","outwardIssue"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.addWatcher","description":"Add a watcher (by username) to a Jira issue.","parameters":{"type":"object","properties":{"issueIdOrKey":{"type":"string"},"username":{"type":"string"}},"required":["issueIdOrKey","username"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.addAttachment","description":"Attach a file to a Jira issue. The attachment payload follows the multipart upload contract documented at /rest/api/2/issue/{issueIdOrKey}/attachments.","parameters":{"type":"object","properties":{"issueIdOrKey":{"type":"string"},"attachment":{}},"required":["issueIdOrKey","attachment"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.getAttachment","description":"Get metadata for a Jira issue attachment by id.","parameters":{"type":"object","properties":{"attachmentId":{"type":"string"}},"required":["attachmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"comments.list","description":"List comments on a Jira issue.","parameters":{"type":"object","properties":{"issueIdOrKey":{"type":"string"},"startAt":{"type":"integer"},"maxResults":{"type":"integer"},"orderBy":{"type":"string"},"expand":{"type":"string"}},"required":["issueIdOrKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"comments.add","description":"Add a comment to a Jira issue.","parameters":{"type":"object","properties":{"issueIdOrKey":{"type":"string"},"body":{"type":"string"}},"required":["issueIdOrKey","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.update","description":"Update a comment on a Jira issue.","parameters":{"type":"object","properties":{"issueIdOrKey":{"type":"string"},"commentId":{"type":"string"},"body":{"type":"string"}},"required":["issueIdOrKey","commentId","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"comments.delete","description":"Delete a comment from a Jira issue.","parameters":{"type":"object","properties":{"issueIdOrKey":{"type":"string"},"commentId":{"type":"string"}},"required":["issueIdOrKey","commentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"users.find","description":"Search Jira users by username, key, or query.","parameters":{"type":"object","properties":{"username":{"type":"string"},"key":{"type":"string"},"startAt":{"type":"integer"},"maxResults":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"jogg-ai","displayName":"Jogg AI","description":"Generate AI avatar photos and videos, manage product knowledge, upload media, and poll video generation status against the Jogg AI v1 API.","auth":{"kind":"api-key","hint":"Jogg AI workspace API key — Settings → API Keys in the Jogg AI dashboard."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"avatar.photo.create","description":"Generate a still AI-avatar photo. Returns the generated photo URL plus an id usable as an avatar source in avatar.video.create.","parameters":{"type":"object","properties":{"age":{"type":"string","description":"Age group for the avatar (e.g. Young Adult, Adult, Senior)."},"gender":{"type":"string","description":"Gender for the avatar."},"ethnicity":{"type":"string","description":"Ethnicity for the avatar."},"model":{"type":"string","description":"Jogg AI image model identifier."},"avatar_style":{"type":"string","description":"Visual style of the avatar."},"aspect_ratio":{"type":"string","description":"Output photo aspect ratio (e.g. 9:16, 16:9, 1:1)."},"appearance":{"type":"string","description":"Free-text appearance prompt."},"background":{"type":"string","description":"Free-text background prompt."},"image_url":{"type":"string","description":"Optional reference-image URL the generator should match."}},"required":["age","gender","model","avatar_style","aspect_ratio"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"avatar.video.create","description":"Queue an avatar video render. Returns a video_id; poll video.get until status is completed.","parameters":{"type":"object","properties":{"avatar_id":{"type":"string","description":"Identifier of the avatar to speak the script."},"avatar_type":{"type":"string","description":"Source type of the avatar (e.g. preset, custom, photo)."},"voice_id":{"type":"string","description":"Identifier of the voice to use."},"aspect_ratio":{"type":"string"},"screen_style":{"type":"string","description":"Background style for the rendered scene."},"script":{"type":"string","description":"Script the avatar will speak. Provide either script or audio_url."},"audio_url":{"type":"string","description":"Pre-recorded audio URL the avatar should lip-sync to. Provide either script or audio_url."},"caption":{"type":"boolean","description":"Render burned-in subtitles."},"video_name":{"type":"string"}},"required":["avatar_id","avatar_type","voice_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"product.create.from_url","description":"Crawl a product URL and create a Jogg AI product entry from the extracted information.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Public product page URL to crawl."},"name":{"type":"string","description":"Optional override for the product name."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"product.create.from_info","description":"Create a Jogg AI product entry from a structured info payload.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string","description":"Product introduction and selling points."},"target_audience":{"type":"string"},"media":{"type":"object","description":"Media resources to associate with the product."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"product.update","description":"Update an existing Jogg AI product entry.","parameters":{"type":"object","properties":{"product_id":{"type":"string","description":"Jogg AI product identifier."},"name":{"type":"string"},"description":{"type":"string"},"target_audience":{"type":"string"},"media":{"type":"object"}},"required":["product_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"video.get","description":"Fetch the status and output of a previously-queued video render. Returns status, URL when ready, and any error detail.","parameters":{"type":"object","properties":{"video_id":{"type":"string","description":"Identifier returned by avatar.video.create or video.create.from_template."}},"required":["video_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"media.upload","description":"Register a media asset (by URL) with Jogg AI so it can be referenced from products, templates, or avatar videos.","parameters":{"type":"object","properties":{"type":{"type":"string","description":"Media type (e.g. image, video, audio)."},"url":{"type":"string","description":"Publicly fetchable source URL for the media asset."}},"required":["type","url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"video.create.from_template","description":"Queue a video render driven by a Jogg AI template. Returns a video_id; poll video.get until ready.","parameters":{"type":"object","properties":{"template_type":{"type":"string","description":"Template source type (e.g. system, custom)."},"template_id":{"type":"string","description":"Identifier of the template to render."},"avatar_id":{"type":"string"},"voice_id":{"type":"string"},"script":{"type":"string"},"audio_url":{"type":"string"},"caption":{"type":"boolean"},"video_name":{"type":"string"}},"required":["template_type","template_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"jotform","displayName":"Jotform","description":"Read Jotform forms and submissions, create new submissions, and manage per-form webhook subscriptions that back the New Submission trigger.","auth":{"kind":"api-key","hint":"Jotform API key from My Account > API. Sent as the APIKEY header."},"category":"webhook","defaultConsistencyModel":"authoritative","capabilities":[{"name":"forms.list","description":"List every form on the account. Supports paging (limit/offset), free-text filter, and status filter (ENABLED / DISABLED / DELETED).","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Max results per page (Jotform caps at 1000)."},"offset":{"type":"integer","description":"Zero-based offset into the result set."},"filter":{"type":"string","description":"Jotform JSON filter expression, URL-encoded."},"orderby":{"type":"string","description":"Field to sort by, e.g. created_at, updated_at, title."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"form.get","description":"Fetch a single form record (title, status, counts, created/updated timestamps).","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"form.questions","description":"List the question definitions for a form — needed to map submission answer keys back to human-readable field labels.","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"form.submissions.list","description":"Page through historical submissions for a form. Use filter (Jotform JSON expression) for date ranges and orderby for chronological pulls.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"limit":{"type":"integer","description":"Max results per page (Jotform caps at 1000)."},"offset":{"type":"integer","description":"Zero-based offset into the result set."},"filter":{"type":"string","description":"Jotform JSON filter expression, URL-encoded."},"orderby":{"type":"string","description":"Sort key — typically created_at for chronological pulls."}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"submission.get","description":"Fetch a single submission by ID with its answer payload.","parameters":{"type":"object","properties":{"submissionId":{"type":"string"}},"required":["submissionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"form.webhooks.list","description":"List webhook URLs registered against a form (the subscriptions backing New Submission triggers).","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"submission.create","description":"Create a submission against a form. `submission` is a Jotform-shaped object keyed by question id (e.g. { \"1\": \"value\", \"2_first\": \"Jane\" }).","parameters":{"type":"object","properties":{"formId":{"type":"string"},"submission":{"type":"object","description":"Answer payload keyed by question id (or composite key for multi-field controls)."}},"required":["formId","submission"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"submission.update","description":"Edit an existing submission. Body keys mirror the create shape (question-id keyed).","parameters":{"type":"object","properties":{"submissionId":{"type":"string"},"submission":{"type":"object"}},"required":["submissionId","submission"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"submission.delete","description":"Permanently delete a submission.","parameters":{"type":"object","properties":{"submissionId":{"type":"string"}},"required":["submissionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"form.webhooks.create","description":"Register a webhook URL that Jotform will POST to for every new submission to the form. Backs the activepieces \"New Submission\" trigger.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"webhookURL":{"type":"string","description":"HTTPS endpoint Jotform will POST submissions to."}},"required":["formId","webhookURL"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"form.webhooks.delete","description":"Remove a previously-registered webhook subscription by its index id on a form.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"webhookId":{"type":"string","description":"Jotform returns webhooks as an indexed list; this is the numeric index id."}},"required":["formId","webhookId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"just-invoice","displayName":"JustInvoice","description":"Create and delete invoices in JustInvoice for billing workflows.","auth":{"kind":"api-key","hint":"JustInvoice API key issued from the account settings. Sent as a bearer token on every request."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"invoices.create","description":"Create a JustInvoice invoice for a customer with one or more line items. The customer is identified by email; optional name and address fields are upserted onto the customer record.","parameters":{"type":"object","properties":{"customerEmail":{"type":"string","description":"Email address of the customer the invoice is billed to."},"customerFirstName":{"type":"string","description":"First name of the customer."},"customerLastName":{"type":"string","description":"Last name of the customer."},"customerCompanyName":{"type":"string","description":"Company name of the customer."},"customerAddress":{"type":"string","description":"Street address of the customer."},"customerCity":{"type":"string","description":"City of the customer."},"customerProvinceState":{"type":"string","description":"Province or state of the customer."},"customerPostalCode":{"type":"string","description":"Postal code of the customer."},"customerCountry":{"type":"string","description":"ISO country code of the customer (e.g. US, CA, GB)."},"invoiceDate":{"type":"string","description":"Date of the invoice in YYYY-MM-DD. Defaults to today on the vendor side."},"invoiceStatus":{"type":"string","enum":["draft","sent","paid","overdue","void"],"description":"Initial status of the invoice."},"currencyCode":{"type":"string","description":"ISO currency code (e.g. USD, EUR, GBP)."},"noteToCustomer":{"type":"string","description":"Additional notes shown to the customer on the invoice."},"lineItems":{"type":"array","minItems":1,"description":"Products or services being billed.","items":{"type":"object","properties":{"description":{"type":"string","description":"Description of the line item."},"quantity":{"type":"number","minimum":0,"description":"Number of units billed."},"unitPrice":{"type":"number","minimum":0,"description":"Price per unit, expressed in the invoice currency."}},"required":["description","quantity","unitPrice"]}}},"required":["customerEmail","lineItems"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.delete","description":"Delete a JustInvoice invoice by its invoice id or invoice number.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string","description":"The ID or invoice number of the invoice to delete."}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.send","description":"Send a JustInvoice invoice to the customer by email. Defaults to the customer email on the invoice; pass email_to to override the destination address.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string","description":"The ID or invoice number of the invoice to send."},"email_to":{"type":"string","description":"Optional override recipient email. When omitted, JustInvoice sends to the customer email on the invoice."}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.markPaid","description":"Mark a JustInvoice invoice as paid. Defaults to the current vendor-side timestamp; pass paid_at (YYYY-MM-DD or RFC3339) to backdate the payment.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string","description":"The ID or invoice number of the invoice to mark paid."},"paid_at":{"type":"string","description":"Optional payment timestamp (YYYY-MM-DD or RFC3339). When omitted, the vendor stamps the current time."}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.update","description":"Update an existing JustInvoice invoice. Any subset of updatable fields may be supplied; omitted fields are left unchanged on the vendor side.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string","description":"The ID or invoice number of the invoice to update."},"invoiceDate":{"type":"string","description":"Updated invoice date in YYYY-MM-DD."},"invoiceStatus":{"type":"string","enum":["draft","sent","paid","overdue","void"],"description":"Updated status of the invoice."},"currencyCode":{"type":"string","description":"Updated ISO currency code (e.g. USD, EUR, GBP)."},"noteToCustomer":{"type":"string","description":"Updated note shown to the customer on the invoice."},"customerEmail":{"type":"string","description":"Updated billing email address for the invoice customer."},"customerFirstName":{"type":"string","description":"Updated customer first name."},"customerLastName":{"type":"string","description":"Updated customer last name."},"customerCompanyName":{"type":"string","description":"Updated customer company name."},"customerAddress":{"type":"string","description":"Updated customer street address."},"customerCity":{"type":"string","description":"Updated customer city."},"customerProvinceState":{"type":"string","description":"Updated customer province or state."},"customerPostalCode":{"type":"string","description":"Updated customer postal code."},"customerCountry":{"type":"string","description":"Updated customer ISO country code (e.g. US, CA, GB)."},"lineItems":{"type":"array","minItems":1,"description":"Replacement line items for the invoice.","items":{"type":"object","properties":{"description":{"type":"string","description":"Description of the line item."},"quantity":{"type":"number","minimum":0,"description":"Number of units billed."},"unitPrice":{"type":"number","minimum":0,"description":"Price per unit, expressed in the invoice currency."}},"required":["description","quantity","unitPrice"]}}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"justcall","displayName":"JustCall","description":"Cloud phone system and SMS platform. Place and list calls, manage contacts, and send SMS/MMS programmatically.","auth":{"kind":"api-key","hint":"Get your API Key and API Secret from JustCall Settings -> Developers. Paste them joined by a colon as \"api_key:api_secret\"; sent as the Authorization header."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.list","description":"List call records linked to the account, with optional filters for number, direction, type, and date range.","parameters":{"type":"object","properties":{"page":{"type":"integer"},"per_page":{"type":"integer"},"contact_number":{"type":"string"},"from_datetime":{"type":"string"},"to_datetime":{"type":"string"},"call_direction":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.get","description":"Get a single Sales Dialer call by its unique call id.","parameters":{"type":"object","properties":{"id":{"type":"integer"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.list","description":"List contacts in the account, optionally filtered by name or number.","parameters":{"type":"object","properties":{"page":{"type":"integer"},"per_page":{"type":"integer"},"contact_number":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"across_team":{"type":"boolean"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create a new contact in Sales Dialer.","parameters":{"type":"object","properties":{"name":{"type":"string"},"phone_number":{"type":"string"},"email":{"type":"string"}},"required":["name","phone_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sms.send","description":"Send an SMS or MMS from a JustCall number to a contact number.","parameters":{"type":"object","properties":{"justcall_number":{"type":"string"},"contact_number":{"type":"string"},"body":{"type":"string"},"media_url":{"type":"string"}},"required":["justcall_number","contact_number","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"kafka","displayName":"Apache Kafka","description":"Discover topics and groups, inspect offsets, produce records, and run bounded approved consumers over TLS.","auth":{"kind":"api-key","hint":"JSON with brokers and optional SASL or mutual-TLS credentials. TLS is mandatory and broker addresses must resolve publicly."},"defaultConsistencyModel":"advisory","category":"webhook","rateLimit":{"requests":120,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"kafka.topics.list","class":"read","description":"List Kafka topics visible to the connection.","parameters":{"type":"object","properties":{},"additionalProperties":false}},{"name":"kafka.topics.describe","class":"read","description":"Read partition and replica metadata for selected topics.","parameters":{"type":"object","properties":{"topics":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"string","minLength":1,"maxLength":249,"pattern":"^[A-Za-z0-9._-]+$"}}},"required":["topics"],"additionalProperties":false}},{"name":"kafka.offsets.list","class":"read","description":"Read low, high, and current offsets for one topic.","parameters":{"type":"object","properties":{"topic":{"type":"string","minLength":1,"maxLength":249,"pattern":"^[A-Za-z0-9._-]+$"}},"required":["topic"],"additionalProperties":false}},{"name":"kafka.groups.list","class":"read","description":"List consumer groups visible to the connection.","parameters":{"type":"object","properties":{},"additionalProperties":false}},{"name":"kafka.group.offsets","class":"read","description":"Read committed offsets for a consumer group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","minLength":1,"maxLength":255},"topics":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"string","minLength":1,"maxLength":249,"pattern":"^[A-Za-z0-9._-]+$"}}},"required":["groupId"],"additionalProperties":false}},{"name":"kafka.messages.produce","class":"mutation","description":"Produce one or more records with all acknowledgements enabled.","parameters":{"type":"object","properties":{"topic":{"type":"string","minLength":1,"maxLength":249,"pattern":"^[A-Za-z0-9._-]+$"},"encoding":{"type":"string","enum":["utf8","base64"],"default":"utf8"},"messages":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","properties":{"value":{"type":"string"},"key":{"type":"string"},"partition":{"type":"integer","minimum":0},"headers":{"type":"object","additionalProperties":{"type":"string"},"maxProperties":64}},"required":["value"],"additionalProperties":false}}},"required":["topic","messages"],"additionalProperties":false},"cas":"none","externalEffect":true},{"name":"kafka.messages.consume","class":"mutation","description":"Join a consumer group and return a bounded batch without automatically committing offsets.","parameters":{"type":"object","properties":{"topic":{"type":"string","minLength":1,"maxLength":249,"pattern":"^[A-Za-z0-9._-]+$"},"groupId":{"type":"string","minLength":1,"maxLength":255},"encoding":{"type":"string","enum":["utf8","base64"],"default":"utf8"},"fromBeginning":{"type":"boolean","default":false},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25},"timeoutMs":{"type":"integer","minimum":250,"maximum":30000,"default":5000}},"required":["topic","groupId"],"additionalProperties":false},"cas":"none","externalEffect":true},{"name":"kafka.offsets.commit","class":"mutation","description":"Commit explicit next offsets for a consumer group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","minLength":1,"maxLength":255},"offsets":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","properties":{"topic":{"type":"string","minLength":1,"maxLength":249,"pattern":"^[A-Za-z0-9._-]+$"},"partition":{"type":"integer","minimum":0},"offset":{"type":"string","pattern":"^[0-9]+$"},"metadata":{"type":"string","maxLength":4096}},"required":["topic","partition","offset"],"additionalProperties":false}}},"required":["groupId","offsets"],"additionalProperties":false},"cas":"none","externalEffect":true},{"name":"kafka.topics.create","class":"mutation","description":"Create one Kafka topic with explicit partition and replication counts.","parameters":{"type":"object","properties":{"topic":{"type":"string","minLength":1,"maxLength":249,"pattern":"^[A-Za-z0-9._-]+$"},"partitions":{"type":"integer","minimum":1,"maximum":100,"default":1},"replicationFactor":{"type":"integer","minimum":1,"maximum":10,"default":1}},"required":["topic"],"additionalProperties":false},"cas":"none","externalEffect":true},{"name":"kafka.topics.delete","class":"mutation","description":"Delete one or more Kafka topics.","parameters":{"type":"object","properties":{"topics":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"string","minLength":1,"maxLength":249,"pattern":"^[A-Za-z0-9._-]+$"}}},"required":["topics"],"additionalProperties":false},"cas":"none","externalEffect":true}]},{"kind":"kallabot-ai","displayName":"Kallabot AI","description":"AI-powered voice agents and conversational interfaces for making calls and managing campaigns.","auth":{"kind":"api-key","hint":"Kallabot AI API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.make","description":"Make an outbound call with an AI agent.","parameters":{"type":"object","properties":{"agent_id":{"type":"string"},"recipient_phone_number":{"type":"string"},"sender_phone_number":{"type":"string"},"template_variables":{"type":"object"},"webhook_url":{"type":"string"}},"required":["agent_id","recipient_phone_number","sender_phone_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.details","description":"Get details for a specific call.","parameters":{"type":"object","properties":{"call_sid":{"type":"string"}},"required":["call_sid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.add_to_list","description":"Add a contact to an existing contact list.","parameters":{"type":"object","properties":{"list_id":{"type":"string"},"contacts":{"type":"array"}},"required":["list_id","contacts"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.list_get","description":"Get all contacts from a contact list.","parameters":{"type":"object","properties":{"list_id":{"type":"string"}},"required":["list_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contact_lists.create","description":"Create a new contact list.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contact_lists.edit","description":"Edit an existing contact list.","parameters":{"type":"object","properties":{"list_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}},"required":["list_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.create","description":"Create a new outbound campaign.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"agent_id":{"type":"string"},"list_id":{"type":"string"},"sender_phone_numbers":{"type":"array"},"scheduled_time":{"type":"string"},"timezone":{"type":"string"},"delay_between_calls":{"type":"integer"},"rotate_numbers_after":{"type":"integer"}},"required":["name","agent_id","list_id","sender_phone_numbers","scheduled_time"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.delete","description":"Delete a campaign.","parameters":{"type":"object","properties":{"campaign_id":{"type":"string"},"delete_contact_list":{"type":"boolean"}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"kapso","displayName":"Kapso","description":"Send and receive WhatsApp messages, media, templates, and reactions through the Kapso WhatsApp API.","auth":{"kind":"api-key","hint":"Kapso API key (X-API-Key header)."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"messages.send_text","description":"Send a WhatsApp text message to a recipient phone number.","parameters":{"type":"object","properties":{"to":{"type":"string"},"body":{"type":"string"},"previewUrl":{"type":"boolean"}},"required":["to","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send_buttons","description":"Send an interactive WhatsApp message with reply buttons.","parameters":{"type":"object","properties":{"to":{"type":"string"},"bodyText":{"type":"string"},"buttons":{"type":"array"},"footerText":{"type":"string"},"headerText":{"type":"string"}},"required":["to","bodyText","buttons"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send_list","description":"Send an interactive WhatsApp list message with selectable rows grouped in sections.","parameters":{"type":"object","properties":{"to":{"type":"string"},"bodyText":{"type":"string"},"buttonText":{"type":"string"},"sections":{"type":"array"},"headerText":{"type":"string"},"footerText":{"type":"string"}},"required":["to","bodyText","buttonText","sections"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send_image","description":"Send an image to a WhatsApp recipient by public URL or previously uploaded media id.","parameters":{"type":"object","properties":{"to":{"type":"string"},"imageUrl":{"type":"string"},"imageId":{"type":"string"},"caption":{"type":"string"}},"required":["to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send_video","description":"Send a video to a WhatsApp recipient by public URL or previously uploaded media id.","parameters":{"type":"object","properties":{"to":{"type":"string"},"videoUrl":{"type":"string"},"videoId":{"type":"string"},"caption":{"type":"string"}},"required":["to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send_audio","description":"Send an audio message to a WhatsApp recipient by public URL or media id.","parameters":{"type":"object","properties":{"to":{"type":"string"},"audioUrl":{"type":"string"},"audioId":{"type":"string"}},"required":["to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send_document","description":"Send a document to a WhatsApp recipient by public URL or media id.","parameters":{"type":"object","properties":{"to":{"type":"string"},"documentUrl":{"type":"string"},"documentId":{"type":"string"},"filename":{"type":"string"},"caption":{"type":"string"}},"required":["to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send_sticker","description":"Send a WebP sticker to a WhatsApp recipient.","parameters":{"type":"object","properties":{"to":{"type":"string"},"stickerUrl":{"type":"string"},"stickerId":{"type":"string"}},"required":["to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send_location","description":"Share a location (latitude/longitude) with a WhatsApp recipient.","parameters":{"type":"object","properties":{"to":{"type":"string"},"latitude":{"type":"number"},"longitude":{"type":"number"},"name":{"type":"string"},"address":{"type":"string"}},"required":["to","latitude","longitude"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.request_location","description":"Send an interactive message that prompts the recipient to share their location.","parameters":{"type":"object","properties":{"to":{"type":"string"},"bodyText":{"type":"string"}},"required":["to","bodyText"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send_contact","description":"Share a contact card with a WhatsApp recipient.","parameters":{"type":"object","properties":{"to":{"type":"string"},"formattedName":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"company":{"type":"string"}},"required":["to","formattedName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send_reaction","description":"React (or remove a reaction) to a WhatsApp message by message id.","parameters":{"type":"object","properties":{"to":{"type":"string"},"messageId":{"type":"string"},"emoji":{"type":"string"}},"required":["to","messageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.mark_as_read","description":"Mark an inbound WhatsApp message as read by message id.","parameters":{"type":"object","properties":{"messageId":{"type":"string"}},"required":["messageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send_template","description":"Send a pre-approved WhatsApp template message with header, body, and button parameters.","parameters":{"type":"object","properties":{"to":{"type":"string"},"templateName":{"type":"string"},"languageCode":{"type":"string"},"headerType":{"type":"string"},"headerTextParameters":{"type":"array"},"headerMediaUrl":{"type":"string"},"headerMediaFilename":{"type":"string"},"headerLocationLatitude":{"type":"number"},"headerLocationLongitude":{"type":"number"},"headerLocationName":{"type":"string"},"headerLocationAddress":{"type":"string"},"bodyParameters":{"type":"array"},"buttonParameters":{"type":"array"}},"required":["to","templateName","languageCode"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"kimai","displayName":"Kimai","description":"Record timesheet entries against the customer-hosted Kimai instance for time-tracking automation.","auth":{"kind":"api-key","hint":"Kimai API password for the configured user. Sent as the X-AUTH-TOKEN header alongside the X-AUTH-USER username supplied via connection metadata."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"timesheets.create","description":"Create a Kimai timesheet entry for the authenticated user. Mirrors the activepieces `kimai.create.timesheet` action.","parameters":{"type":"object","properties":{"begin":{"type":"string","description":"ISO-8601 start datetime for the timesheet entry."},"end":{"type":"string","description":"ISO-8601 end datetime for the timesheet entry. Optional for in-progress entries."},"project":{"type":"integer","description":"Kimai project ID the timesheet belongs to."},"activity":{"type":"integer","description":"Kimai activity ID for the timesheet entry."},"description":{"type":"string","description":"Free-form description of the work logged."},"tags":{"type":"string","description":"Comma-separated list of Kimai tag names."}},"required":["begin","project","activity"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"timesheets.stop","description":"Stop a running Kimai timesheet entry. Mirrors `PATCH /api/timesheets/{id}/stop`; the upstream sets the end time to \"now\" server-side and rejects calls against already-stopped entries.","parameters":{"type":"object","properties":{"id":{"type":"integer","description":"Kimai timesheet ID to stop."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"timesheets.list","description":"List Kimai timesheet entries. Mirrors `GET /api/timesheets` and supports filtering by user, project, activity, plus paging.","parameters":{"type":"object","properties":{"user":{"type":"string","description":"Kimai user ID to filter by, or \"all\" to list across users (requires teamlead privileges)."},"project":{"type":"integer","description":"Kimai project ID to filter by."},"activity":{"type":"integer","description":"Kimai activity ID to filter by."},"page":{"type":"integer","description":"Page number (1-indexed)."},"size":{"type":"integer","description":"Page size (items per page)."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.list","description":"List Kimai projects. Mirrors `GET /api/projects`; supports filtering by visibility and customer.","parameters":{"type":"object","properties":{"visible":{"type":"integer","description":"Filter by visibility: 1=visible, 2=hidden, 3=both."},"customer":{"type":"integer","description":"Kimai customer ID to filter projects by."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"kissflow","displayName":"Kissflow","description":"Download form-field attachments from a Kissflow process activity instance.","auth":{"kind":"api-key","hint":"Kissflow access key id + secret (X-Access-Key-Id / X-Access-Key-Secret). Tenant account name and id are stored as connection metadata."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"download.attachment.from.form.field","description":"Download an attachment stored in a form field of a Kissflow process activity instance.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Kissflow account id."},"processId":{"type":"string","description":"Kissflow process id."},"instanceId":{"type":"string","description":"Process instance id."},"activityInstanceId":{"type":"string","description":"Activity instance id within the process instance."},"fieldId":{"type":"string","description":"Form field id that holds the attachment."},"attachmentId":{"type":"string","description":"Attachment id within the form field."}},"required":["accountId","processId","instanceId","activityInstanceId","fieldId","attachmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"process.instance.create","description":"Create a new Kissflow process instance under the given process. `payload` holds the initial record field values.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Kissflow account id."},"processId":{"type":"string","description":"Kissflow process id."},"payload":{"type":"object","description":"Initial record field values for the new process instance.","additionalProperties":true}},"required":["accountId","processId","payload"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"process.instance.submit","description":"Submit an existing Kissflow process instance, advancing it from draft to the next workflow step.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Kissflow account id."},"processId":{"type":"string","description":"Kissflow process id."},"instanceId":{"type":"string","description":"Process instance id to submit."}},"required":["accountId","processId","instanceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"kizeo-forms","displayName":"Kizeo Forms","description":"Create custom mobile forms, manage list items, push data, and export form submissions on Kizeo Forms.","auth":{"kind":"api-key","hint":"Kizeo Forms user token (Authorization header, no scheme)."},"category":"webhook","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.list.item","description":"Create a new item in a Kizeo Forms list.","parameters":{"type":"object","properties":{"listId":{"type":"string","description":"ID of the list to add the item to."},"itemLabel":{"type":"string","description":"Label for the new list item."}},"required":["listId","itemLabel"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"delete.list.item","description":"Delete an item from a Kizeo Forms list.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"itemId":{"type":"string","description":"The ID of the item to delete."}},"required":["listId","itemId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"download.custom.export.in.its.original.format","description":"Download a custom export of a form submission in its original (vendor-defined) format.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"dataId":{"type":"number"},"exportId":{"type":"string","description":"ID of the custom export template."}},"required":["formId","dataId","exportId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"download.standard.pdf","description":"Download the standard PDF export of a form submission.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"dataId":{"type":"number"},"exportInPdf":{"type":"boolean"}},"required":["formId","dataId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"edit.list.item","description":"Edit an existing item in a Kizeo Forms list.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"itemId":{"type":"string"},"itemLabel":{"type":"string","description":"New label for the list item."}},"required":["listId","itemId","itemLabel"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"get.all.list.items","description":"List all items in a Kizeo Forms list with optional search/pagination.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"search":{"type":"string","description":"Pattern to search."},"offset":{"type":"number"},"limit":{"type":"number","description":"Max number of results to return."},"sort":{"type":"string","description":"Target for sorting."},"direction":{"type":"string","description":"Sorting: asc or desc."}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.data.definition","description":"Fetch the field definition (schema) for a form data submission.","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.list.definition","description":"Fetch the definition (schema) of a Kizeo Forms list.","parameters":{"type":"object","properties":{"listId":{"type":"string"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.list.item","description":"Fetch a single item from a Kizeo Forms list.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"itemId":{"type":"string"}},"required":["listId","itemId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"push.data","description":"Push a data submission into a Kizeo Forms form (creates form data on the user inbox).","parameters":{"type":"object","properties":{"formId":{"type":"string"},"recipientUserId":{"type":"number","description":"ID of the user to deliver the pushed data to."},"fields":{"type":"object","description":"Field values keyed by Kizeo field identifier."}},"required":["formId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"klaviyo","displayName":"Klaviyo","description":"Manage Klaviyo profiles, lists, events, and campaigns through the v2024-10-15 JSON:API.","auth":{"kind":"oauth2","authorizationUrl":"https://www.klaviyo.com/oauth/authorize","tokenUrl":"https://a.klaviyo.com/oauth/token","scopes":["accounts:read","profiles:read","profiles:write","lists:read","lists:write","events:read","events:write","campaigns:read"],"clientIdEnv":"KLAVIYO_OAUTH_CLIENT_ID","clientSecretEnv":"KLAVIYO_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"profiles.search","description":"List or filter Klaviyo profiles. `filter` accepts JSON:API filter syntax like `equals(email,\"a@b.com\")`.","parameters":{"type":"object","properties":{"filter":{"type":"string"},"pageSize":{"type":"integer","minimum":1,"maximum":100},"pageCursor":{"type":"string"},"sort":{"type":"string"}}},"requiredScopes":["profiles:read"],"class":"read"},{"name":"profiles.get","description":"Read a single Klaviyo profile by ID.","parameters":{"type":"object","properties":{"profileId":{"type":"string"}},"required":["profileId"]},"requiredScopes":["profiles:read"],"class":"read"},{"name":"profiles.upsert","description":"Create or update a Klaviyo profile by email/phone/external_id (deterministic merge on identifiers).","parameters":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","enum":["profile"]},"attributes":{"type":"object","properties":{"email":{"type":"string"},"phone_number":{"type":"string"},"external_id":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"organization":{"type":"string"},"title":{"type":"string"},"location":{"type":"object"},"properties":{"type":"object"}}}},"required":["type","attributes"]}},"required":["data"]},"requiredScopes":["profiles:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"profiles.update","description":"Patch attributes on an existing Klaviyo profile.","parameters":{"type":"object","properties":{"profileId":{"type":"string"},"data":{"type":"object","properties":{"type":{"type":"string","enum":["profile"]},"id":{"type":"string"},"attributes":{"type":"object","properties":{"email":{"type":"string"},"phone_number":{"type":"string"},"external_id":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"organization":{"type":"string"},"title":{"type":"string"},"location":{"type":"object"},"properties":{"type":"object"}}}},"required":["type","id","attributes"]}},"required":["profileId","data"]},"requiredScopes":["profiles:write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"lists.search","description":"List Klaviyo lists with optional JSON:API filter.","parameters":{"type":"object","properties":{"filter":{"type":"string"},"pageSize":{"type":"integer","minimum":1,"maximum":100},"pageCursor":{"type":"string"}}},"requiredScopes":["lists:read"],"class":"read"},{"name":"lists.create","description":"Create a Klaviyo list.","parameters":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","enum":["list"]},"attributes":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}},"required":["type","attributes"]}},"required":["data"]},"requiredScopes":["lists:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.add-profiles","description":"Add profiles to a list (subscription-relationship batch).","parameters":{"type":"object","properties":{"listId":{"type":"string"},"data":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["profile"]},"id":{"type":"string"}},"required":["type","id"]}}},"required":["listId","data"]},"requiredScopes":["lists:write","profiles:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.create","description":"Track an event for a profile (server-side metric event ingest).","parameters":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","enum":["event"]},"attributes":{"type":"object","properties":{"properties":{"type":"object"},"time":{"type":"string"},"value":{"type":"number"},"unique_id":{"type":"string"},"metric":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","enum":["metric"]},"attributes":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}},"required":["type","attributes"]}},"required":["data"]},"profile":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","enum":["profile"]},"attributes":{"type":"object","properties":{"email":{"type":"string"},"phone_number":{"type":"string"},"external_id":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"organization":{"type":"string"},"title":{"type":"string"},"location":{"type":"object"},"properties":{"type":"object"}}}},"required":["type","attributes"]}},"required":["data"]}},"required":["properties","metric","profile"]}},"required":["type","attributes"]}},"required":["data"]},"requiredScopes":["events:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.search","description":"List campaigns. `filter` is required by Klaviyo for campaign queries (e.g. `equals(messages.channel,\"email\")`).","parameters":{"type":"object","properties":{"filter":{"type":"string"},"pageCursor":{"type":"string"},"sort":{"type":"string"}},"required":["filter"]},"requiredScopes":["campaigns:read"],"class":"read"}]},{"kind":"klenty","displayName":"Klenty","description":"Sales engagement platform for managing prospects and adding them to outreach cadences.","auth":{"kind":"api-key","hint":"Klenty API key from Settings → API. Sent as the x-api-key header. The Klenty username/email is supplied per-call as the user path segment."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"prospect.get","description":"Look up a prospect in Klenty by email address.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Klenty username/email used in the API URL path (e.g. you@company.com)."},"email":{"type":"string","description":"Prospect email address to look up."}},"required":["username","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"prospect.create","description":"Create a new prospect in Klenty. Requires email and first name; additional fields (last name, company, title, phone, location, custom fields) may be supplied.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Klenty username/email used in the API URL path."},"email":{"type":"string","description":"Prospect email address."},"firstName":{"type":"string","description":"Prospect first name."},"lastName":{"type":"string"},"middleName":{"type":"string"},"fullName":{"type":"string"},"company":{"type":"string"},"companyDomain":{"type":"string"},"title":{"type":"string"},"phone":{"type":"string"},"mobilePhone":{"type":"string"},"location":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"country":{"type":"string"},"linkedinURL":{"type":"string"},"twitterId":{"type":"string"},"website":{"type":"string"},"industry":{"type":"string"},"customFields":{"type":"object","description":"Custom prospect fields keyed by field name."}},"required":["username","email","firstName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"prospect.update","description":"Update an existing prospect in Klenty, identified by their current email address. Supply only the fields to change.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Klenty username/email used in the API URL path."},"currentEmail":{"type":"string","description":"The current email used to identify the prospect in Klenty."},"email":{"type":"string","description":"New email address (omit to keep the existing one)."},"firstName":{"type":"string"},"lastName":{"type":"string"},"middleName":{"type":"string"},"fullName":{"type":"string"},"company":{"type":"string"},"companyDomain":{"type":"string"},"title":{"type":"string"},"phone":{"type":"string"},"mobilePhone":{"type":"string"},"location":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"country":{"type":"string"},"linkedinURL":{"type":"string"},"twitterId":{"type":"string"},"website":{"type":"string"},"industry":{"type":"string"},"customFields":{"type":"object","description":"Custom prospect fields keyed by field name."}},"required":["username","currentEmail"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"prospect.add.to.campaign","description":"Add an existing prospect to a Klenty cadence (campaign), starting the sequence for that prospect.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Klenty username/email used in the API URL path."},"email":{"type":"string","description":"Email of the prospect to add to the cadence."},"cadenceName":{"type":"string","description":"Name of the cadence (campaign) to add the prospect to."}},"required":["username","email","cadenceName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"prospect.remove.from.campaign","description":"Remove a prospect from a Klenty cadence, halting any further sequence steps for that prospect in that cadence.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Klenty username/email used in the API URL path."},"email":{"type":"string","description":"Email of the prospect to remove from the cadence."},"cadenceName":{"type":"string","description":"Name of the cadence to remove the prospect from."}},"required":["username","email","cadenceName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cadence.pause","description":"Pause a Klenty cadence for a specific prospect. The prospect stays enrolled, but no further steps fire until the cadence is resumed for them.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Klenty username/email used in the API URL path."},"email":{"type":"string","description":"Email of the prospect whose cadence should be paused."},"cadenceName":{"type":"string","description":"Name of the cadence to pause for this prospect."}},"required":["username","email","cadenceName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"knack","displayName":"Knack","description":"Create, read, update, and delete records in a Knack no-code database object.","auth":{"kind":"api-key","hint":"Knack REST API Key from Builder > Settings > API & Code. Pair with your Application ID per request."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.create","description":"Create a record in the given Knack object.","parameters":{"type":"object","properties":{"applicationId":{"type":"string","description":"Knack Application ID."},"objectKey":{"type":"string","description":"Object key, e.g. `object_1`."},"fields":{"type":"object","description":"Map of `field_NN` keys to values for the new record."}},"required":["applicationId","objectKey","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.find","description":"Find records in a Knack object by filtering on a single field value.","parameters":{"type":"object","properties":{"applicationId":{"type":"string","description":"Knack Application ID."},"objectKey":{"type":"string","description":"Object key, e.g. `object_1`."},"field":{"type":"string","description":"Field key to filter on, e.g. `field_3`."},"fieldValue":{"type":"string","description":"Value to match against the chosen field."},"rowsPerPage":{"type":"integer","description":"Max records to return per page (Knack caps at 1000)."},"page":{"type":"integer","description":"Page number, 1-indexed."}},"required":["applicationId","objectKey","field","fieldValue"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.update","description":"Update an existing Knack record by ID.","parameters":{"type":"object","properties":{"applicationId":{"type":"string","description":"Knack Application ID."},"objectKey":{"type":"string","description":"Object key, e.g. `object_1`."},"recordId":{"type":"string","description":"Knack record ID returned from a prior create or find."},"fields":{"type":"object","description":"Map of `field_NN` keys to values to update."}},"required":["applicationId","objectKey","recordId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.delete","description":"Delete a Knack record by ID.","parameters":{"type":"object","properties":{"applicationId":{"type":"string","description":"Knack Application ID."},"objectKey":{"type":"string","description":"Object key, e.g. `object_1`."},"recordId":{"type":"string","description":"Knack record ID to delete."}},"required":["applicationId","objectKey","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"knock","displayName":"Knock","description":"Notification infrastructure. Manage users, trigger workflows, and track messages.","auth":{"kind":"api-key","hint":"Knock API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"workflows.trigger","description":"Trigger a workflow for one or more recipients.","parameters":{"type":"object","properties":{"workflowKey":{"type":"string","description":"The workflow key to trigger"},"recipients":{"type":"object","description":"Recipient user IDs"},"actorId":{"type":"string","description":"Optional actor user ID"},"data":{"type":"object","description":"Optional key-value data for the workflow"}},"required":["workflowKey","recipients"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflows.cancel","description":"Cancel a scheduled workflow run. Identifies the run by the cancellation key supplied at trigger time and optionally narrows to specific recipients.","parameters":{"type":"object","properties":{"workflowKey":{"type":"string","description":"The workflow key whose pending run should be cancelled."},"cancellationKey":{"type":"string","description":"The cancellation key originally passed to trigger; Knock uses this to locate the scheduled run."},"recipients":{"type":"array","description":"Optional list of recipient user ids; omit to cancel for all recipients of the run."}},"required":["workflowKey","cancellationKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.identify","description":"Identify or create a user with profile properties.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"Unique user identifier"},"name":{"type":"string","description":"User display name"},"email":{"type":"string","description":"User email address"},"phoneNumber":{"type":"string","description":"Phone number in E.164 format"},"avatar":{"type":"string","description":"URL to user avatar image"},"customProperties":{"type":"object","description":"Additional key-value properties"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"users.get","description":"Get a user by ID.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"User ID"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.delete","description":"Delete a user by ID.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"User ID to delete"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.get","description":"Get a single message by ID.","parameters":{"type":"object","properties":{"messageId":{"type":"string","description":"Message ID"}},"required":["messageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.list","description":"List messages with optional filtering.","parameters":{"type":"object","properties":{"channelId":{"type":"string","description":"Filter by channel ID"},"status":{"type":"string","description":"Filter by delivery status"},"workflowKey":{"type":"string","description":"Filter by workflow key"},"tenant":{"type":"string","description":"Filter by tenant"},"pageSize":{"type":"integer","description":"Number per page (1-50, default 50)"},"after":{"type":"string","description":"Pagination cursor"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"ko-fi","displayName":"Ko-fi","description":"Receive donations, monthly subscriptions, commissions, and shop orders from a Ko-fi creator account via webhook event delivery.","auth":{"kind":"api-key","hint":"Ko-fi verification token. In Ko-fi go to More → API → Webhooks, paste your destination URL, and copy the auto-generated Verification Token. Ko-fi sends this token inside every webhook payload — store it here so the connector can authenticate inbound deliveries."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"new.donation","description":"List Ko-fi donation events (one-time tips). Each row mirrors the webhook envelope: amount, currency, message, supporter name, anonymity flag, and the verification_token-stamped event id.","parameters":{"type":"object","properties":{"since":{"type":"string","description":"ISO-8601 timestamp; only return events at or after this instant."},"limit":{"type":"integer","description":"Max events to return. Ko-fi caps the page size at 100."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"new.subscription","description":"List Ko-fi monthly-subscription events (membership joins and renewals). The `is_first_subscription_payment` flag distinguishes new joiners from recurring charges.","parameters":{"type":"object","properties":{"since":{"type":"string","description":"ISO-8601 timestamp; only return events at or after this instant."},"tier_name":{"type":"string","description":"Filter to a single membership tier by its Ko-fi display name."},"limit":{"type":"integer","description":"Max events to return. Ko-fi caps the page size at 100."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"new.commission","description":"List Ko-fi commission events. Each row carries the commission brief (supporter message, requested deliverable) plus the payment record so a fulfillment workflow can pick the order up.","parameters":{"type":"object","properties":{"since":{"type":"string","description":"ISO-8601 timestamp; only return events at or after this instant."},"limit":{"type":"integer","description":"Max events to return. Ko-fi caps the page size at 100."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"new.shop.order","description":"List Ko-fi shop-order events. The `shop_items` array on each event lists product variant ids and quantities; `shipping` carries the supporter-entered address when the order is a physical good.","parameters":{"type":"object","properties":{"since":{"type":"string","description":"ISO-8601 timestamp; only return events at or after this instant."},"fulfilled":{"type":"boolean","description":"When true, only orders the creator has marked fulfilled. When false, only unfulfilled. Omit for both."},"limit":{"type":"integer","description":"Max events to return. Ko-fi caps the page size at 100."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"webhook.ack","description":"Acknowledge a Ko-fi webhook delivery by message_id so Ko-fi stops retrying it. Ko-fi retries unacknowledged deliveries with exponential backoff for up to 24h; the ack is the only suppression path.","parameters":{"type":"object","properties":{"message_id":{"type":"string","description":"The Ko-fi-issued message_id from the inbound webhook envelope."}},"required":["message_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false}]},{"kind":"kommo","displayName":"Kommo","description":"Read and mutate Kommo CRM leads, contacts, companies, tasks, and notes for the messenger-first sales pipeline.","auth":{"kind":"api-key","hint":"Kommo long-lived access token. The connection must also store the per-account apiBaseUrl (e.g. https://yourcompany.kommo.com/api/v4)."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.get","description":"Fetch the current Kommo account profile (subdomain, currency, timezone).","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.search","description":"Search leads by free-text query, pipeline, or status.","parameters":{"type":"object","properties":{"query":{"type":"string"},"page":{"type":"integer"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.get","description":"Fetch a single Kommo lead by id, with linked contacts and pipeline status.","parameters":{"type":"object","properties":{"leadId":{"type":"integer"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.create","description":"Create one or more leads. Body is the array envelope Kommo expects.","parameters":{"type":"object","properties":{"leads":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"price":{"type":"number"},"status_id":{"type":"integer"},"pipeline_id":{"type":"integer"},"responsible_user_id":{"type":"integer"},"custom_fields_values":{"type":"array"},"_embedded":{"type":"object"}}}}},"required":["leads"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update","description":"Update a Kommo lead by id (rename, change pipeline/status, change price, attach tags).","parameters":{"type":"object","properties":{"leadId":{"type":"integer"},"name":{"type":"string"},"price":{"type":"number"},"status_id":{"type":"integer"},"pipeline_id":{"type":"integer"},"responsible_user_id":{"type":"integer"},"custom_fields_values":{"type":"array"},"_embedded":{"type":"object"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.search","description":"Search contacts by free-text query (name, email, phone).","parameters":{"type":"object","properties":{"query":{"type":"string"},"page":{"type":"integer"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.get","description":"Fetch a single Kommo contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"integer"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create one or more contacts. Mirrors the activepieces piece auth-fields (name, first_name, last_name, email, phone, tags).","parameters":{"type":"object","properties":{"contacts":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"responsible_user_id":{"type":"integer"},"custom_fields_values":{"type":"array"},"_embedded":{"type":"object"}},"required":["name"]}}},"required":["contacts"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update a Kommo contact by id (name, first_name, last_name, custom field values).","parameters":{"type":"object","properties":{"contactId":{"type":"integer"},"name":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"responsible_user_id":{"type":"integer"},"custom_fields_values":{"type":"array"},"_embedded":{"type":"object"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"companies.search","description":"Search companies by free-text query — mirrors the catalog `query` auth-field (searches through filled company fields).","parameters":{"type":"object","properties":{"query":{"type":"string"},"page":{"type":"integer"},"limit":{"type":"integer"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.get","description":"Fetch a single Kommo company by id.","parameters":{"type":"object","properties":{"companyId":{"type":"integer"}},"required":["companyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.create","description":"Create one or more companies.","parameters":{"type":"object","properties":{"companies":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"responsible_user_id":{"type":"integer"},"custom_fields_values":{"type":"array"},"_embedded":{"type":"object"}},"required":["name"]}}},"required":["companies"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"companies.update","description":"Update a Kommo company by id.","parameters":{"type":"object","properties":{"companyId":{"type":"integer"},"name":{"type":"string"},"responsible_user_id":{"type":"integer"},"custom_fields_values":{"type":"array"},"_embedded":{"type":"object"}},"required":["companyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tags.add","description":"Attach tags to a lead/contact/company via the entity update endpoint — mirrors the `tags_to_add` auth-field.","parameters":{"type":"object","properties":{"entityType":{"type":"string","enum":["leads","contacts","companies"]},"entityId":{"type":"integer"},"_embedded":{"type":"object"}},"required":["entityType","entityId","_embedded"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tags.remove","description":"Remove tags from a lead/contact/company by re-sending the desired tag set — mirrors the `tags_to_delete` auth-field.","parameters":{"type":"object","properties":{"entityType":{"type":"string","enum":["leads","contacts","companies"]},"entityId":{"type":"integer"},"_embedded":{"type":"object"}},"required":["entityType","entityId","_embedded"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.search","description":"List tasks scoped to a responsible user or pipeline.","parameters":{"type":"object","properties":{"responsible_user_id":{"type":"integer"},"page":{"type":"integer"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.create","description":"Create one or more tasks against a lead/contact/company.","parameters":{"type":"object","properties":{"tasks":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"complete_till":{"type":"integer"},"task_type_id":{"type":"integer"},"entity_type":{"type":"string"},"entity_id":{"type":"integer"},"responsible_user_id":{"type":"integer"}},"required":["text","complete_till"]}}},"required":["tasks"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.create","description":"Add notes to a lead/contact/company.","parameters":{"type":"object","properties":{"entityType":{"type":"string","enum":["leads","contacts","companies"]},"notes":{"type":"array"}},"required":["entityType","notes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"kudosity","displayName":"Kudosity","description":"Send and manage SMS messages and contact lists via the Kudosity (Transmit SMS) API.","auth":{"kind":"api-key","hint":"Kudosity API key. Sent via HTTP Basic auth or as bearer per account settings."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contact.add.update","description":"Add a new contact to a list or update an existing one (matched by msisdn).","parameters":{"type":"object","properties":{"listId":{"type":"string","description":"Numeric ID of the recipient list."},"msisdn":{"type":"string","description":"Phone number in E.164 (e.g., +1234567890)."},"email":{"type":"string"}},"required":["listId","msisdn","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contact.create","description":"Create a contact on a Kudosity recipient list. Kudosity upserts by msisdn, so re-issuing with the same number updates the record in place.","parameters":{"type":"object","properties":{"listId":{"type":"string","description":"Numeric ID of the recipient list."},"msisdn":{"type":"string","description":"Phone number in E.164 format."},"email":{"type":"string"}},"required":["listId","msisdn","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contact.update","description":"Update an existing contact on a Kudosity recipient list, matched by msisdn. Backed by the same add-to-list upsert endpoint.","parameters":{"type":"object","properties":{"listId":{"type":"string","description":"Numeric ID of the recipient list the contact belongs to."},"msisdn":{"type":"string","description":"Phone number in E.164 identifying the existing contact."}},"required":["listId","msisdn"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contact.delete","description":"Delete a contact from a recipient list by msisdn.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"msisdn":{"type":"string"}},"required":["listId","msisdn"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sms.send","description":"Send an SMS message to a recipient.","parameters":{"type":"object","properties":{"message":{"type":"string","description":"Body of the SMS message."},"sender":{"type":"string","description":"Sender ID or virtual number assigned to the account."},"recipient":{"type":"string","description":"Destination number in E.164 or local format."},"messageRef":{"type":"string","description":"Optional reference string for correlation."},"trackLinks":{"type":"boolean","description":"Enable link tracking for this message."}},"required":["message","sender","recipient"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sms.cancel","description":"Cancel a scheduled SMS message by its numeric ID.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Numeric ID assigned to the message sent."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sms.info.get","description":"Fetch delivery and metadata for an SMS by message ID.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Numeric ID assigned to the message sent."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"number.format","description":"Normalize a phone number to E.164 given a country code.","parameters":{"type":"object","properties":{"country":{"type":"string","description":"Country code or name (e.g., US, AU, NZ)."},"number":{"type":"string","description":"Phone number in local format."}},"required":["country","number"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"kustomer","displayName":"Kustomer","description":"Create and manage Kustomer customers, conversations, and custom objects.","auth":{"kind":"api-key","hint":"Kustomer API key from your Kustomer account settings."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"customers.create","description":"Create a new Kustomer customer.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Primary email address of the customer."},"phone":{"type":"string","description":"Primary phone number in E.164 format."},"firstName":{"type":"string","description":"First name of the customer."},"lastName":{"type":"string","description":"Last name of the customer."},"company":{"type":"string","description":"Name of the company the customer belongs to."},"username":{"type":"string","description":"Username or handle for the customer."},"locale":{"type":"string","description":"Language/locale code (e.g. en, es)."},"timeZone":{"type":"string","description":"IANA timezone identifier."},"gender":{"type":"string","description":"Gender (male, female, other)."},"birthdayAt":{"type":"string","description":"Customer birthday in ISO 8601 format."},"signedUpAt":{"type":"string","description":"When customer registered in ISO 8601 format."},"avatarUrl":{"type":"string","description":"URL of the customer profile picture."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.get","description":"Retrieve a Kustomer customer by ID.","parameters":{"type":"object","properties":{"customerId":{"type":"string","description":"The Kustomer customer ID."}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.update","description":"Update fields on an existing Kustomer customer.","parameters":{"type":"object","properties":{"customerId":{"type":"string","description":"The Kustomer customer ID."},"email":{"type":"string"},"phone":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string"},"locale":{"type":"string"},"timeZone":{"type":"string"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.delete","description":"Delete a Kustomer customer by ID. Destructive — agent must surface confirmation.","parameters":{"type":"object","properties":{"customerId":{"type":"string","description":"The Kustomer customer ID to delete."}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.search","description":"Search for Kustomer customers.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Filter by email address."},"phone":{"type":"string","description":"Filter by phone number."},"limit":{"type":"integer","description":"Maximum number of results (default 10, max 100)."},"offset":{"type":"integer","description":"Pagination offset (default 0)."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversations.create","description":"Create a new Kustomer conversation.","parameters":{"type":"object","properties":{"customerId":{"type":"string","description":"The Kustomer ID of the customer this conversation belongs to."},"name":{"type":"string","description":"A short subject or title for the conversation (max 256 characters)."},"status":{"type":"string","description":"The initial status of the conversation (e.g. open, pending, closed)."},"priority":{"type":"integer","description":"Conversation priority from 1 (lowest) to 5 (highest)."},"direction":{"type":"string","description":"Direction (inbound, outbound)."},"externalId":{"type":"string","description":"A unique identifier from your own system (max 256 characters)."},"replyChannel":{"type":"string","description":"The channel used to reply (e.g. email, sms, web)."}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.get","description":"Retrieve a Kustomer conversation by ID.","parameters":{"type":"object","properties":{"conversationId":{"type":"string","description":"The Kustomer ID of the conversation."}},"required":["conversationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversations.update","description":"Update a Kustomer conversation.","parameters":{"type":"object","properties":{"conversationId":{"type":"string","description":"The Kustomer ID of the conversation to update."},"name":{"type":"string","description":"Conversation subject or title."},"status":{"type":"string","description":"Conversation status."},"priority":{"type":"integer","description":"Conversation priority from 1 to 5."}},"required":["conversationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"conversations.close","description":"Close a Kustomer conversation by setting its status to \"done\".","parameters":{"type":"object","properties":{"conversationId":{"type":"string","description":"The Kustomer ID of the conversation to close."}},"required":["conversationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customObjects.get","description":"Retrieve custom objects of a specific class.","parameters":{"type":"object","properties":{"klassName":{"type":"string","description":"The API name of the custom object class (e.g. MyCustomClass)."},"fromDate":{"type":"string","description":"Filter by creation/update date (ISO 8601 format, e.g. 2024-01-01)."},"limit":{"type":"integer","description":"Maximum number of results (default 10, max 100)."},"offset":{"type":"integer","description":"Pagination offset (default 0)."}},"required":["klassName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customObjects.create","description":"Create a new custom object.","parameters":{"type":"object","properties":{"klassName":{"type":"string","description":"The API name of the custom object class."},"customerId":{"type":"string","description":"Associated customer ID if applicable."},"data":{"type":"object","description":"Custom object attributes and values."}},"required":["klassName","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"lagrowthmachine","displayName":"LaGrowthMachine","description":"Multichannel sales automation (LinkedIn, email, Twitter). Create or update leads in audiences, list campaigns and audiences, and read campaign stats.","auth":{"kind":"api-key","hint":"Get your API key at app.lagrowthmachine.com/settings/api. Sent as the 'apikey' query parameter on every request."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"campaigns.list","description":"List campaigns with pagination.","parameters":{"type":"object","properties":{"skip":{"type":"integer","description":"Pagination offset."},"limit":{"type":"integer","description":"Maximum results to return."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"audiences.list","description":"List the audiences in the workspace.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaign.get_stats","description":"Get engagement statistics for a campaign.","parameters":{"type":"object","properties":{"campaignId":{"type":"string","description":"Campaign ID."}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lead.create_or_update","description":"Create or update a lead in an audience, which starts it through the audience's workflow.","parameters":{"type":"object","properties":{"audience":{"type":"string","description":"Audience name or identifier."},"proEmail":{"type":"string","description":"Professional email."},"persoEmail":{"type":"string","description":"Personal email."},"linkedinUrl":{"type":"string","description":"LinkedIn profile URL."},"firstname":{"type":"string","description":"First name."},"lastname":{"type":"string","description":"Last name."},"companyName":{"type":"string","description":"Company name."},"jobTitle":{"type":"string","description":"Job title."}},"required":["audience"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"lead-connector","displayName":"LeadConnector","description":"Manage HighLevel (LeadConnector) contacts, opportunities, tasks, notes, campaigns, and workflows.","auth":{"kind":"oauth2","authorizationUrl":"https://marketplace.gohighlevel.com/oauth/chooselocation","tokenUrl":"https://services.leadconnectorhq.com/oauth/token","scopes":["contacts.readonly","contacts.write","opportunities.readonly","opportunities.write","campaigns.readonly","workflows.readonly","locations.readonly"],"clientIdEnv":"LEAD_CONNECTOR_OAUTH_CLIENT_ID","clientSecretEnv":"LEAD_CONNECTOR_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.create","description":"Create a contact in a HighLevel sub-account (location).","parameters":{"type":"object","properties":{"locationId":{"type":"string","description":"HighLevel sub-account id the contact belongs to."},"firstName":{"type":"string"},"lastName":{"type":"string"},"name":{"type":"string","description":"Full display name; used when first/last are not supplied."},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"address1":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"country":{"type":"string"},"postalCode":{"type":"string"},"website":{"type":"string"},"timezone":{"type":"string"},"companyName":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"customFields":{"type":"array","items":{"type":"object"},"description":"Array of { id|key, field_value } entries."},"source":{"type":"string"}},"required":["locationId"]},"requiredScopes":["contacts.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Patch attributes of an existing HighLevel contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"address1":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"country":{"type":"string"},"postalCode":{"type":"string"},"website":{"type":"string"},"timezone":{"type":"string"},"companyName":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"customFields":{"type":"array","items":{"type":"object"}},"source":{"type":"string"}},"required":["contactId"]},"requiredScopes":["contacts.write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.search","description":"Search contacts in a sub-account by email, phone, or free-text query.","parameters":{"type":"object","properties":{"locationId":{"type":"string"},"query":{"type":"string","description":"Free-text search across name/email/phone."},"email":{"type":"string"},"phone":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"startAfter":{"type":"number","description":"Page cursor (ms since epoch of the prior page boundary)."},"startAfterId":{"type":"string","description":"Page cursor id from the prior response."}},"required":["locationId"]},"requiredScopes":["contacts.readonly"],"class":"read"},{"name":"contacts.notes.add","description":"Attach a note to a HighLevel contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"userId":{"type":"string","description":"Authoring user id; defaults to the token owner when omitted."},"body":{"type":"string","description":"Note body (plain text or HTML)."}},"required":["contactId","body"]},"requiredScopes":["contacts.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.campaigns.add","description":"Add a contact to a marketing campaign.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"campaignId":{"type":"string"}},"required":["contactId","campaignId"]},"requiredScopes":["contacts.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.workflows.add","description":"Enroll a contact in an automation workflow.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"workflowId":{"type":"string"},"eventStartTime":{"type":"string","description":"ISO-8601 timestamp to start workflow execution."}},"required":["contactId","workflowId"]},"requiredScopes":["contacts.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.create","description":"Create an opportunity within a pipeline stage.","parameters":{"type":"object","properties":{"locationId":{"type":"string"},"pipelineId":{"type":"string"},"pipelineStageId":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["open","won","lost","abandoned"]},"contactId":{"type":"string"},"monetaryValue":{"type":"number"},"assignedTo":{"type":"string","description":"Assignee user id."},"source":{"type":"string"},"customFields":{"type":"array","items":{"type":"object"}}},"required":["locationId","pipelineId","pipelineStageId","name"]},"requiredScopes":["opportunities.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.update","description":"Update an opportunity status, value, stage, or assignment.","parameters":{"type":"object","properties":{"opportunityId":{"type":"string"},"pipelineId":{"type":"string"},"pipelineStageId":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["open","won","lost","abandoned"]},"monetaryValue":{"type":"number"},"assignedTo":{"type":"string"},"customFields":{"type":"array","items":{"type":"object"}}},"required":["opportunityId"]},"requiredScopes":["opportunities.write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.create","description":"Create a task on a HighLevel contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"title":{"type":"string"},"body":{"type":"string","description":"Task description."},"dueDate":{"type":"string","description":"ISO-8601 due date."},"completed":{"type":"boolean"},"assignedTo":{"type":"string","description":"Assignee user id."}},"required":["contactId","title","dueDate"]},"requiredScopes":["contacts.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update a task on a HighLevel contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"taskId":{"type":"string"},"title":{"type":"string"},"body":{"type":"string"},"dueDate":{"type":"string"},"completed":{"type":"boolean"},"assignedTo":{"type":"string"}},"required":["contactId","taskId"]},"requiredScopes":["contacts.write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"leadfeeder","displayName":"Leadfeeder","description":"Identify the company behind a website-visitor IP address, returning firmographic details and a confidence score.","auth":{"kind":"api-key","hint":"API key from Leadfeeder (Dealfront) Settings -> API keys. Sent in the X-API-KEY request header."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"ip.enrich","description":"Resolve an IPv4 or IPv6 address to the company that owns it, including name, domain, industry, size, revenue, location, and confidence.","parameters":{"type":"object","properties":{"ip":{"type":"string","description":"Valid IPv4 or shortened IPv6 address to enrich, e.g. 185.70.216.139."}},"required":["ip"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"leadmagic","displayName":"LeadMagic","description":"B2B data enrichment API for finding and validating work emails, mobile numbers, and enriching people and company profiles.","auth":{"kind":"api-key","hint":"API key from LeadMagic Settings -> API. Sent as the X-API-Key header."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"credits.get","description":"Return the current API key credit balance. Free, no credits consumed.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"email.find","description":"Find a verified work email from a person's name and company (charged only when an email is found).","parameters":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"domain":{"type":"string"},"company_name":{"type":"string"}},"required":["first_name","last_name","domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"email.validate","description":"Validate an email address and return valid/invalid/unknown (charged only for definitive results).","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"profile.search","description":"Enrich a B2B profile from a profile URL or username.","parameters":{"type":"object","properties":{"profile_url":{"type":"string"}},"required":["profile_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"mobile.find","description":"Find a mobile phone number from a profile URL or email (charged only on a successful match).","parameters":{"type":"object","properties":{"profile_url":{"type":"string"},"work_email":{"type":"string"},"personal_email":{"type":"string"}},"required":["profile_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"company.search","description":"Enrich a company's firmographics from its domain, name, or profile URL (charged per company found).","parameters":{"type":"object","properties":{"company_domain":{"type":"string"},"company_name":{"type":"string"},"profile_url":{"type":"string"}},"required":["company_domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false}]},{"kind":"leap-ai","displayName":"Leap AI","description":"Trigger Leap AI hosted workflows and fetch their completion state. Workflows execute asynchronously and may invoke any chain of model + tool steps the tenant has configured.","auth":{"kind":"api-key","hint":"Leap AI API key (Workflows → Settings → API). Sent as a bearer token on every request."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"workflows.run","description":"Kick off a run of a Leap AI workflow. The call returns immediately with a workflow run ID; the run itself proceeds asynchronously and must be polled via workflows.getRun until it reports a terminal state. An optional webhook URL can be supplied to receive a push notification on completion.","parameters":{"type":"object","properties":{"workflow_id":{"type":"string","description":"ID of the Leap workflow to invoke. Copied from the workflow detail page in the Leap dashboard."},"webhook_url":{"type":"string","description":"Optional HTTPS URL Leap will POST to with the run’s final output when the workflow reaches a terminal state."},"input":{"type":"object","description":"Input variables bound into the workflow’s global scope. Shape is workflow-specific and defined by the workflow’s declared inputs.","additionalProperties":true}},"required":["workflow_id","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"workflows.getRun","description":"Fetch the current state of a previously-kicked-off Leap workflow run. Returns the run status, any intermediate step output, and — once the run reaches a terminal state — the workflow’s final output payload.","parameters":{"type":"object","properties":{"workflow_run_id":{"type":"string","description":"Workflow run ID returned by a prior workflows.run call (or surfaced in the Leap dashboard)."}},"required":["workflow_run_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"leexi","displayName":"Leexi","description":"Fetch call recordings, transcripts, and summaries from the Leexi AI Notetaker.","auth":{"kind":"api-key","hint":"Leexi API Key ID and Key Secret, issued at app.leexi.ai/settings/api_keys and sent as HTTP Basic credentials."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.get","description":"Get a single Leexi call by its identifier, including transcript and summary metadata.","parameters":{"type":"object","properties":{"callId":{"type":"string","description":"Leexi call identifier as returned by the new.call.created webhook."}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"lemlist","displayName":"Lemlist","description":"Manage Lemlist outbound campaigns: add/update/remove leads, mark leads interested or not interested, pause or resume leads, unsubscribe leads, and search leads.","auth":{"kind":"api-key","hint":"Lemlist API key from Settings → Integrations → API. Sent as ?access_token=<api_key> on every request."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"leads.search","description":"Search for a lead by email across the workspace.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Lead email to look up."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.add.to.campaign","description":"Add a lead to a specific campaign.","parameters":{"type":"object","properties":{"campaignId":{"type":"string","description":"Lemlist campaign id."},"email":{"type":"string","description":"Lead email (required)."},"firstName":{"type":"string"},"lastName":{"type":"string"},"picture":{"type":"string"},"phone":{"type":"string"},"linkedinUrl":{"type":"string"},"companyName":{"type":"string"},"companyDomain":{"type":"string"},"icebreaker":{"type":"string"},"jobTitle":{"type":"string"},"deduplicate":{"type":"boolean"},"linkedinEnrichment":{"type":"boolean"},"findEmail":{"type":"boolean"},"verifyEmail":{"type":"boolean"},"findPhone":{"type":"boolean"}},"required":["campaignId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update.in.campaign","description":"Update fields on an existing lead in a campaign.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"},"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"picture":{"type":"string"},"phone":{"type":"string"},"linkedinUrl":{"type":"string"},"companyName":{"type":"string"},"companyDomain":{"type":"string"},"icebreaker":{"type":"string"},"jobTitle":{"type":"string"}},"required":["campaignId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"leads.remove.from.campaign","description":"Remove a lead from a campaign (destructive).","parameters":{"type":"object","properties":{"campaignId":{"type":"string"},"email":{"type":"string"}},"required":["campaignId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.mark.interested.in.campaign","description":"Mark a lead in one campaign as interested.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"},"email":{"type":"string"}},"required":["campaignId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.mark.not.interested.in.campaign","description":"Mark a lead in one campaign as not interested.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"},"email":{"type":"string"}},"required":["campaignId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.mark.interested.all.campaigns","description":"Mark a lead in every campaign they appear in as interested.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.mark.not.interested.all.campaigns","description":"Mark a lead in every campaign they appear in as not interested.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.pause.in.campaigns","description":"Pause a lead in all campaigns, or in a specific campaign when campaignId is provided.","parameters":{"type":"object","properties":{"email":{"type":"string"},"campaignId":{"type":"string","description":"Optional. Limit pause to one campaign."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.resume.in.campaigns","description":"Resume a paused lead in all campaigns, or in a specific campaign when campaignId is provided.","parameters":{"type":"object","properties":{"email":{"type":"string"},"campaignId":{"type":"string","description":"Optional. Limit resume to one campaign."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.unsubscribe","description":"Unsubscribe a lead from the workspace.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"unsubscribes.remove","description":"Remove a lead from the workspace unsubscribe list (destructive).","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"lemon-squeezy","displayName":"Lemon Squeezy","description":"Lemon Squeezy payment gateway: list products, orders, subscriptions, and customers, and create hosted checkout sessions.","auth":{"kind":"api-key","hint":"Lemon Squeezy API key from Settings → API. Sent as Authorization: Bearer <key>."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"products.list","description":"List products in a store with pagination.","parameters":{"type":"object","properties":{"storeId":{"type":"string"},"page":{"type":"integer","minimum":1},"perPage":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.list","description":"List orders, optionally filtered by store, customer email, or status.","parameters":{"type":"object","properties":{"storeId":{"type":"string"},"userEmail":{"type":"string"},"status":{"type":"string","enum":["pending","failed","paid","refunded"]},"page":{"type":"integer","minimum":1},"perPage":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.get","description":"Get a single order by id.","parameters":{"type":"object","properties":{"orderId":{"type":"string"}},"required":["orderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.list","description":"List subscriptions, optionally filtered by store or order item.","parameters":{"type":"object","properties":{"storeId":{"type":"string"},"orderItemId":{"type":"string"},"page":{"type":"integer","minimum":1},"perPage":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.list","description":"List customers, optionally filtered by store or email.","parameters":{"type":"object","properties":{"storeId":{"type":"string"},"email":{"type":"string"},"page":{"type":"integer","minimum":1},"perPage":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"checkouts.create","description":"Create a hosted checkout for a variant. Returns a checkout object whose attributes.url is the hosted payment page.","parameters":{"type":"object","properties":{"storeId":{"type":"string"},"variantId":{"type":"string"},"customerEmail":{"type":"string"},"customerName":{"type":"string"},"customPrice":{"type":"integer","minimum":1},"discountCode":{"type":"string"},"redirectUrl":{"type":"string"},"expiresAt":{"type":"string"},"customData":{"type":"object"}},"required":["storeId","variantId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.cancel","description":"Cancel a subscription. The subscription remains active until the end of the current billing period, after which it transitions to cancelled.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.issueRefund","description":"Issue a refund for an order. Omit `amount` to refund the full order total; otherwise pass an integer amount in cents (the smallest currency unit) for a partial refund.","parameters":{"type":"object","properties":{"id":{"type":"string"},"amount":{"type":"integer","minimum":1,"description":"Optional partial-refund amount in cents. Omit for a full refund."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"lets-calendar","displayName":"LetsCalendar","description":"Push contacts into LetsCalendar campaigns and read campaign metadata for scheduling and outreach flows.","auth":{"kind":"api-key","hint":"LetsCalendar client_key and secret_key issued from the workspace API settings. The connector sends them as HTTP Basic credentials on every request."},"category":"calendar","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.add.to.campaign","description":"Add a contact to a LetsCalendar campaign. Mirrors the activepieces add.contact.to.campaign action — campaign_id selects the campaign, the remaining fields populate the contact record.","parameters":{"type":"object","properties":{"campaign_id":{"type":"string","description":"The unique identifier of the campaign to add the contact to."},"firstname":{"type":"string","description":"First name of the contact (max 150 characters).","maxLength":150},"lastname":{"type":"string","description":"Last name of the contact (max 150 characters).","maxLength":150},"email":{"type":"string","description":"A valid email address for the contact (max 150 characters).","maxLength":150,"format":"email"},"loginurl":{"type":"string","description":"Login URL to send to the contact for the campaign portal."},"username":{"type":"string","description":"Username to associate with the contact in the campaign portal."},"password":{"type":"string","description":"Password to associate with the contact in the campaign portal."}},"required":["campaign_id","firstname","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.get","description":"Read a LetsCalendar campaign by id. Useful as a precheck before pushing contacts, and as the read pair to the new.campaign trigger.","parameters":{"type":"object","properties":{"campaign_id":{"type":"string","description":"The unique identifier of the campaign to read."}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.list","description":"List campaigns in the workspace. Backs the new.campaign trigger.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Max campaigns to return."},"cursor":{"type":"string","description":"Opaque pagination cursor returned by a previous page."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"letta","displayName":"Letta","description":"Build and manage stateful agents with Letta: create agents from templates, send messages, and manage identities.","auth":{"kind":"api-key","hint":"Letta API key (required for Letta Cloud) or leave empty for self-hosted."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"agents.create-from-template","description":"Create an agent from a template.","parameters":{"type":"object","properties":{"templateVersion":{"type":"string"},"agentName":{"type":"string"},"tags":{"type":"object"},"memoryVariables":{"type":"object"},"toolVariables":{"type":"object"},"initialMessageSequence":{"type":"object"}},"required":["templateVersion"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"agents.list","description":"List all agents.","parameters":{"type":"object","properties":{"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"agents.get","description":"Get details of a specific agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string"}},"required":["agentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"agents.send-message","description":"Send a message to an agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string"},"input":{"type":"string"},"maxSteps":{"type":"integer"}},"required":["agentId","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"identities.create","description":"Create an identity for agent interactions.","parameters":{"type":"object","properties":{"identifierKey":{"type":"string"},"identityType":{"type":"string"},"projectId":{"type":"string"},"properties":{"type":"object"}},"required":["identifierKey","identityType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"identities.list","description":"List identities.","parameters":{"type":"object","properties":{"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"identities.get","description":"Get details of a specific identity.","parameters":{"type":"object","properties":{"identityId":{"type":"string"}},"required":["identityId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"lever","displayName":"Lever","description":"Search and mutate Lever ATS opportunities (candidates), postings, requisitions, and notes.","auth":{"kind":"oauth2","authorizationUrl":"https://auth.lever.co/authorize","tokenUrl":"https://auth.lever.co/oauth/token","scopes":["offline_access","opportunities:read:admin","opportunities:write:admin","postings:read:admin","postings:write:admin","requisitions:read:admin","requisitions:write:admin","users:read:admin","stages:read:admin","archive_reasons:read:admin","sources:read:admin"],"clientIdEnv":"LEVER_OAUTH_CLIENT_ID","clientSecretEnv":"LEVER_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"opportunities.search","description":"List Lever opportunities (candidates) with optional filters.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Filter to opportunities for a candidate email."},"posting_id":{"type":"string"},"stage_id":{"type":"string"},"archived":{"type":"boolean"},"archived_posting_id":{"type":"string"},"tag":{"type":"string"},"contact_id":{"type":"string"},"source":{"type":"string"},"created_at_start":{"type":"integer","description":"Epoch ms."},"created_at_end":{"type":"integer","description":"Epoch ms."},"updated_at_start":{"type":"integer"},"updated_at_end":{"type":"integer"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"string"},"expand":{"type":"string","description":"Comma-sep list e.g. \"applications,stage,owner,followers\"."}}},"requiredScopes":["opportunities:read:admin"],"class":"read"},{"name":"opportunities.get","description":"Read a single Lever opportunity by id.","parameters":{"type":"object","properties":{"opportunityId":{"type":"string"},"expand":{"type":"string"}},"required":["opportunityId"]},"requiredScopes":["opportunities:read:admin"],"class":"read"},{"name":"opportunities.create","description":"Create a candidate opportunity. perform_as is required (the Lever user id taking the action).","parameters":{"type":"object","properties":{"perform_as":{"type":"string","description":"Lever user id (passed as query param)."},"name":{"type":"string"},"headline":{"type":"string"},"emails":{"type":"array","items":{"type":"string","format":"email"}},"phones":{"type":"array","items":{"type":"object"}},"links":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"sources":{"type":"array","items":{"type":"string"}},"origin":{"type":"string","enum":["applied","sourced","referred","university","agency","internal"]},"owner":{"type":"string"},"stage":{"type":"string"},"postings":{"type":"array","items":{"type":"string"}},"contact":{"type":"string"}},"required":["perform_as"]},"requiredScopes":["opportunities:write:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.addNote","description":"Add a note to a Lever opportunity.","parameters":{"type":"object","properties":{"opportunityId":{"type":"string"},"perform_as":{"type":"string"},"value":{"type":"string","description":"Note body."},"secret":{"type":"boolean"}},"required":["opportunityId","perform_as","value"]},"requiredScopes":["opportunities:write:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.advanceStage","description":"Move a Lever opportunity to a different stage.","parameters":{"type":"object","properties":{"opportunityId":{"type":"string"},"perform_as":{"type":"string"},"stage":{"type":"string","description":"Target stage id."}},"required":["opportunityId","perform_as","stage"]},"requiredScopes":["opportunities:write:admin"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"opportunities.archive","description":"Archive a Lever opportunity with a reason.","parameters":{"type":"object","properties":{"opportunityId":{"type":"string"},"perform_as":{"type":"string"},"reason":{"type":"string","description":"Archive reason id."},"requisitionId":{"type":"string","description":"Optional hired-against requisition id."}},"required":["opportunityId","perform_as","reason"]},"requiredScopes":["opportunities:write:admin"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"postings.search","description":"List Lever job postings with optional state / team / location filters.","parameters":{"type":"object","properties":{"state":{"type":"string","enum":["published","internal","closed","draft","pending","rejected"]},"team":{"type":"string"},"department":{"type":"string"},"location":{"type":"string"},"commitment":{"type":"string"},"level":{"type":"string"},"group":{"type":"string","enum":["team","department","location","commitment","level"]},"tag":{"type":"string"},"created_at_start":{"type":"integer"},"created_at_end":{"type":"integer"},"updated_at_start":{"type":"integer"},"updated_at_end":{"type":"integer"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"string"}}},"requiredScopes":["postings:read:admin"],"class":"read"},{"name":"postings.get","description":"Read a single Lever posting by id.","parameters":{"type":"object","properties":{"postingId":{"type":"string"}},"required":["postingId"]},"requiredScopes":["postings:read:admin"],"class":"read"},{"name":"postings.create","description":"Create a Lever posting.","parameters":{"type":"object","properties":{"perform_as":{"type":"string"},"text":{"type":"string","description":"Posting title."},"state":{"type":"string","enum":["published","internal","closed","draft","pending","rejected"]},"distributionChannels":{"type":"array","items":{"type":"string"}},"user":{"type":"string","description":"Hiring manager Lever user id."},"owner":{"type":"string","description":"Posting owner Lever user id."},"hiringManager":{"type":"string"},"categories":{"type":"object"},"tags":{"type":"array","items":{"type":"string"}},"content":{"type":"object","description":"Posting body sections."},"country":{"type":"string"},"followers":{"type":"array","items":{"type":"string"}},"reqCode":{"type":"string"},"requisitionCodes":{"type":"array","items":{"type":"string"}}},"required":["perform_as","text"]},"requiredScopes":["postings:write:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"requisitions.search","description":"List Lever requisitions.","parameters":{"type":"object","properties":{"requisition_code":{"type":"string"},"status":{"type":"string","enum":["open","onHold","closed","draft"]},"created_at_start":{"type":"integer"},"created_at_end":{"type":"integer"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"string"}}},"requiredScopes":["requisitions:read:admin"],"class":"read"},{"name":"requisitions.get","description":"Read a single Lever requisition by id.","parameters":{"type":"object","properties":{"requisitionId":{"type":"string"}},"required":["requisitionId"]},"requiredScopes":["requisitions:read:admin"],"class":"read"},{"name":"users.search","description":"List Lever users (recruiters, hiring managers).","parameters":{"type":"object","properties":{"email":{"type":"string"},"access_role":{"type":"string","enum":["super_admin","admin","team_member","limited_team_member","interviewer"]},"deactivated":{"type":"boolean"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"string"}}},"requiredScopes":["users:read:admin"],"class":"read"},{"name":"stages.list","description":"List configured Lever pipeline stages.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"string"}}},"requiredScopes":["stages:read:admin"],"class":"read"},{"name":"archive_reasons.list","description":"List configured Lever archive reasons (required for archiving opportunities).","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"string"}}},"requiredScopes":["archive_reasons:read:admin"],"class":"read"},{"name":"sources.list","description":"List configured Lever opportunity sources.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"string"}}},"requiredScopes":["sources:read:admin"],"class":"read"}]},{"kind":"lightfunnels","displayName":"Lightfunnels","description":"Manage Lightfunnels products, orders, customers and funnels.","auth":{"kind":"oauth2","authorizationUrl":"https://app.lightfunnels.com/oauth/authorize","tokenUrl":"https://api.lightfunnels.com/oauth/token","scopes":["read","write"],"clientIdEnv":"LIGHTFUNNELS_OAUTH_CLIENT_ID","clientSecretEnv":"LIGHTFUNNELS_OAUTH_CLIENT_SECRET"},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"list.products","description":"List Lightfunnels products.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"},"query":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.product","description":"Get a single Lightfunnels product by id.","parameters":{"type":"object","properties":{"productId":{"type":"string"}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"create.product","description":"Create a Lightfunnels product.","parameters":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"compare_at_price":{"type":"number"},"sku":{"type":"string"},"published":{"type":"boolean"}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.order","description":"Get a single Lightfunnels order by id.","parameters":{"type":"object","properties":{"orderId":{"type":"string"}},"required":["orderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"list.orders","description":"List Lightfunnels orders.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"},"status":{"type":"string"},"funnel_id":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cancel.order","description":"Cancel a Lightfunnels order. Destructive — agent must surface confirmation.","parameters":{"type":"object","properties":{"orderId":{"type":"string"},"reason":{"type":"string"},"refund":{"type":"boolean"}},"required":["orderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.customer","description":"Create a Lightfunnels customer record.","parameters":{"type":"object","properties":{"email":{"type":"string","format":"email"},"first_name":{"type":"string"},"last_name":{"type":"string"},"phone":{"type":"string"},"accepts_marketing":{"type":"boolean"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.customer","description":"Get a single Lightfunnels customer by id.","parameters":{"type":"object","properties":{"customerId":{"type":"string"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"list.customers","description":"List Lightfunnels customers.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"},"query":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"get.funnel","description":"Get a Lightfunnels funnel by id.","parameters":{"type":"object","properties":{"funnelId":{"type":"string"}},"required":["funnelId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"linear","displayName":"Linear","description":"Query, create, and update Linear issues, comments, projects, and teams via the Linear GraphQL API.","auth":{"kind":"oauth2","authorizationUrl":"https://linear.app/oauth/authorize","tokenUrl":"https://api.linear.app/oauth/token","scopes":["read","write","issues:create","comments:create"],"clientIdEnv":"LINEAR_OAUTH_CLIENT_ID","clientSecretEnv":"LINEAR_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"viewer.get","description":"Return the authenticated Linear user and their organization.","parameters":{"type":"object","properties":{}},"requiredScopes":["read"],"class":"read"},{"name":"issues.get","description":"Read a single Linear issue by id or identifier (e.g. ENG-123). Pass `{ variables: { id: \"ENG-1\" } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},"required":["variables"]},"requiredScopes":["read"],"class":"read"},{"name":"issues.search","description":"Search Linear issues with a GraphQL IssueFilter; supports cursor pagination. Pass `{ variables: { filter, first, after, orderBy } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"filter":{"type":"object"},"first":{"type":"integer","minimum":1,"maximum":250},"after":{"type":"string"},"orderBy":{"type":"string","enum":["createdAt","updatedAt"]}}}},"required":["variables"]},"requiredScopes":["read"],"class":"read"},{"name":"issues.create","description":"Create a Linear issue. Pass `{ variables: { input: IssueCreateInput } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"input":{"type":"object","properties":{"teamId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"priority":{"type":"integer","minimum":0,"maximum":4},"assigneeId":{"type":"string"},"stateId":{"type":"string"},"projectId":{"type":"string"},"labelIds":{"type":"array","items":{"type":"string"}}},"required":["teamId","title"]}},"required":["input"]}},"required":["variables"]},"requiredScopes":["issues:create"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.update","description":"Update fields on an existing Linear issue. Pass `{ variables: { id, input: IssueUpdateInput } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"id":{"type":"string"},"input":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"priority":{"type":"integer","minimum":0,"maximum":4},"assigneeId":{"type":"string"},"stateId":{"type":"string"},"projectId":{"type":"string"},"labelIds":{"type":"array","items":{"type":"string"}}}}},"required":["id","input"]}},"required":["variables"]},"requiredScopes":["write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"issues.delete","description":"Archive (delete) a Linear issue. Pass `{ variables: { id } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},"required":["variables"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Add a comment to a Linear issue. Pass `{ variables: { input: CommentCreateInput } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"input":{"type":"object","properties":{"issueId":{"type":"string"},"body":{"type":"string"},"parentId":{"type":"string"}},"required":["issueId","body"]}},"required":["input"]}},"required":["variables"]},"requiredScopes":["comments:create"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.list","description":"List comments matching a Linear CommentFilter; cursor paginated. Pass `{ variables: { filter, first, after } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"filter":{"type":"object"},"first":{"type":"integer","minimum":1,"maximum":250},"after":{"type":"string"}}}},"required":["variables"]},"requiredScopes":["read"],"class":"read"},{"name":"projects.list","description":"List Linear projects matching an optional ProjectFilter. Pass `{ variables: { filter, first, after } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"filter":{"type":"object"},"first":{"type":"integer","minimum":1,"maximum":250},"after":{"type":"string"}}}},"required":["variables"]},"requiredScopes":["read"],"class":"read"},{"name":"projects.create","description":"Create a Linear project. Pass `{ variables: { input: ProjectCreateInput } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"input":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"teamIds":{"type":"array","items":{"type":"string"}},"startDate":{"type":"string"},"targetDate":{"type":"string"},"leadId":{"type":"string"}},"required":["name","teamIds"]}},"required":["input"]}},"required":["variables"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"teams.list","description":"List Linear teams visible to the authenticated user. Pass `{ variables: { first, after } }`.","parameters":{"type":"object","properties":{"variables":{"type":"object","properties":{"first":{"type":"integer","minimum":1,"maximum":250},"after":{"type":"string"}}}},"required":["variables"]},"requiredScopes":["read"],"class":"read"}]},{"kind":"linka","displayName":"Linka","description":"Manage Linka (Sperse-powered) marketplace contacts, subscriptions, invoices, and products.","auth":{"kind":"api-key","hint":"Linka / Sperse API key (sent as X-API-Key on every request)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.get","description":"Get a Linka contact by Sperse contact ID.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.upsert","description":"Add or update a Linka contact (mirrors activepieces addOrUpdateContact).","parameters":{"type":"object","properties":{"contactId":{"type":"number"},"contactXref":{"type":"string"},"matchExisting":{"type":"boolean"},"overrideLists":{"type":"boolean"},"ignoreInvalidValues":{"type":"boolean"},"importType":{"type":"string"},"createUser":{"type":"boolean"},"sendWelcomeEmail":{"type":"boolean"},"fields":{"type":"object"}},"required":["importType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.upsert.extended","description":"Add or update a Linka contact with extended profile fields (mirrors addOrUpdateContactExtended).","parameters":{"type":"object","properties":{"contactId":{"type":"number"},"contactXref":{"type":"string"},"matchExisting":{"type":"boolean"},"overrideLists":{"type":"boolean"},"ignoreInvalidValues":{"type":"boolean"},"importType":{"type":"string"},"createUser":{"type":"boolean"},"sendWelcomeEmail":{"type":"boolean"},"userPassword":{"type":"string"},"fields":{"type":"object"},"social":{"type":"object"},"company":{"type":"object"},"tracking":{"type":"object"}},"required":["importType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.upsert","description":"Add or update a Linka subscription for a contact.","parameters":{"type":"object","properties":{"contactId":{"type":"number"},"contactXref":{"type":"string"},"subscriptionXref":{"type":"string"},"productCode":{"type":"string"},"status":{"type":"string"},"startDate":{"type":"string"},"endDate":{"type":"string"},"fields":{"type":"object"}},"required":["productCode"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.create","description":"Create a Linka invoice for a contact.","parameters":{"type":"object","properties":{"contactId":{"type":"number"},"contactXref":{"type":"string"},"invoiceXref":{"type":"string"},"currency":{"type":"string"},"dueDate":{"type":"string"},"lineItems":{"type":"array"},"notes":{"type":"string"}},"required":["lineItems"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.create","description":"Create a Linka product / catalog entry.","parameters":{"type":"object","properties":{"productCode":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"currency":{"type":"string"},"category":{"type":"string"},"active":{"type":"boolean"},"fields":{"type":"object"}},"required":["productCode","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"linkedin","displayName":"LinkedIn","description":"Read the connected LinkedIn member profile and create / delete member posts and comments via the LinkedIn REST API.","auth":{"kind":"oauth2","authorizationUrl":"https://www.linkedin.com/oauth/v2/authorization","tokenUrl":"https://www.linkedin.com/oauth/v2/accessToken","scopes":["openid","profile","email","w_member_social"],"clientIdEnv":"LINKEDIN_OAUTH_CLIENT_ID","clientSecretEnv":"LINKEDIN_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"advisory","capabilities":[{"name":"userinfo","description":"Return the OpenID-Connect userinfo for the connected LinkedIn member (sub, name, given_name, family_name, picture, email, email_verified, locale).","parameters":{"type":"object","properties":{}},"requiredScopes":["openid","profile","email"],"class":"read"},{"name":"shares.create","description":"Create a published text or article share on the connected member feed through LinkedIn's self-serve UGC Posts API. `author` is the connected member URN, `text` is the share commentary, and an optional `url` creates an article card.","parameters":{"type":"object","properties":{"author":{"type":"string","description":"URN of the connected member (urn:li:person:{sub})."},"text":{"type":"string","description":"Share text."},"url":{"type":"string","description":"Optional URL for an article card."},"title":{"type":"string","description":"Optional article-card title."},"description":{"type":"string","description":"Optional article-card description."},"visibility":{"type":"string","enum":["PUBLIC","CONNECTIONS"],"default":"PUBLIC"}},"required":["author","text"]},"requiredScopes":["w_member_social"],"class":"mutation","cas":"none","externalEffect":true},{"name":"posts.create","description":"Create a LinkedIn member post on the REST Posts API. `author` is the connected member URN (e.g. `urn:li:person:{sub}`). `commentary` is the post text; `distribution.feedDistribution` defaults to `MAIN_FEED`; `lifecycleState` defaults to `PUBLISHED`. Append-only — caller owns dedupe via idempotencyKey.","parameters":{"type":"object","properties":{"author":{"type":"string","description":"URN of the connected member post author (urn:li:person:{sub})."},"commentary":{"type":"string","description":"Post text body."},"visibility":{"type":"string","enum":["PUBLIC","CONNECTIONS","LOGGED_IN","CONTAINER"],"default":"PUBLIC"},"distribution":{"type":"object","description":"Distribution policy. Defaults to { feedDistribution: \"MAIN_FEED\", targetEntities: [], thirdPartyDistributionChannels: [] }."},"content":{"type":"object","description":"Optional rich-media content block ({ article: {...} } | { media: {...} } | { multiImage: {...} } | { poll: {...} } | { carousel: {...} })."},"lifecycleState":{"type":"string","enum":["PUBLISHED","DRAFT"],"default":"PUBLISHED"},"isReshareDisabledByAuthor":{"type":"boolean","default":false}},"required":["author","commentary"]},"requiredScopes":["w_member_social"],"class":"mutation","cas":"none","externalEffect":true},{"name":"posts.delete","description":"Delete a post by its URL-encoded URN. Idempotent on the URN — replays after success return 404 and the engine maps that to a no-op.","parameters":{"type":"object","properties":{"postUrn":{"type":"string"}},"required":["postUrn"]},"requiredScopes":["w_member_social"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Create a top-level comment on a share / post as the connected member. `actor` is the member URN posting the comment; `message.text` is the comment text. Append-only — caller owns dedupe via idempotencyKey.","parameters":{"type":"object","properties":{"shareUrn":{"type":"string","description":"URL-encoded URN of the parent share (urn:li:share:* or urn:li:ugcPost:*)."},"actor":{"type":"string","description":"URN of the commenting member."},"message":{"type":"object","description":"Comment body `{ text: string, attributes?: [...] }`."},"parentComment":{"type":"string","description":"Optional URN of a parent comment for threaded replies."}},"required":["shareUrn","actor","message"]},"requiredScopes":["w_member_social"],"class":"mutation","cas":"none","externalEffect":true},{"name":"comments.update","description":"Edit the text of an existing comment by its URN. Only the original comment actor can edit. Verified via read-after-write because LinkedIn returns no ETag.","parameters":{"type":"object","properties":{"shareUrn":{"type":"string"},"commentUrn":{"type":"string","description":"URL-encoded URN of the comment to update."},"actor":{"type":"string"},"message":{"type":"object"}},"required":["shareUrn","commentUrn","actor","message"]},"requiredScopes":["w_member_social"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"comments.delete","description":"Delete a comment by URN. `actor` must be the comment author. Idempotent on the URN.","parameters":{"type":"object","properties":{"shareUrn":{"type":"string"},"commentUrn":{"type":"string"},"actor":{"type":"string"}},"required":["shareUrn","commentUrn","actor"]},"requiredScopes":["w_member_social"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"linkup","displayName":"Linkup","description":"Web search engine for AI apps. Run grounded web searches and fetch live webpage content via the Linkup API.","auth":{"kind":"api-key","hint":"Linkup API key from the Linkup console."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"search","description":"Run a natural-language web search grounded by Linkup. Supports standard or deep retrieval, structured output, and domain/date filters.","parameters":{"type":"object","properties":{"q":{"type":"string"},"depth":{"type":"string","enum":["standard","deep"]},"outputType":{"type":"string","enum":["searchResults","sourcedAnswer","structured"]},"structuredOutputSchema":{"type":"string"},"includeSources":{"type":"boolean"},"includeImages":{"type":"boolean"},"includeInlineCitations":{"type":"boolean"},"fromDate":{"type":"string"},"toDate":{"type":"string"},"includeDomains":{"type":"array","items":{"type":"string"}},"excludeDomains":{"type":"array","items":{"type":"string"}},"maxResults":{"type":"integer"}},"required":["q","depth","outputType"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"fetch","description":"Fetch a single webpage through Linkup, optionally rendering JavaScript and extracting images or raw HTML.","parameters":{"type":"object","properties":{"url":{"type":"string"},"renderJs":{"type":"boolean"},"includeRawHtml":{"type":"boolean"},"extractImages":{"type":"boolean"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"linq","displayName":"Linq","description":"Read owned messaging lines and conversations, and send replies through Linq v3.","auth":{"kind":"api-key","hint":"Linq partner API bearer key. Webhook signing secrets are configured separately."},"category":"comms","defaultConsistencyModel":"advisory","capabilities":[{"name":"numbers.list","description":"List owned lines and their current provider status.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"chats.list","description":"List account conversations with pagination.","parameters":{"type":"object","properties":{"cursor":{"type":"string","minLength":1,"maxLength":256},"limit":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"chats.get","description":"Read a conversation and its actual owner handle before selecting a reply route.","parameters":{"type":"object","properties":{"chat_id":{"type":"string","minLength":1,"maxLength":256}},"required":["chat_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.list","description":"Read conversation messages for context or delivery reconciliation.","parameters":{"type":"object","properties":{"chat_id":{"type":"string","minLength":1,"maxLength":256},"cursor":{"type":"string","minLength":1,"maxLength":256},"limit":{"type":"integer","minimum":1,"maximum":100}},"required":["chat_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.reply","description":"Send a plain-text reply to a verified conversation. Supply the same message_key on recovery; never manufacture a new key after a timeout.","parameters":{"type":"object","properties":{"chat_id":{"type":"string","minLength":1,"maxLength":256},"text":{"type":"string","minLength":1,"maxLength":10000},"message_key":{"type":"string","minLength":1,"maxLength":256}},"required":["chat_id","text","message_key"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"linq-whatsapp","displayName":"Linq WhatsApp","description":"Use an existing WhatsApp Business identity. Reads expose current window, template and delivery state; sends acknowledge acceptance only.","auth":{"kind":"api-key","hint":"The exact brand-scoped WhatsApp key from Linq Embedded Signup. Keep the issued test/live prefix unchanged."},"category":"comms","defaultConsistencyModel":"advisory","capabilities":[{"name":"numbers.list","description":"Read existing registered sending numbers. Does not acquire a number.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"chats.list","description":"Find the existing one-to-one conversation and its pinned sending number.","parameters":{"type":"object","properties":{"cursor":{"type":"string","minLength":1,"maxLength":256},"limit":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"chats.get","description":"Read the actual customer, sender and current free-form messaging window.","parameters":{"type":"object","properties":{"chat_id":{"type":"string","minLength":1,"maxLength":256}},"required":["chat_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"events.list","description":"Read the account event log. Keep its opaque cursor separate from chat sequence numbers.","parameters":{"type":"object","properties":{"cursor":{"type":"string","minLength":1,"maxLength":256},"limit":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"chats.events","description":"Read canonical messages and delivery receipts in the selected chat.","parameters":{"type":"object","properties":{"chat_id":{"type":"string","minLength":1,"maxLength":256},"cursor":{"type":"string","minLength":1,"maxLength":256},"limit":{"type":"integer","minimum":1,"maximum":100}},"required":["chat_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"templates.list","description":"Read approved templates and their exact send_schema; no template is inferred or substituted.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.reply","description":"Reply in the existing chat without changing its sender or recipient. Free-form text requires an open customer window; a refusal does not authorize template substitution.","parameters":{"type":"object","properties":{"chat_id":{"type":"string","minLength":1,"maxLength":256},"text":{"type":"string","minLength":1,"maxLength":4096}},"required":["chat_id","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"llmrails","displayName":"LLM Rails","description":"Run hybrid semantic search against an LLM Rails datastore and optionally summarize the results.","auth":{"kind":"api-key","hint":"LLM Rails API key (workspace settings → API keys). Sent as a bearer token on every request."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"datastore.search","description":"Search a datastore using a natural-language query. Supports hybrid (dense + sparse) retrieval and optional answer summarization over the matched chunks.","parameters":{"type":"object","properties":{"datastoreId":{"type":"string","description":"Identifier of the LLM Rails datastore to search. Visible in the LLM Rails UI as the datastore slug or UUID."},"text":{"type":"string","description":"Natural-language search query."},"hybrid":{"type":"boolean","description":"When true, combine dense embedding similarity with sparse keyword scoring. When false, dense-only retrieval is used."},"summarize":{"type":"boolean","description":"When true, LLM Rails synthesizes a summary answer over the retrieved chunks in addition to returning the raw matches."}},"required":["datastoreId","text","hybrid","summarize"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"lobstermail","displayName":"LobsterMail","description":"Provision LobsterMail inboxes, send transactional email, and search received messages.","auth":{"kind":"api-key","hint":"LobsterMail API key from Settings → API Keys (starts with lm_)."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.get","description":"Fetch the LobsterMail account associated with the current API key.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"inboxes.create","description":"Create a new inbox under the account. Domain defaults to lobstermail.ai when omitted.","parameters":{"type":"object","properties":{"displayName":{"type":"string"},"localPart":{"type":"string"},"domain":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"inboxes.get","description":"Fetch a single inbox by ID.","parameters":{"type":"object","properties":{"inboxId":{"type":"string"}},"required":["inboxId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"inboxes.list","description":"List inboxes on the account.","parameters":{"type":"object","properties":{"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"inboxes.delete","description":"Permanently delete an inbox and detach its email address.","parameters":{"type":"object","properties":{"inboxId":{"type":"string"}},"required":["inboxId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"emails.send","description":"Send a transactional email from an inbox. At least one of body_text or body_html is required by the API.","parameters":{"type":"object","properties":{"inboxId":{"type":"string"},"to":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body_text":{"type":"string"},"body_html":{"type":"string"},"cc":{"type":"array","items":{"type":"string"}},"in_reply_to":{"type":"string"},"thread_id":{"type":"string"}},"required":["inboxId","to","subject"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"emails.list","description":"List emails on an inbox, optionally filtered by direction, unread state, or attachment presence.","parameters":{"type":"object","properties":{"inboxId":{"type":"string"},"direction":{"type":"string","enum":["inbound","outbound"]},"unread_only":{"type":"boolean"},"has_attachments":{"type":"boolean"},"limit":{"type":"integer"}},"required":["inboxId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"emails.get","description":"Fetch a single email by ID (prefix eml_), including full body and attachment metadata.","parameters":{"type":"object","properties":{"email_id":{"type":"string"}},"required":["email_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"emails.search","description":"Search emails across the account. Searches subjects (highest priority), senders, and body previews; optionally narrowed by sender or attachment presence.","parameters":{"type":"object","properties":{"query":{"type":"string"},"from":{"type":"string"},"has_attachments":{"type":"boolean"},"limit":{"type":"integer"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"localai","displayName":"LocalAI","description":"Call a self-hosted LocalAI instance over its OpenAI-compatible REST surface: list available models and run chat completions.","auth":{"kind":"api-key","hint":"Optional LocalAI access token. The connection must also store the instance base URL (e.g. https://localai.example.com) in the base_url metadata field."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"models.list","description":"List models served by the LocalAI instance.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"ask.local.ai","description":"Run a chat completion against the LocalAI instance. Mirrors the activepieces askLocalAI action: a single prompt with sampling controls and optional role/system messages.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model id from /v1/models. LocalAI serves whatever model files are installed on the host; there is no fixed enum."},"prompt":{"type":"string","description":"User prompt forwarded as the final user-role message."},"roles":{"type":"array","description":"Optional preceding messages (system / assistant / prior user turns). When omitted only the prompt is sent.","items":{"type":"object","properties":{"role":{"type":"string","enum":["system","user","assistant"]},"content":{"type":"string"}},"required":["role","content"]}},"temperature":{"type":"number","description":"Sampling temperature. Lower values make the model more deterministic."},"maxTokens":{"type":"integer","description":"Maximum number of tokens to generate across prompt + completion.","minimum":1},"topP":{"type":"number","description":"Nucleus-sampling cutoff. 0.1 keeps only the top 10% probability mass."},"frequencyPenalty":{"type":"number","description":"Frequency penalty in [-2, 2]. Positive values discourage token repetition by frequency.","minimum":-2,"maximum":2},"presencePenalty":{"type":"number","description":"Presence penalty in [-2, 2]. Positive values encourage new topics.","minimum":-2,"maximum":2}},"required":["model","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"lofty","displayName":"Lofty","description":"Create and update leads and transactions in Lofty for real estate agents.","auth":{"kind":"api-key","hint":"Lofty API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"leads.create","description":"Create a lead in Lofty.","parameters":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"source":{"type":"string"},"leadType":{"type":"string"},"minPrice":{"type":"number"},"maxPrice":{"type":"number"},"city":{"type":"string"},"state":{"type":"string"},"zipcode":{"type":"string"},"beds":{"type":"number"},"baths":{"type":"number"},"tags":{"type":"array","items":{"type":"string"}},"note":{"type":"string"},"sendWelcomeEmail":{"type":"boolean"},"emailOptIn":{"type":"boolean"}},"required":["firstName","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update","description":"Update a lead in Lofty.","parameters":{"type":"object","properties":{"leadId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"source":{"type":"string"},"leadType":{"type":"string"},"minPrice":{"type":"number"},"maxPrice":{"type":"number"},"city":{"type":"string"},"state":{"type":"string"},"zipcode":{"type":"string"},"beds":{"type":"number"},"baths":{"type":"number"},"tags":{"type":"array","items":{"type":"string"}},"note":{"type":"string"},"emailOptIn":{"type":"boolean"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"transactions.create","description":"Create a transaction in Lofty.","parameters":{"type":"object","properties":{"leadId":{"type":"string"},"transactionDate":{"type":"string"},"transactionType":{"type":"string"},"amount":{"type":"number"},"propertyAddress":{"type":"string"},"propertyCity":{"type":"string"},"propertyState":{"type":"string"},"propertyZipcode":{"type":"string"},"beds":{"type":"number"},"baths":{"type":"number"},"sqft":{"type":"number"},"mlsNumber":{"type":"string"},"closingDate":{"type":"string"}},"required":["leadId","transactionType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.update","description":"Update a transaction in Lofty.","parameters":{"type":"object","properties":{"transactionId":{"type":"string"},"transactionDate":{"type":"string"},"transactionType":{"type":"string"},"amount":{"type":"number"},"propertyAddress":{"type":"string"},"propertyCity":{"type":"string"},"propertyState":{"type":"string"},"propertyZipcode":{"type":"string"},"beds":{"type":"number"},"baths":{"type":"number"},"sqft":{"type":"number"},"mlsNumber":{"type":"string"},"closingDate":{"type":"string"}},"required":["transactionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"leads.delete","description":"Delete a lead by id.","parameters":{"type":"object","properties":{"leadId":{"type":"string"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.create","description":"Create a task on a lead.","parameters":{"type":"object","properties":{"leadId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"dueDate":{"type":"string"},"priority":{"type":"string"},"assigneeId":{"type":"string"},"status":{"type":"string"}},"required":["leadId","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"logrocket","displayName":"LogRocket","description":"Request AI-generated session highlights and identify users in LogRocket.","auth":{"kind":"api-key","hint":"LogRocket API key (Settings → Project Setup → API Keys)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"highlights.request","description":"Request AI-generated highlights for a project; results are POSTed to webhookUrl when ready.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"LogRocket organization ID (slug or numeric ID)."},"appId":{"type":"string","description":"LogRocket app/project ID. Either appId or projectId is required."},"projectId":{"type":"string","description":"LogRocket project ID (alias of appId for newer projects)."},"webhookUrl":{"type":"string","description":"URL the highlights service will POST results to when the request completes."},"userEmail":{"type":"string","description":"Filter sessions to a single user by email."},"timeRangeStart":{"type":"integer","description":"Unix milliseconds — inclusive lower bound on session start."},"timeRangeEnd":{"type":"integer","description":"Unix milliseconds — exclusive upper bound on session start."},"markdown":{"type":"boolean","description":"Render highlights as markdown rather than plain text."}},"required":["orgId","webhookUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.identify","description":"Identify a user / upsert trait metadata against an existing LogRocket app.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"LogRocket organization ID."},"appId":{"type":"string","description":"LogRocket app/project ID."},"userId":{"type":"string","description":"Unique identifier for the user being identified."},"name":{"type":"string","description":"Display name to attach to the user."},"email":{"type":"string","description":"Email address to attach to the user."},"timestamp":{"type":"integer","description":"Unix milliseconds — when these traits were observed. Defaults to server time."},"traits":{"type":"object","description":"Arbitrary key/value pairs to merge into the user profile."}},"required":["orgId","appId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"highlights.ready","description":"Read the latest highlights request for a project — exposes the same payload the highlightsReady webhook would deliver, so callers without an inbound webhook can poll.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"LogRocket organization ID."},"appId":{"type":"string","description":"LogRocket app/project ID."},"requestId":{"type":"string","description":"Highlights request ID returned by highlights.request. Omit to fetch the most recent."},"status":{"type":"string","description":"Filter by request status (pending, complete, failed) when listing."},"limit":{"type":"integer","description":"Maximum number of requests to return when listing."}},"required":["orgId","appId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"logsnag","displayName":"LogSnag","description":"Track project events, identify users, and update insight counters in LogSnag.","auth":{"kind":"api-key","hint":"LogSnag project API token (Authorization: Bearer …)."},"category":"comms","defaultConsistencyModel":"advisory","capabilities":[{"name":"create.event","description":"Publish an event to a LogSnag channel. Mirrors the activepieces createEvent action — project, channel, and event are required; description, icon, notify, and tags are optional.","parameters":{"type":"object","properties":{"project":{"type":"string","description":"LogSnag project slug the event belongs to."},"channel":{"type":"string","description":"Channel within the project (e.g. \"signups\")."},"event":{"type":"string","description":"Short event title shown in the LogSnag feed."},"description":{"type":"string","description":"Optional longer body for the event."},"icon":{"type":"string","description":"Optional single emoji shown next to the event."},"notify":{"type":"boolean","description":"When true, send a push notification to subscribers."},"tags":{"type":"object","description":"Free-form key/value tags. Keys must be lowercase and dash-separated."},"user_id":{"type":"string","description":"Optional user identifier to attach to the event."},"parser":{"type":"string","enum":["markdown","text"],"description":"Renderer for description."},"timestamp":{"type":"integer","description":"Optional unix-seconds timestamp; defaults to now."}},"required":["project","channel","event"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"identify.user","description":"Attach trait properties to a user identifier inside a LogSnag project. Properties are merged server-side.","parameters":{"type":"object","properties":{"project":{"type":"string"},"user_id":{"type":"string","description":"Stable user identifier."},"properties":{"type":"object","description":"Trait key/value pairs to merge."}},"required":["project","user_id","properties"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"group.identify","description":"Attach trait properties to a group (org/team) identifier inside a LogSnag project.","parameters":{"type":"object","properties":{"project":{"type":"string"},"group_id":{"type":"string"},"properties":{"type":"object"}},"required":["project","group_id","properties"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"insight.publish","description":"Upsert a numeric insight tile on a LogSnag project dashboard.","parameters":{"type":"object","properties":{"project":{"type":"string"},"title":{"type":"string","description":"Human-readable insight title."},"value":{"type":"number","description":"Numeric value to display."},"icon":{"type":"string","description":"Optional emoji icon."}},"required":["project","title","value"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"insight.mutate","description":"Atomically increment, decrement, or set an insight value by title. Use this for counters that must not race.","parameters":{"type":"object","properties":{"project":{"type":"string"},"title":{"type":"string"},"value":{"type":"object","description":"Atomic mutation, e.g. { \"$inc\": 1 } or { \"$set\": 42 }."},"icon":{"type":"string"}},"required":["project","title","value"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"lokalise","displayName":"Lokalise","description":"Manage Lokalise translation projects: read projects, keys, translations, and comments; create or update keys, translations, tasks, projects, and comments.","auth":{"kind":"api-key","hint":"Lokalise API token, sent as the X-Api-Token header."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"projects.create","description":"Create a new Lokalise project.","parameters":{"type":"object","properties":{"name":{"type":"string"},"team_id":{"type":"string"},"description":{"type":"string"},"base_lang_iso":{"type":"string"},"languages":{"type":"array","items":{"type":"object"}},"project_type":{"type":"string"},"is_segmentation_enabled":{"type":"boolean"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.get","description":"Retrieve a single Lokalise project.","parameters":{"type":"object","properties":{"project_id":{"type":"string"}},"required":["project_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"keys.create","description":"Create one or more translation keys in a project.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"keys":{"type":"array","items":{"type":"object"}},"use_automations":{"type":"boolean"}},"required":["project_id","keys"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"keys.get","description":"Retrieve a single key from a project.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"key_id":{"type":"string"},"disable_references":{"type":"boolean"}},"required":["project_id","key_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"keys.update","description":"Update an existing translation key.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"key_id":{"type":"string"},"key_name":{"type":"string"},"description":{"type":"string"},"platforms":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"merge_tags":{"type":"boolean"},"is_plural":{"type":"boolean"},"plural_name":{"type":"string"},"is_hidden":{"type":"boolean"},"is_archived":{"type":"boolean"},"context":{"type":"string"},"char_limit":{"type":"integer"}},"required":["project_id","key_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"keys.delete","description":"Delete a translation key from a project.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"key_id":{"type":"string"}},"required":["project_id","key_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"translations.get","description":"Retrieve a single translation by id.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"translation_id":{"type":"string"},"disable_references":{"type":"boolean"}},"required":["project_id","translation_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"translations.update","description":"Update a translation by id.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"translation_id":{"type":"string"},"translation":{"type":"string"},"is_unverified":{"type":"boolean"},"is_reviewed":{"type":"boolean"},"custom_translation_status_ids":{"type":"array","items":{"type":"integer"}}},"required":["project_id","translation_id","translation"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.create","description":"Create a translation or review task within a project.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"title":{"type":"string"},"task_type":{"type":"string"},"keys":{"type":"array","items":{"type":"integer"}},"languages":{"type":"array","items":{"type":"object"}},"source_language_iso":{"type":"string"},"due_date":{"type":"string"},"auto_close_languages":{"type":"boolean"},"auto_close_task":{"type":"boolean"},"closing_tags":{"type":"array","items":{"type":"string"}},"do_lock_translations":{"type":"boolean"},"mark_verified":{"type":"boolean"},"save_ai_translation_to_tm":{"type":"boolean"},"apply_ai_tm_100_matches":{"type":"boolean"}},"required":["project_id","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Add a comment to a key in a project.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"key_id":{"type":"string"},"comment":{"type":"string"}},"required":["project_id","key_id","comment"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.get","description":"Retrieve a single comment on a key.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"key_id":{"type":"string"},"comment_id":{"type":"string"}},"required":["project_id","key_id","comment_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"loops","displayName":"Loops","description":"Send transactional and marketing emails. Manage contacts, trigger automations, and send campaigns.","auth":{"kind":"api-key","hint":"Loops API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.create","description":"Create a new contact or update an existing one.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the contact."},"firstName":{"type":"string","description":"First name of the contact."},"lastName":{"type":"string","description":"Last name of the contact."},"userId":{"type":"string","description":"Internal user ID for this contact."},"subscribed":{"type":"boolean","description":"Whether the contact is subscribed to marketing emails."},"userGroup":{"type":"string","description":"Segment or group to assign the contact."},"source":{"type":"string","description":"Source where this contact came from."},"customProperties":{"type":"object","description":"Additional custom properties as key-value pairs."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.find","description":"Find a contact by email address.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the contact to find."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.delete","description":"Delete a contact by email address.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the contact to delete."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"events.send","description":"Send an event to trigger automations or updates for a contact.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the contact."},"eventName":{"type":"string","description":"Name of the event."},"properties":{"type":"object","description":"Event properties as key-value pairs."}},"required":["email","eventName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"emails.sendTransactional","description":"Send a transactional email to a contact.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the recipient."},"transactionalId":{"type":"string","description":"ID of the transactional email template."},"dataVariables":{"type":"object","description":"Template variables as key-value pairs."}},"required":["email","transactionalId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"lucidya","displayName":"Lucidya","description":"Query Lucidya social listening data, channels, mentions, sentiment, and tickets for AI-powered CX workflows.","auth":{"kind":"api-key","hint":"Lucidya API key from the workspace integrations panel; sent as Authorization: Bearer <key>."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.get","description":"Fetch the authenticated Lucidya workspace metadata (plan, limits, locale).","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"channels.list","description":"List configured social channels (Twitter/X, Instagram, Facebook, TikTok, etc.) under the workspace.","parameters":{"type":"object","properties":{"type":{"type":"string"},"page":{"type":"integer"},"per_page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"channels.get","description":"Fetch a single channel by id.","parameters":{"type":"object","properties":{"channel_id":{"type":"string"}},"required":["channel_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"mentions.search","description":"Search public mentions across configured channels with optional date range, language, sentiment, and channel filters.","parameters":{"type":"object","properties":{"query":{"type":"string"},"channel_id":{"type":"string"},"language":{"type":"string"},"sentiment":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"page":{"type":"integer"},"per_page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"mentions.get","description":"Fetch a single mention by id with full author, content, and sentiment payload.","parameters":{"type":"object","properties":{"mention_id":{"type":"string"}},"required":["mention_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"mentions.assign","description":"Assign a mention to an agent for follow-up in the unified inbox.","parameters":{"type":"object","properties":{"mention_id":{"type":"string"},"agent_id":{"type":"string"}},"required":["mention_id","agent_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"mentions.tag","description":"Add one or more tags to a mention for categorisation and reporting.","parameters":{"type":"object","properties":{"mention_id":{"type":"string"},"tags":{"type":"array"}},"required":["mention_id","tags"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"mentions.reply","description":"Post a public reply to a mention on its originating channel.","parameters":{"type":"object","properties":{"mention_id":{"type":"string"},"message":{"type":"string"},"attachments":{"type":"array"}},"required":["mention_id","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.list","description":"List CX tickets created from mentions, optionally filtered by status, priority, or assignee.","parameters":{"type":"object","properties":{"status":{"type":"string"},"priority":{"type":"string"},"assignee_id":{"type":"string"},"page":{"type":"integer"},"per_page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tickets.get","description":"Fetch a single ticket with its full conversation history.","parameters":{"type":"object","properties":{"ticket_id":{"type":"string"}},"required":["ticket_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tickets.create","description":"Create a CX ticket from a mention or stand-alone subject for manual triage.","parameters":{"type":"object","properties":{"subject":{"type":"string"},"description":{"type":"string"},"mention_id":{"type":"string"},"priority":{"type":"string"},"assignee_id":{"type":"string"},"tags":{"type":"array"}},"required":["subject"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.update","description":"Update ticket status, priority, assignee, or tags.","parameters":{"type":"object","properties":{"ticket_id":{"type":"string"},"status":{"type":"string"},"priority":{"type":"string"},"assignee_id":{"type":"string"},"tags":{"type":"array"}},"required":["ticket_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"analytics.sentiment","description":"Aggregate sentiment breakdown (positive/neutral/negative) for a query and date range.","parameters":{"type":"object","properties":{"query":{"type":"string"},"channel_id":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"granularity":{"type":"string"}},"required":["from","to"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"analytics.volume","description":"Time-series mention volume for a query and date range bucketed by granularity.","parameters":{"type":"object","properties":{"query":{"type":"string"},"channel_id":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"granularity":{"type":"string"}},"required":["from","to"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"analytics.topics","description":"AI-extracted topic clusters with mention counts for a query and date range.","parameters":{"type":"object","properties":{"query":{"type":"string"},"channel_id":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"limit":{"type":"integer"}},"required":["from","to"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reports.list","description":"List saved analytics reports under the workspace.","parameters":{"type":"object","properties":{"page":{"type":"integer"},"per_page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reports.get","description":"Fetch a single saved report definition by id.","parameters":{"type":"object","properties":{"report_id":{"type":"string"}},"required":["report_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"lusha","displayName":"Lusha","description":"Search and enrich B2B contact and company data via the Lusha API.","auth":{"kind":"api-key","hint":"API key from the Lusha dashboard. Sent as the `api_key` header on every request."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"search.companies","description":"Search the Lusha company database. Pass a `requestBody` matching the Lusha prospecting search schema; pagination is appended by the caller.","parameters":{"type":"object","properties":{"requestBody":{"type":"object","description":"JSON body for the company search request (filters, etc.)."},"resultLimit":{"type":"integer","description":"Maximum number of companies to return (Lusha caps at 10000).","minimum":1,"maximum":10000}},"required":["requestBody"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"enrich.companies","description":"Enrich a set of companies previously returned by `search.companies`. Lusha treats enrich as a billed credit-consuming call, so it is modeled as a mutation.","parameters":{"type":"object","properties":{"searchResults":{"type":"object","description":"The search-results envelope returned by `search.companies`."},"resultLimit":{"type":"integer","description":"Maximum number of companies to enrich.","minimum":1,"maximum":10000}},"required":["searchResults"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"search.contacts","description":"Search the Lusha contact database. Pass a `requestBody` matching the Lusha prospecting contact search schema.","parameters":{"type":"object","properties":{"requestBody":{"type":"object","description":"JSON body for the contact search request."},"resultLimit":{"type":"integer","description":"Maximum number of contacts to return (Lusha caps at 10000).","minimum":1,"maximum":10000}},"required":["requestBody"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"enrich.contacts","description":"Enrich a set of contacts previously returned by `search.contacts`. Consumes Lusha credits.","parameters":{"type":"object","properties":{"searchResults":{"type":"object","description":"The search-results envelope returned by `search.contacts`."},"resultLimit":{"type":"integer","description":"Maximum number of contacts to enrich.","minimum":1,"maximum":10000}},"required":["searchResults"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.create","description":"Create a prospect list. Returns the new list id.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Name of the prospect list."},"description":{"type":"string","description":"Optional description."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.add","description":"Add prospects to an existing list.","parameters":{"type":"object","properties":{"listId":{"type":"string","description":"Id of the target prospect list."},"contactIds":{"type":"array","items":{"type":"string"},"description":"Lusha contact ids to add to the list."}},"required":["listId","contactIds"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.delete","description":"Delete a prospect list by id.","parameters":{"type":"object","properties":{"listId":{"type":"string"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"luxury-presence","displayName":"Luxury Presence","description":"Push real-estate buyer/seller leads into Luxury Presence and read leads back out of the agent CRM.","auth":{"kind":"api-key","hint":"Luxury Presence API key issued in the admin console (Settings → Integrations → API). Sent on every request as the X-API-Key header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"leads.create","description":"Create a new lead in the agent`s Luxury Presence CRM. Mirrors the inbound shape consumed by the LP `new.lead` webhook.","parameters":{"type":"object","properties":{"firstName":{"type":"string","description":"Lead first name."},"lastName":{"type":"string","description":"Lead last name."},"email":{"type":"string","format":"email","description":"Lead email address. At least one of email/phone is required by LP."},"phone":{"type":"string","description":"Lead phone number in E.164 form. At least one of email/phone is required by LP."},"message":{"type":"string","description":"Free-form inquiry text from the lead (the body of their first contact)."},"source":{"type":"string","description":"Origin tag recorded against the lead (e.g. \"facebook-ad\", \"open-house\"). Surfaces as `source` in the LP admin."},"tags":{"type":"array","description":"Optional list of LP lead-tag strings to apply at creation time.","items":{"type":"string"}},"propertyInterest":{"type":"object","description":"Optional structured interest hint for the agent.","properties":{"address":{"type":"string"},"listingId":{"type":"string"},"priceMin":{"type":"integer"},"priceMax":{"type":"integer"},"bedrooms":{"type":"integer"},"bathrooms":{"type":"number"}}}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update","description":"Patch an existing LP lead by id (status change, agent reassignment, tag edits).","parameters":{"type":"object","properties":{"leadId":{"type":"string","description":"LP-assigned lead identifier."},"status":{"type":"string","description":"Pipeline status string recognised by the tenant`s LP workflow."},"assignedAgentId":{"type":"string","description":"LP user-id of the agent that should own this lead."},"tags":{"type":"array","description":"Replacement set of tag strings for this lead.","items":{"type":"string"}},"notes":{"type":"string","description":"Free-form private note appended to the lead by this update."}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"leads.list","description":"List leads in the LP CRM, optionally filtered by status, source, or assigned agent.","parameters":{"type":"object","properties":{"status":{"type":"string","description":"Filter by pipeline status."},"source":{"type":"string","description":"Filter by origin tag."},"assignedAgentId":{"type":"string","description":"Filter to leads owned by a specific LP agent."},"updatedSince":{"type":"string","format":"date-time","description":"ISO-8601 lower bound on `updatedAt` for incremental sync."},"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string","description":"Opaque pagination cursor returned by a prior leads.list response."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.get","description":"Fetch a single lead by LP-assigned id.","parameters":{"type":"object","properties":{"leadId":{"type":"string"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"magical-api","displayName":"Magical API","description":"Magical API resume intelligence and LinkedIn enrichment. Parse, review, or score resumes against a job description, and fetch LinkedIn profile or company snapshots by username / website.","auth":{"kind":"api-key","hint":"Magical API key from the magicalapi.com dashboard. Sent in the api-key header on every request."},"category":"crm","defaultConsistencyModel":"advisory","capabilities":[{"name":"resume.parse","description":"Submit a resume URL for structured parsing. Returns either the parsed result or a request_id to poll with the same call when the model is still working.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Direct link to a publicly accessible resume file (PDF, DOC, or DOCX)."},"request_id":{"type":"string","description":"Optional. request_id returned by a prior parse.resume submit; pass it back to fetch the completed result without re-billing the parse."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"resume.review","description":"Run a qualitative review of a resume against an optional job description. Returns either the review result or a request_id to poll with the same call.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Direct link to a publicly accessible resume file (PDF, DOC, or DOCX)."},"job_description":{"type":"string","description":"Optional. Job description text the resume should be reviewed against; omit for an unanchored review."},"request_id":{"type":"string","description":"Optional. request_id returned by a prior resume.review submit; pass it back to fetch the completed result without re-billing the review."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"resume.score","description":"Compute a numeric fit score for a resume against a job description. Returns either the score or a request_id to poll with the same call.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Direct link to a publicly accessible resume file (PDF, DOC, or DOCX)."},"job_description":{"type":"string","description":"Job description text the resume should be scored against."},"request_id":{"type":"string","description":"Optional. request_id returned by a prior resume.score submit; pass it back to fetch the completed result without re-billing the score."}},"required":["url","job_description"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"profile.get","description":"Fetch a LinkedIn profile data snapshot by profile username (the slug from the linkedin.com/in/<username> URL).","parameters":{"type":"object","properties":{"profile_name":{"type":"string","description":"Username slug from the LinkedIn profile URL (e.g. the \"drewstone\" in linkedin.com/in/drewstone)."}},"required":["profile_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.get","description":"Fetch a LinkedIn company data snapshot. Resolves by company_username (LinkedIn company slug), company_name, or company_website; at least one must be supplied.","parameters":{"type":"object","properties":{"company_username":{"type":"string","description":"Company slug from the LinkedIn company URL (e.g. the \"tangle-network\" in linkedin.com/company/tangle-network)."},"company_name":{"type":"string","description":"Free-text company name to resolve."},"company_website":{"type":"string","description":"Company website URL to resolve."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"mailchain","displayName":"Mailchain","description":"Send emails and retrieve authenticated user information via Mailchain.","auth":{"kind":"api-key","hint":"Mailchain API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"user.get","description":"Get authenticated user information.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"email.send","description":"Send an email via Mailchain.","parameters":{"type":"object","properties":{"to":{"type":"string"},"subject":{"type":"string"},"body":{"type":"string"}},"required":["to","subject","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.inbox.list","description":"List messages in the inbox for a Mailchain address. Optional `page` and `limit` paginate results.","parameters":{"type":"object","properties":{"address":{"type":"string","description":"Mailchain address whose inbox to list."},"page":{"type":"number","description":"Optional 1-based page number."},"limit":{"type":"number","description":"Optional page size."}},"required":["address"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"mailchimp","displayName":"Mailchimp","description":"Manage Mailchimp audiences, contacts, and campaigns through the Marketing API v3.0.","auth":{"kind":"oauth2","authorizationUrl":"https://login.mailchimp.com/oauth2/authorize","tokenUrl":"https://login.mailchimp.com/oauth2/token","scopes":[],"clientIdEnv":"MAILCHIMP_OAUTH_CLIENT_ID","clientSecretEnv":"MAILCHIMP_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"lists.list","description":"List Mailchimp audiences (lists) the connected account can access.","parameters":{"type":"object","properties":{"count":{"type":"number","description":"Page size; defaults to 10, max 1000."},"offset":{"type":"number","description":"Number of records to skip."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.get","description":"Read a single Mailchimp audience by list id.","parameters":{"type":"object","properties":{"listId":{"type":"string"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"segments.list","description":"List the segments of a Mailchimp audience. Use a segment id in `campaigns.create` recipients to target a slice — and to carve out a control/holdout slice for measuring true lift.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"count":{"type":"number"},"offset":{"type":"number"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"members.search","description":"List members of a Mailchimp audience.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"count":{"type":"number"},"offset":{"type":"number"},"status":{"type":"string","description":"Filter by subscriber status (subscribed, unsubscribed, cleaned, pending, transactional)."}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"members.get","description":"Read a Mailchimp audience member by subscriber hash (MD5 of the lowercased email).","parameters":{"type":"object","properties":{"listId":{"type":"string"},"subscriberHash":{"type":"string"}},"required":["listId","subscriberHash"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"members.upsert","description":"Idempotent upsert of a Mailchimp audience member; PUT against the subscriber hash creates or updates.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"subscriberHash":{"type":"string","description":"MD5 hex digest of the lowercased email address."},"fields":{"type":"object","description":"Mailchimp member body; typically includes email_address, status_if_new, merge_fields, tags."}},"required":["listId","subscriberHash","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"members.update-tags","description":"Add or remove tags on a Mailchimp audience member.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"subscriberHash":{"type":"string"},"fields":{"type":"object","description":"Body shaped as `{ tags: [{ name, status: \"active\"|\"inactive\" }] }`."}},"required":["listId","subscriberHash","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.list","description":"List Mailchimp campaigns.","parameters":{"type":"object","properties":{"count":{"type":"number"},"offset":{"type":"number"},"status":{"type":"string","description":"save, paused, schedule, sending, sent."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.send","description":"Send a Mailchimp campaign immediately (campaign must already be configured).","parameters":{"type":"object","properties":{"campaignId":{"type":"string"}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"members.delete-permanent","description":"Permanently delete a Mailchimp audience member (irreversible — the member cannot be re-imported under the same email).","parameters":{"type":"object","properties":{"listId":{"type":"string"},"subscriberHash":{"type":"string","description":"MD5 hex digest of the lowercased email address."}},"required":["listId","subscriberHash"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.create","description":"Create a Mailchimp campaign. Body matches the Marketing API v3.0 campaign create schema.","parameters":{"type":"object","properties":{"fields":{"type":"object","description":"Campaign body; typically `{ type: \"regular\", recipients: { list_id }, settings: { subject_line, from_name, reply_to } }`."}},"required":["fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.set-content","description":"Set the content of a draft Mailchimp campaign. `campaigns.create` only makes an empty shell — this puts the generated email body in. Body matches the v3.0 campaign-content schema, e.g. `{ html }` or `{ plain_text }` or `{ template: { id, sections } }`.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"},"fields":{"type":"object","description":"Campaign content body; typically `{ html }`. PUT replaces the content wholesale."}},"required":["campaignId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"reports.list","description":"List campaign performance reports. Each entry carries the open/click/unsubscribe/abuse rates and (when an ecommerce store is connected) revenue — the feedback signal the optimizer reads to learn what worked.","parameters":{"type":"object","properties":{"count":{"type":"number"},"offset":{"type":"number"},"type":{"type":"string","description":"Filter by campaign type, e.g. regular, plaintext, rss."},"since_send_time":{"type":"string","description":"ISO 8601 lower bound on send time, e.g. 2026-06-01T00:00:00Z — read only recent sends."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reports.get","description":"Read the performance report for one sent campaign: opens, clicks, unsubscribes, abuse_reports (the complaint signal), bounces, list_stats, and ecommerce { total_orders, total_spent, total_revenue }. This is the reward+guardrail signal for the optimization loop.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"mailer-lite","displayName":"MailerLite","description":"Manage MailerLite subscribers and groups in the email marketing platform.","auth":{"kind":"api-key","hint":"MailerLite API token (Integrations → API). Sent as Authorization: Bearer."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"subscribers.upsert","description":"Create or update a subscriber by email. Mirrors the activepieces createOrUpdateSubscriber action.","parameters":{"type":"object","properties":{"email":{"type":"string"},"fields":{"type":"object","description":"Custom subscriber field values keyed by MailerLite field name (e.g. name, last_name, company)."},"groups":{"type":"array","items":{"type":"string"},"description":"Group IDs the subscriber should belong to after upsert."},"status":{"type":"string","enum":["active","unsubscribed","unconfirmed","bounced","junk"],"description":"Defaults to active when omitted."},"subscribed_at":{"type":"string","description":"ISO-8601 timestamp recording when consent was captured."},"opted_in_at":{"type":"string","description":"ISO-8601 timestamp recording when double opt-in confirmation occurred."},"ip_address":{"type":"string","description":"IP address recorded at signup."},"optin_ip":{"type":"string","description":"IP address recorded at opt-in confirmation."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.groups.add","description":"Add an existing subscriber to a group. Mirrors the activepieces addSubscriberToGroupAction.","parameters":{"type":"object","properties":{"subscriberId":{"type":"string","description":"MailerLite subscriber ID or email."},"groupId":{"type":"string"}},"required":["subscriberId","groupId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.groups.remove","description":"Remove a subscriber from a group. Mirrors the activepieces removeSubscriberFromGroupAction (destructive).","parameters":{"type":"object","properties":{"subscriberId":{"type":"string","description":"MailerLite subscriber ID or email."},"groupId":{"type":"string"}},"required":["subscriberId","groupId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.find","description":"Look up a subscriber by ID or email. Mirrors the activepieces findSubscriberAction.","parameters":{"type":"object","properties":{"searchValue":{"type":"string","description":"Subscriber ID or email address to resolve."}},"required":["searchValue"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.delete","description":"Delete a subscriber from the account (DELETE /subscribers/{subscriberId}). Removes the record entirely — distinct from setting status=unsubscribed.","parameters":{"type":"object","properties":{"subscriberId":{"type":"string","description":"MailerLite subscriber ID or email."}},"required":["subscriberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.create","description":"Create a regular email campaign (POST /campaigns). Returns the draft campaign ID needed by campaigns.schedule.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Campaign name (internal label)."},"type":{"type":"string","enum":["regular","ab","resend"],"description":"Campaign type; defaults to regular."},"emails":{"type":"array","description":"Per-variant email definitions (subject, from, from_name, content). Regular campaigns expect a single entry.","items":{"type":"object"}},"groups":{"type":"array","items":{"type":"string"},"description":"Group IDs the campaign should target."},"segments":{"type":"array","items":{"type":"string"},"description":"Segment IDs the campaign should target."},"language_id":{"type":"string","description":"Optional MailerLite language ID."}},"required":["name","emails"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.schedule","description":"Schedule (or immediately send) a previously-created draft campaign (POST /campaigns/{campaignId}/schedule). Pass delivery=instant for immediate send or delivery=scheduled with a schedule.date payload.","parameters":{"type":"object","properties":{"campaignId":{"type":"string","description":"Draft campaign ID returned by campaigns.create."},"delivery":{"type":"string","enum":["instant","scheduled","timezone_based"],"description":"Delivery strategy; instant sends immediately, scheduled honors schedule.date."},"schedule":{"type":"object","description":"Schedule payload required when delivery=scheduled or timezone_based. Shape `{ date: ISO8601, timezone_id?: string }`.","properties":{"date":{"type":"string","description":"ISO-8601 send time."},"timezone_id":{"type":"string"}}}},"required":["campaignId","delivery"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"mailercheck","displayName":"Mailercheck","description":"MailerCheck is an easy-to-use email and campaign analysis tool. Anyone using an email service provider can keep their email lists clean and their campaigns deliverable.","auth":{"kind":"api-key","hint":"MailerCheck personal access token from Account → API. Sent as a bearer token."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"verify.an.email.address","description":"Verify the deliverability of an email address. Returns a status (valid, invalid, accept_all, disposable, role, unknown) and detailed checks.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"The email address to verify.","format":"email"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false}]},{"kind":"maileroo","displayName":"Maileroo","description":"Send transactional email through Maileroo (raw send, template send) and verify recipient addresses via the verification API. One connection carries either a domain-scoped Sending Key or an account-scoped Verification Key.","auth":{"kind":"api-key","hint":"Maileroo Sending Key (Domains → your domain → API → Create Sending Key) for /send and /send-template, OR Verification Key (Verifications page) for /check. Sent as the `X-API-Key` header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"email.send","description":"Send a transactional email (POST /send). Provide either `html` or `plain` (or both) — Maileroo rejects payloads with no body. The sender domain must already be verified for the Sending Key in use.","parameters":{"type":"object","properties":{"from":{"type":"string","description":"Verified sender address. Must belong to a domain authorized by the Sending Key."},"from_name":{"type":"string","description":"Optional display name attached to the sender."},"to":{"type":"array","items":{"type":"string","description":"RFC-5322 mailbox. Either bare `user@example.com` or `\"Name\" <user@example.com>`."},"description":"Primary recipient list. At least one entry required."},"cc":{"type":"array","items":{"type":"string","description":"RFC-5322 mailbox. Either bare `user@example.com` or `\"Name\" <user@example.com>`."}},"bcc":{"type":"array","items":{"type":"string","description":"RFC-5322 mailbox. Either bare `user@example.com` or `\"Name\" <user@example.com>`."}},"reply_to":{"type":"string","description":"RFC-5322 mailbox. Either bare `user@example.com` or `\"Name\" <user@example.com>`."},"subject":{"type":"string"},"tags":{"type":"array","items":{"type":"string"},"description":"Tags surfaced in Maileroo analytics and webhook payloads."},"tracking":{"type":"object","description":"Opt-in tracking flags. Omitted fields fall back to the account default.","properties":{"opens":{"type":"boolean"},"clicks":{"type":"boolean"},"unsubscribe":{"type":"boolean"}}},"headers":{"type":"object","description":"Custom RFC-5322 headers (`{ \"X-Campaign\": \"welcome\" }`).","additionalProperties":{"type":"string"}},"attachments":{"type":"array","items":{"type":"object","properties":{"file_name":{"type":"string","description":"Filename shown to the recipient."},"content_type":{"type":"string","description":"MIME type (e.g. application/pdf)."},"content":{"type":"string","description":"Base64-encoded file content."},"inline":{"type":"boolean","description":"If true the attachment renders inline (used with HTML img src=\"cid:...\")."}},"required":["file_name","content_type","content"]}},"html":{"type":"string","description":"HTML body. At least one of html / plain is required."},"plain":{"type":"string","description":"Plain-text body. At least one of html / plain is required."}},"required":["from","to","subject"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"email.send.template","description":"Send an email rendered from a stored Maileroo template (POST /send-template). `template_id` selects the template; `template_data` fills its `{{variable}}` placeholders. Sender, recipients, subject, and tracking flags behave the same as `email.send`.","parameters":{"type":"object","properties":{"from":{"type":"string","description":"Verified sender address. Must belong to a domain authorized by the Sending Key."},"from_name":{"type":"string","description":"Optional display name attached to the sender."},"to":{"type":"array","items":{"type":"string","description":"RFC-5322 mailbox. Either bare `user@example.com` or `\"Name\" <user@example.com>`."},"description":"Primary recipient list. At least one entry required."},"cc":{"type":"array","items":{"type":"string","description":"RFC-5322 mailbox. Either bare `user@example.com` or `\"Name\" <user@example.com>`."}},"bcc":{"type":"array","items":{"type":"string","description":"RFC-5322 mailbox. Either bare `user@example.com` or `\"Name\" <user@example.com>`."}},"reply_to":{"type":"string","description":"RFC-5322 mailbox. Either bare `user@example.com` or `\"Name\" <user@example.com>`."},"subject":{"type":"string"},"tags":{"type":"array","items":{"type":"string"},"description":"Tags surfaced in Maileroo analytics and webhook payloads."},"tracking":{"type":"object","description":"Opt-in tracking flags. Omitted fields fall back to the account default.","properties":{"opens":{"type":"boolean"},"clicks":{"type":"boolean"},"unsubscribe":{"type":"boolean"}}},"headers":{"type":"object","description":"Custom RFC-5322 headers (`{ \"X-Campaign\": \"welcome\" }`).","additionalProperties":{"type":"string"}},"attachments":{"type":"array","items":{"type":"object","properties":{"file_name":{"type":"string","description":"Filename shown to the recipient."},"content_type":{"type":"string","description":"MIME type (e.g. application/pdf)."},"content":{"type":"string","description":"Base64-encoded file content."},"inline":{"type":"boolean","description":"If true the attachment renders inline (used with HTML img src=\"cid:...\")."}},"required":["file_name","content_type","content"]}},"template_id":{"type":"integer","description":"Numeric template identifier (Templates page)."},"template_data":{"type":"object","description":"Key/value map applied to the template. Values are JSON-serialized before substitution.","additionalProperties":true}},"required":["from","to","subject","template_id","template_data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"email.verify","description":"Verify a single email address (POST https://verify.maileroo.net/check). Returns deliverability, role-account, disposable, free-provider, and MX-record signals. Requires the Verification API key — the Sending Key is rejected here.","parameters":{"type":"object","properties":{"email_address":{"type":"string","description":"Mailbox to verify, e.g. `user@example.com`."}},"required":["email_address"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"mailgun","displayName":"Mailgun","description":"Send transactional email through Mailgun and read delivery events, domain stats, and bounce suppressions.","auth":{"kind":"api-key","hint":"Mailgun private API key. Encode `api:<KEY>` as base64 and store that as the credential token — Mailgun authenticates via HTTP Basic."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"messages.send","description":"Send an email via /{domain}/messages. Provide `from`, recipients, subject, and at least one of `text` or `html`.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Mailgun sending domain, e.g. mg.example.com"},"from":{"type":"string"},"to":{"type":"string","description":"Comma-separated recipient addresses."},"cc":{"type":"string"},"bcc":{"type":"string"},"h:Reply-To":{"type":"string"},"subject":{"type":"string"},"text":{"type":"string"},"html":{"type":"string"}},"required":["domain","from","to","subject"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"email.validate","description":"Validate an email address through Mailgun /v4/address/validate. Marked mutation because Mailgun bills per call.","parameters":{"type":"object","properties":{"address":{"type":"string","description":"Email address to validate."},"provider_lookup":{"type":"boolean"}},"required":["address"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"mailing_list.member.add","description":"Add (or upsert) a member on a mailing list. Catalog `upsert=true` maps to the Mailgun `upsert=yes` flag.","parameters":{"type":"object","properties":{"list":{"type":"string","description":"Mailing list address, e.g. devs@mg.example.com."},"address":{"type":"string"},"name":{"type":"string"},"vars":{"type":"string","description":"JSON-encoded custom variables."},"subscribed":{"type":"boolean"},"upsert":{"type":"boolean"}},"required":["list","address"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.list","description":"Page Mailgun events for a domain. Filter by event type, severity, and time window.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"event":{"type":"string","description":"Event filter: delivered, failed, opened, clicked, unsubscribed, complained, accepted."},"severity":{"type":"string","description":"permanent or temporary — only meaningful for failed events."},"begin":{"type":"string","description":"RFC 2822 date."},"end":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":300}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"domain.stats","description":"Aggregate delivery statistics for a domain over a time window.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"event":{"type":"string","description":"Comma-separated event types: accepted,delivered,failed,opened,clicked,unsubscribed,complained."},"duration":{"type":"string","description":"Aggregation window, e.g. 1h, 24h, 7d, 30d."},"start":{"type":"string"},"end":{"type":"string"},"resolution":{"type":"string","description":"hour, day, or month."}},"required":["domain","event"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bounces.list","description":"List bounce suppression records for a domain.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":10000}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"make","displayName":"Make","description":"Run Make (Integromat) scenarios, inspect executions, and POST payloads to scenario webhooks.","auth":{"kind":"api-key","hint":"Make API token from Profile > API. Sent as `Authorization: Token <token>`. Connection also requires the zone host (https://eu1.make.com, https://us1.make.com, etc.) and the teamId."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"scenarios.list","description":"List scenarios in a Make team. teamId is required by the API.","parameters":{"type":"object","properties":{"teamId":{"type":"string"},"organizationId":{"type":"string"},"pg":{"type":"object","description":"Pagination object; use {\"sortBy\":\"name\",\"limit\":50,\"offset\":0}."}},"required":["teamId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scenarios.get","description":"Read a single Make scenario by id.","parameters":{"type":"object","properties":{"scenarioId":{"type":"string"}},"required":["scenarioId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scenarios.run","description":"Manually run a Make scenario. `data` is optional input that flows into the scenario as the trigger bundle.","parameters":{"type":"object","properties":{"scenarioId":{"type":"string"},"data":{"type":"object","description":"Optional trigger bundle."},"responsive":{"type":"boolean","description":"When true, the request waits for the scenario to finish and returns the result inline. When false (default), the call returns an execution id and the agent polls executions.get."}},"required":["scenarioId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"scenarios.activate","description":"Activate a Make scenario so its trigger schedule fires.","parameters":{"type":"object","properties":{"scenarioId":{"type":"string"}},"required":["scenarioId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"scenarios.deactivate","description":"Deactivate a Make scenario.","parameters":{"type":"object","properties":{"scenarioId":{"type":"string"}},"required":["scenarioId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"executions.list","description":"List executions for a scenario.","parameters":{"type":"object","properties":{"scenarioId":{"type":"string"},"pg":{"type":"object","description":"Pagination object."}},"required":["scenarioId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"executions.get","description":"Read a single execution by id, including status and node outputs.","parameters":{"type":"object","properties":{"scenarioId":{"type":"string"},"executionId":{"type":"string"}},"required":["scenarioId","executionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"hooks.trigger","description":"POST a payload to a Make scenario \"Custom Webhook\" trigger URL. `hookId` is the unique hook segment from the webhook URL (the host is set by the connection).","parameters":{"type":"object","properties":{"hookId":{"type":"string"},"payload":{"type":"object"}},"required":["hookId","payload"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"manychat","displayName":"Manychat","description":"Automations for Instagram, WhatsApp, TikTok, and Messenger marketing.","auth":{"kind":"api-key","hint":"Manychat API key (Settings → API)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"subscribers.find.by.custom.field","description":"Find a subscriber by the value of a custom field.","parameters":{"type":"object","properties":{"field_id":{"type":"string"},"field_value":{"type":"string"}},"required":["field_id","field_value"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.find.by.name","description":"Find a subscriber by name.","parameters":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.create","description":"Create a Manychat subscriber.","parameters":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"phone":{"type":"string"},"whatsapp_phone":{"type":"string"},"email":{"type":"string"},"gender":{"type":"string"},"has_opt_in_sms":{"type":"boolean"},"has_opt_in_email":{"type":"boolean"},"consent_phrase":{"type":"string"}},"required":["first_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.send.content","description":"Send content (text or media) to a subscriber across a Manychat-supported platform.","parameters":{"type":"object","properties":{"subscriber_id":{"type":"string"},"platform":{"type":"string"},"content_type":{"type":"string"},"text_content":{"type":"string"},"media_url":{"type":"string"},"message_tag":{"type":"string"}},"required":["subscriber_id","content_type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.custom_field.set","description":"Set the value of a subscriber's custom field.","parameters":{"type":"object","properties":{"subscriber_id":{"type":"string"},"field_id":{"type":"string"},"field_value":{}},"required":["subscriber_id","field_id","field_value"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"subscribers.tag.add","description":"Add a tag to a subscriber.","parameters":{"type":"object","properties":{"subscriber_id":{"type":"string"},"tag_name":{"type":"string"}},"required":["subscriber_id","tag_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.tag.remove","description":"Remove a tag from a subscriber.","parameters":{"type":"object","properties":{"subscriber_id":{"type":"string"},"tag_name":{"type":"string"}},"required":["subscriber_id","tag_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"marketo","displayName":"Marketo","description":"Manage Marketo leads, static lists, and smart campaigns through the REST API v1.","auth":{"kind":"oauth2","grantType":"client_credentials","tokenUrl":"{restEndpoint}/identity/oauth/token","scopes":[],"clientIdEnv":"MARKETO_OAUTH_CLIENT_ID","clientSecretEnv":"MARKETO_OAUTH_CLIENT_SECRET","tokenClientAuthMethod":"client_secret_post","pkce":"unsupported","urlTemplateMetadata":{"restEndpoint":{"kind":"base-url","allowedBaseUrlSuffixes":[".mktorest.com"]}}},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"leads.search","description":"Look up leads by a filter field (e.g. email, id, leadId). Marketo returns up to 300 records per page.","parameters":{"type":"object","properties":{"filterType":{"type":"string","description":"Field name to filter by, e.g. \"email\", \"id\", \"cookie\", or any custom lead field marked searchable."},"filterValues":{"type":"string","description":"Comma-separated list of values to match against filterType (max 300 values)."},"fields":{"type":"string","description":"Comma-separated list of Marketo lead fields to return; omit for the default set."},"batchSize":{"type":"number","description":"Page size, 1-300; defaults to 300."},"nextPageToken":{"type":"string","description":"Paging token from a previous response."}},"required":["filterType","filterValues"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.get","description":"Read a single lead by Marketo lead id.","parameters":{"type":"object","properties":{"leadId":{"type":"string","description":"Marketo internal lead id (integer-as-string)."},"fields":{"type":"string","description":"Comma-separated Marketo lead fields to return."}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.describe","description":"Describe the lead schema — returns the full set of fields available on the lead object including custom fields.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.upsert","description":"Create or update one or more leads. Idempotent on the lookupField (default \"email\"); body shape `{ action, lookupField, input }`.","parameters":{"type":"object","properties":{"action":{"type":"string","description":"Operation: createOnly, updateOnly, createOrUpdate (default), createDuplicate."},"lookupField":{"type":"string","description":"Field Marketo uses to match existing leads (default \"email\")."},"input":{"type":"array","description":"Array of lead records keyed by Marketo field names.","items":{"type":"object"}},"partitionName":{"type":"string","description":"Optional lead partition name when the workspace has multiple partitions."}},"required":["input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.search","description":"List static lists. Filter by id, name, programName, or workspaceName.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Comma-separated list ids to filter."},"name":{"type":"string","description":"Comma-separated list names to filter."},"batchSize":{"type":"number"},"nextPageToken":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.get","description":"Read a single Marketo static list by id.","parameters":{"type":"object","properties":{"listId":{"type":"string"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.add-leads","description":"Add one or more leads to a static list. Body shape `{ input: [{ id }] }`.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"input":{"type":"array","description":"Array of `{ id }` objects referencing Marketo lead ids.","items":{"type":"object","properties":{"id":{"type":"number"}},"required":["id"]}}},"required":["listId","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.remove-leads","description":"Remove one or more leads from a static list. Body shape `{ input: [{ id }] }`.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"input":{"type":"array","description":"Array of `{ id }` objects referencing Marketo lead ids.","items":{"type":"object","properties":{"id":{"type":"number"}},"required":["id"]}}},"required":["listId","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.search","description":"List smart campaigns. Filter by id, name, programName, or workspaceName.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Comma-separated campaign ids."},"name":{"type":"string","description":"Comma-separated campaign names."},"programName":{"type":"string"},"workspaceName":{"type":"string"},"batchSize":{"type":"number"},"nextPageToken":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.trigger","description":"Request execution of a trigger campaign for one or more leads. Body shape `{ input: { leads: [{ id }], tokens?: [{ name, value }] } }`.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"},"input":{"type":"object","description":"Marketo trigger payload: `{ leads: [{ id }], tokens?: [{ name, value }] }`.","properties":{"leads":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"}},"required":["id"]}},"tokens":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}},"required":["name","value"]}}},"required":["leads"]}},"required":["campaignId","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"activities.search","description":"Fetch lead activities since a paging token. Caller obtains the initial token from /rest/v1/activities/pagingtoken.json.","parameters":{"type":"object","properties":{"nextPageToken":{"type":"string","description":"Marketo paging token bounding the activity window."},"activityTypeIds":{"type":"string","description":"Comma-separated activity type ids; up to 10 per call."},"leadIds":{"type":"string","description":"Comma-separated lead ids; up to 30 per call."},"assetIds":{"type":"string"},"listId":{"type":"string"},"batchSize":{"type":"number"}},"required":["nextPageToken","activityTypeIds"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"mastodon","displayName":"Mastodon","description":"Post statuses to a Mastodon instance and read public / account / home timelines. Works against any Mastodon-compatible host (mastodon.social, fosstodon.org, self-hosted) — the instance base URL is per-connection metadata.","auth":{"kind":"api-key","hint":"Mastodon access token issued by the target instance (Preferences → Development → New Application). The instance base URL is captured separately on the connection as the `baseUrl` metadata field."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"post.status","description":"Publish a status (toot) on behalf of the authenticated account. Maps to the activepieces `postStatus` action and the public `POST /api/v1/statuses` endpoint. `media_ids` must already be uploaded via `/api/v2/media`; `visibility` controls public / unlisted / private / direct delivery.","parameters":{"type":"object","properties":{"status":{"type":"string"},"media_ids":{"type":"array","items":{"type":"string"}},"in_reply_to_id":{"type":"string"},"sensitive":{"type":"boolean"},"spoiler_text":{"type":"string"},"visibility":{"type":"string","enum":["public","unlisted","private","direct"]},"language":{"type":"string"},"scheduled_at":{"type":"string"}},"required":["status"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"account.verify","description":"Fetch the authenticated account (`GET /api/v1/accounts/verify_credentials`). Doubles as a credential-health probe and source-of-truth for the connection owner.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"status.get","description":"Read a single status by id (`GET /api/v1/statuses/{id}`). Used to resolve a permalink, fetch counts after posting, or verify a mutation landed.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"timeline.home","description":"Read the authenticated user's home timeline (`GET /api/v1/timelines/home`). Drives \"new status in home timeline\" style triggers via cursor (`max_id` / `since_id`) diffing.","parameters":{"type":"object","properties":{"max_id":{"type":"string"},"since_id":{"type":"string"},"min_id":{"type":"string"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"timeline.public","description":"Read the public (federated) or local timeline (`GET /api/v1/timelines/public`). Set `local=true` for instance-local posts; `only_media=true` to filter to media-bearing statuses.","parameters":{"type":"object","properties":{"local":{"type":"boolean"},"remote":{"type":"boolean"},"only_media":{"type":"boolean"},"max_id":{"type":"string"},"since_id":{"type":"string"},"min_id":{"type":"string"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"account.statuses","description":"List statuses authored by an account (`GET /api/v1/accounts/{id}/statuses`). Backs \"new post by account\" polling and lets flows resolve recent context for a specific user.","parameters":{"type":"object","properties":{"id":{"type":"string"},"exclude_replies":{"type":"boolean"},"exclude_reblogs":{"type":"boolean"},"only_media":{"type":"boolean"},"pinned":{"type":"boolean"},"tagged":{"type":"string"},"max_id":{"type":"string"},"since_id":{"type":"string"},"min_id":{"type":"string"},"limit":{"type":"integer"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"matomo","displayName":"Matomo","description":"Open-source web analytics — add annotations against tracked sites in a self-hosted Matomo install.","auth":{"kind":"api-key","hint":"Matomo \"Token Auth\" from your account profile. The connection must also store the Matomo `domain` (e.g. https://matomo.example.com) and `siteId`."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"annotations.add","description":"Add an annotation to a tracked Matomo site on a given date, optionally marking it starred. Mirrors the catalog `add.annotation` action.","parameters":{"type":"object","properties":{"idSite":{"type":"string","description":"The Matomo site id the annotation will be attached to."},"note":{"type":"string","description":"Annotation text."},"date":{"type":"string","description":"Date for the annotation in YYYY-MM-DD format."},"starred":{"type":"integer","enum":[0,1],"description":"1 to star the annotation, 0 otherwise."}},"required":["idSite","note","date"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"matrix","displayName":"Matrix","description":"Send messages and read room state on a Matrix homeserver.","auth":{"kind":"api-key","hint":"Matrix access token (Element: Settings -> Help & About -> Advanced)."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.whoami","description":"Return the Matrix user id the access token belongs to.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rooms.resolveAlias","description":"Resolve a Matrix room alias (e.g. #room:server.tld) to its canonical room id.","parameters":{"type":"object","properties":{"roomAlias":{"type":"string","description":"Room alias including the leading #."}},"required":["roomAlias"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rooms.joined","description":"List the room ids the authenticated user is currently joined to.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rooms.members","description":"List the members of a Matrix room.","parameters":{"type":"object","properties":{"roomId":{"type":"string"}},"required":["roomId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rooms.state","description":"Read the full state of a Matrix room.","parameters":{"type":"object","properties":{"roomId":{"type":"string"}},"required":["roomId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"send.message","description":"Send a message event into a Matrix room. txnId MUST be a client-generated transaction id; reusing the same txnId for the same room is a no-op on the homeserver.","parameters":{"type":"object","properties":{"roomId":{"type":"string","description":"Matrix room id (already resolved from any alias)."},"txnId":{"type":"string","description":"Client-side dedupe key; pass the idempotency token."},"body":{"type":"string","description":"Message body (plain text)."},"msgtype":{"type":"string","description":"Matrix msgtype, defaults to m.text."},"format":{"type":"string","description":"Optional org.matrix.custom.html when sending formatted_body."},"formatted_body":{"type":"string","description":"Optional HTML body when format=org.matrix.custom.html."}},"required":["roomId","txnId","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rooms.join","description":"Join a room by id or alias.","parameters":{"type":"object","properties":{"roomIdOrAlias":{"type":"string"}},"required":["roomIdOrAlias"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rooms.leave","description":"Leave a Matrix room.","parameters":{"type":"object","properties":{"roomId":{"type":"string"}},"required":["roomId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"mattermost","displayName":"Mattermost","description":"Post messages to Mattermost channels via a bot token on a self-hosted or cloud workspace.","auth":{"kind":"api-key","hint":"Mattermost bot personal access token; sent as `Authorization: Bearer <token>`. The workspace URL is held alongside the token in connection metadata."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"send.message","description":"Send a message (post) to a Mattermost channel.","parameters":{"type":"object","properties":{"channel_id":{"type":"string","description":"The channel to send the message to. Found in the channel info dialog near the start-call button."},"message":{"type":"string","description":"The text of the message to send."},"root_id":{"type":"string","description":"Optional post id to reply to as a thread."},"props":{"type":"object","description":"Optional post properties (e.g. attachments, override_username)."}},"required":["channel_id","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update_post","description":"Edit an existing post (replace its message text). Mattermost rewrites the post in place and marks it `edit_at`.","parameters":{"type":"object","properties":{"post_id":{"type":"string","description":"The id of the post to update."},"message":{"type":"string","description":"The new text of the post."}},"required":["post_id","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"delete_post","description":"Soft-delete a post by id. Mattermost marks the post as deleted; the row remains for audit.","parameters":{"type":"object","properties":{"post_id":{"type":"string","description":"The id of the post to delete."}},"required":["post_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"add_reaction","description":"Add an emoji reaction to a post on behalf of `user_id`. Mattermost dedupes the (user, post, emoji) triple server-side.","parameters":{"type":"object","properties":{"user_id":{"type":"string","description":"The id of the user adding the reaction (typically the bot user id)."},"post_id":{"type":"string","description":"The id of the post being reacted to."},"emoji_name":{"type":"string","description":"Emoji name without colons, e.g. \"thumbsup\"."}},"required":["user_id","post_id","emoji_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"mautic","displayName":"Mautic","description":"Manage Mautic contacts, companies, and segments in the open-source marketing automation platform.","auth":{"kind":"api-key","hint":"Mautic Basic Auth credentials (username + password) with API access enabled. Connection metadata must include the install baseUrl (e.g. https://mautic.example.com)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.search","description":"Search Mautic contacts. Supports the Mautic `search` query syntax (e.g. \"email:user@example.com\").","parameters":{"type":"object","properties":{"search":{"type":"string"},"start":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":200},"orderBy":{"type":"string"},"orderByDir":{"type":"string","enum":["asc","desc"]},"published":{"type":"boolean"},"minimal":{"type":"boolean"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.get","description":"Read a single Mautic contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"integer"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create a Mautic contact. Standard fields (email, firstname, lastname) and any custom field aliases may be supplied at the top level.","parameters":{"type":"object","properties":{"contact":{"type":"object","properties":{"email":{"type":"string","format":"email"},"firstname":{"type":"string"},"lastname":{"type":"string"},"company":{"type":"string"},"position":{"type":"string"},"phone":{"type":"string"},"mobile":{"type":"string"},"address1":{"type":"string"},"address2":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zipcode":{"type":"string"},"country":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"ipAddress":{"type":"string"},"owner":{"type":"integer"}}}},"required":["contact"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update (PATCH) a Mautic contact by id. Only the supplied fields are modified; omit a field to leave it untouched.","parameters":{"type":"object","properties":{"contactId":{"type":"integer"},"contact":{"type":"object","properties":{"email":{"type":"string","format":"email"},"firstname":{"type":"string"},"lastname":{"type":"string"},"company":{"type":"string"},"position":{"type":"string"},"phone":{"type":"string"},"mobile":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"owner":{"type":"integer"}}}},"required":["contactId","contact"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.delete","description":"Delete a Mautic contact by id.","parameters":{"type":"object","properties":{"contactId":{"type":"integer"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.segments.add","description":"Add a contact to a segment (list).","parameters":{"type":"object","properties":{"contactId":{"type":"integer"},"segmentId":{"type":"integer"}},"required":["contactId","segmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.segments.remove","description":"Remove a contact from a segment (list).","parameters":{"type":"object","properties":{"contactId":{"type":"integer"},"segmentId":{"type":"integer"}},"required":["contactId","segmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"segments.search","description":"List or search Mautic segments (contact lists).","parameters":{"type":"object","properties":{"search":{"type":"string"},"start":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":200},"orderBy":{"type":"string"},"orderByDir":{"type":"string","enum":["asc","desc"]},"published":{"type":"boolean"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"segments.get","description":"Read a single Mautic segment by id.","parameters":{"type":"object","properties":{"segmentId":{"type":"integer"}},"required":["segmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.search","description":"List or search Mautic companies.","parameters":{"type":"object","properties":{"search":{"type":"string"},"start":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":200},"orderBy":{"type":"string"},"orderByDir":{"type":"string","enum":["asc","desc"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.get","description":"Read a single Mautic company by id.","parameters":{"type":"object","properties":{"companyId":{"type":"integer"}},"required":["companyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.create","description":"Create a Mautic company record.","parameters":{"type":"object","properties":{"company":{"type":"object","properties":{"companyname":{"type":"string"},"companyemail":{"type":"string","format":"email"},"companyaddress1":{"type":"string"},"companyaddress2":{"type":"string"},"companycity":{"type":"string"},"companystate":{"type":"string"},"companyzipcode":{"type":"string"},"companycountry":{"type":"string"},"companyphone":{"type":"string"},"companywebsite":{"type":"string"},"companyindustry":{"type":"string"},"companyfax":{"type":"string"},"companyannual_revenue":{"type":"number"},"companynumber_of_employees":{"type":"integer"},"companydescription":{"type":"string"}},"required":["companyname"]}},"required":["company"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"companies.update","description":"Update a Mautic company by id.","parameters":{"type":"object","properties":{"companyId":{"type":"integer"},"company":{"type":"object","properties":{"companyname":{"type":"string"},"companyemail":{"type":"string","format":"email"},"companyphone":{"type":"string"},"companywebsite":{"type":"string"},"companyindustry":{"type":"string"},"companydescription":{"type":"string"}}}},"required":["companyId","company"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"medullar","displayName":"Medullar","description":"AI-powered discovery & insight platform that acts as your extended digital mind.","auth":{"kind":"api-key","hint":"Medullar API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"spaces.list","description":"List all spaces.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"spaces.create","description":"Create a new space.","parameters":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"spaces.rename","description":"Rename an existing space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"}},"required":["spaceId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"spaces.delete","description":"Delete a space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"}},"required":["spaceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.add","description":"Add a record to a space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"content":{"type":"string"},"url":{"type":"string"}},"required":["spaceId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"ask.space","description":"Ask a question to a space with AI analysis.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"message":{"type":"string"},"reasoning":{"type":"boolean"}},"required":["spaceId","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"meetgeek-ai","displayName":"MeetGeek","description":"AI meeting assistant: list and inspect recorded meetings, pull transcripts, highlights, and summary insights, and upload new recordings for transcription.","auth":{"kind":"api-key","hint":"MeetGeek API key — sent as `Authorization: Bearer <key>` against https://api.meetgeek.ai/v1."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"meetings.list","description":"List past meetings belonging to a MeetGeek team.","parameters":{"type":"object","properties":{"teamId":{"type":"string","description":"MeetGeek team id."}},"required":["teamId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"meetings.get","description":"Return metadata for a single meeting by id (participants, host, duration, summary).","parameters":{"type":"object","properties":{"meetingId":{"type":"string","description":"The MeetGeek meeting id."}},"required":["meetingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"meetings.transcript","description":"Return the time-coded transcript for a meeting. The response is an array of utterances with speaker, start/end offsets, and text.","parameters":{"type":"object","properties":{"meetingId":{"type":"string","description":"The MeetGeek meeting id."}},"required":["meetingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"meetings.highlights","description":"Return the AI-generated highlights (key moments, action items, decisions) for a single meeting.","parameters":{"type":"object","properties":{"meetingId":{"type":"string","description":"The MeetGeek meeting id."}},"required":["meetingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"meetings.summaryInsights","description":"Return the summary and AI-generated insights for one MeetGeek meeting.","parameters":{"type":"object","properties":{"meetingId":{"type":"string","description":"The MeetGeek meeting id."}},"required":["meetingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"recordings.upload","description":"Submit a recording for asynchronous transcription. MeetGeek fetches `downloadUrl` directly, so the URL must be publicly reachable (e.g. an S3 signed link). The response carries the queued meeting id you can poll via `meetings.get`.","parameters":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Publicly reachable URL MeetGeek will GET to fetch the audio/video file. Required."},"languageCode":{"type":"string","description":"BCP-47 language code (e.g. en-US, es-ES, fr-FR)."},"templateName":{"type":"string","description":"Optional MeetGeek meeting template name used to drive analysis."}},"required":["downloadUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"mem","displayName":"Mem","description":"Capture and organize notes in Mem.ai — append raw content as mems and create or delete structured notes.","auth":{"kind":"api-key","hint":"Mem.ai API key from the Mem integrations settings."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"mem.create","description":"Append raw content into the Mem inbox. Optional instructions and context guide how Mem processes the input.","parameters":{"type":"object","properties":{"input":{"type":"string"},"instructions":{"type":"string"},"context":{"type":"string"}},"required":["input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.create","description":"Create a Markdown note in Mem. The first line of content is treated as the title. Optional id assigns a UUID and add_to_collections attaches the note to collections.","parameters":{"type":"object","properties":{"content":{"type":"string"},"id":{"type":"string"},"add_to_collections":{"type":"object"}},"required":["content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.delete","description":"Delete a note from Mem by its ID.","parameters":{"type":"object","properties":{"note_id":{"type":"string"}},"required":["note_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"messagebird","displayName":"Bird","description":"Send SMS messages and list message history via the Bird (MessageBird) channel API.","auth":{"kind":"api-key","hint":"Bird API Access Key from Settings > Security > Access Keys."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"send.sms","description":"Send an SMS message through a Bird SMS channel.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string","description":"Bird workspace identifier."},"channelId":{"type":"string","description":"SMS channel identifier within the workspace."},"recipient":{"type":"string","description":"E.164 phone number to send the message to."},"message":{"type":"string","description":"Body of the SMS message."},"reference":{"type":"string","description":"Caller-supplied identifier echoed on delivery receipts."},"scheduledFor":{"type":"string","description":"ISO-8601 UTC timestamp; omit to send immediately."}},"required":["workspaceId","channelId","recipient","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"list.messages","description":"List messages sent through a Bird SMS channel within a time window.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string","description":"Bird workspace identifier."},"channelId":{"type":"string","description":"SMS channel identifier within the workspace."},"status":{"type":"string","description":"Filter messages by status (e.g. accepted, sent, delivered, failed)."},"startAt":{"type":"string","description":"ISO-8601 UTC start of the lookup window."},"endAt":{"type":"string","description":"ISO-8601 UTC end of the lookup window; must be within 7 days of startAt."},"pageToken":{"type":"string","description":"Pagination token returned by a prior page; omit on the first call."}},"required":["workspaceId","channelId","status","startAt","endAt"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"metabase","displayName":"Metabase","description":"Query Metabase questions, dashboards, and generate reports with preview rendering.","auth":{"kind":"api-key","hint":"Metabase API key from settings -> authentication -> API keys"},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"questions.get","description":"Retrieve a Metabase question (saved query) by ID.","parameters":{"type":"object","properties":{"questionId":{"type":"string","description":"Metabase question ID"}},"required":["questionId"]},"requiredScopes":[],"class":"read"},{"name":"questions.preview","description":"Get a PNG preview image of a Metabase question.","parameters":{"type":"object","properties":{"questionId":{"type":"string","description":"Metabase question ID"},"waitTime":{"type":"integer","description":"Seconds to wait for rendering (1-10)","minimum":1,"maximum":10}},"required":["questionId","waitTime"]},"requiredScopes":[],"class":"read"},{"name":"dashboards.get_questions","description":"Retrieve all questions on a Metabase dashboard.","parameters":{"type":"object","properties":{"dashboardId":{"type":"string","description":"Metabase dashboard ID"}},"required":["dashboardId"]},"requiredScopes":[],"class":"read"},{"name":"questions.graph_render","description":"Get a rendered graph/visualization for a question as PNG.","parameters":{"type":"object","properties":{"questionId":{"type":"string","description":"Metabase question ID"},"graphName":{"type":"string","description":"Graph name (without file extension)"}},"required":["questionId","graphName"]},"requiredScopes":[],"class":"read"},{"name":"questions.embed","description":"Enable embedding for a question with optional parameters.","parameters":{"type":"object","properties":{"questionId":{"type":"string","description":"Metabase question ID"},"enabled":{"type":"boolean","description":"Enable or disable embedding"},"parameters":{"type":"object","description":"Dashboard parameters to apply (slug -> value)"}},"required":["questionId","enabled"]},"requiredScopes":[],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"microsoft-365-people","displayName":"Microsoft 365 People","description":"Manage Microsoft 365 personal contacts and contact folders via Microsoft Graph.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["offline_access","Contacts.ReadWrite","User.Read"],"clientIdEnv":"MS_OAUTH_CLIENT_ID","clientSecretEnv":"MS_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.contact","description":"Create a personal contact in the signed-in user's default contacts folder, or in a specific folder when contactFolderId is supplied.","parameters":{"type":"object","properties":{"contactFolderId":{"type":"string"},"givenName":{"type":"string"},"surname":{"type":"string"},"displayName":{"type":"string"},"middleName":{"type":"string"},"nickName":{"type":"string"},"title":{"type":"string"},"companyName":{"type":"string"},"department":{"type":"string"},"jobTitle":{"type":"string"},"emailAddresses":{"type":"array","items":{"type":"object"}},"businessPhones":{"type":"array","items":{"type":"string"}},"homePhones":{"type":"array","items":{"type":"string"}},"mobilePhone":{"type":"string"},"businessAddress":{"type":"object"},"homeAddress":{"type":"object"},"otherAddress":{"type":"object"},"personalNotes":{"type":"string"},"birthday":{"type":"string"}}},"requiredScopes":["Contacts.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.contact.folder","description":"Create a new contact folder under the user's default contacts folder, or as a child of parentFolderId when supplied.","parameters":{"type":"object","properties":{"displayName":{"type":"string"},"parentFolderId":{"type":"string"}},"required":["displayName"]},"requiredScopes":["Contacts.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"delete.contact","description":"Delete a personal contact by id from the signed-in mailbox.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":["Contacts.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.contact.folder","description":"Read a contact folder by id, optionally narrowing fields via $select.","parameters":{"type":"object","properties":{"contactFolderId":{"type":"string"},"$select":{"type":"string"}},"required":["contactFolderId"]},"requiredScopes":["Contacts.ReadWrite"],"class":"read"},{"name":"search.contacts","description":"Search the signed-in user contacts using OData $search/$filter with optional $top, $select, and $orderby.","parameters":{"type":"object","properties":{"$search":{"type":"string"},"$filter":{"type":"string"},"$select":{"type":"string"},"$top":{"type":"integer"},"$orderby":{"type":"string"},"contactFolderId":{"type":"string"}}},"requiredScopes":["Contacts.ReadWrite"],"class":"read"},{"name":"update.contact","description":"Patch fields on an existing personal contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"patch":{"type":"object"}},"required":["contactId","patch"]},"requiredScopes":["Contacts.ReadWrite"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"microsoft-365-planner","displayName":"Microsoft 365 Planner","description":"Create, read, update, and delete Microsoft 365 Planner plans, buckets, and tasks via Microsoft Graph.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["offline_access","Tasks.ReadWrite","Group.ReadWrite.All"],"clientIdEnv":"MS_OAUTH_CLIENT_ID","clientSecretEnv":"MS_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.plan","description":"Create a new Planner plan owned by a Microsoft 365 group. The owner must be a group id with a Planner-enabled group container.","parameters":{"type":"object","properties":{"owner":{"type":"string","description":"Microsoft 365 group id that will own the plan."},"title":{"type":"string","description":"Display title for the plan."}},"required":["owner","title"]},"requiredScopes":["Tasks.ReadWrite","Group.ReadWrite.All"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"find.aplan","description":"Read a Planner plan by id.","parameters":{"type":"object","properties":{"planId":{"type":"string"}},"required":["planId"]},"requiredScopes":["Tasks.ReadWrite"],"class":"read"},{"name":"update.plan","description":"Patch fields on a Planner plan. The caller must thread the resource @odata.etag through the If-Match header (handled by the optimistic-read-verify CAS path).","parameters":{"type":"object","properties":{"planId":{"type":"string"},"patch":{"type":"object","properties":{"title":{"type":"string"}}}},"required":["planId","patch"]},"requiredScopes":["Tasks.ReadWrite"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.bucket","description":"Create a Planner bucket inside an existing plan. orderHint controls placement among siblings; omit to let Graph assign a default.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Display name for the bucket."},"planId":{"type":"string","description":"Plan id this bucket belongs to."},"orderHint":{"type":"string","description":"Optional Planner orderHint string controlling placement among sibling buckets."}},"required":["name","planId"]},"requiredScopes":["Tasks.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"get.abucket","description":"Read a Planner bucket by id.","parameters":{"type":"object","properties":{"bucketId":{"type":"string"}},"required":["bucketId"]},"requiredScopes":["Tasks.ReadWrite"],"class":"read"},{"name":"update.bucket","description":"Patch fields on a Planner bucket. Requires the bucket @odata.etag in If-Match (optimistic-read-verify).","parameters":{"type":"object","properties":{"bucketId":{"type":"string"},"patch":{"type":"object","properties":{"name":{"type":"string"},"orderHint":{"type":"string"}}}},"required":["bucketId","patch"]},"requiredScopes":["Tasks.ReadWrite"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"delete.bucket","description":"Delete a Planner bucket. Requires the bucket @odata.etag in If-Match (etag-if-match).","parameters":{"type":"object","properties":{"bucketId":{"type":"string"}},"required":["bucketId"]},"requiredScopes":["Tasks.ReadWrite"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"create.task","description":"Create a Planner task inside a plan (and optionally a specific bucket). assignments is a map keyed by user id whose value carries the assignment payload.","parameters":{"type":"object","properties":{"planId":{"type":"string"},"bucketId":{"type":"string"},"title":{"type":"string"},"assignments":{"type":"object","description":"Map of userId → { @odata.type: \"microsoft.graph.plannerAssignment\", orderHint }."},"dueDateTime":{"type":"string","description":"ISO-8601 timestamp."},"startDateTime":{"type":"string","description":"ISO-8601 timestamp."},"priority":{"type":"integer","minimum":0,"maximum":10,"description":"Planner priority 0–10 (1=urgent, 3=important, 5=medium, 9=low)."},"percentComplete":{"type":"integer","minimum":0,"maximum":100}},"required":["planId","title"]},"requiredScopes":["Tasks.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"find.task","description":"Read a Planner task by id.","parameters":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"]},"requiredScopes":["Tasks.ReadWrite"],"class":"read"},{"name":"update.task","description":"Patch fields on a Planner task. Requires the task @odata.etag in If-Match (optimistic-read-verify).","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"patch":{"type":"object","properties":{"title":{"type":"string"},"bucketId":{"type":"string"},"assignments":{"type":"object"},"dueDateTime":{"type":"string"},"startDateTime":{"type":"string"},"priority":{"type":"integer","minimum":0,"maximum":10},"percentComplete":{"type":"integer","minimum":0,"maximum":100},"orderHint":{"type":"string"},"assigneePriority":{"type":"string"}}}},"required":["taskId","patch"]},"requiredScopes":["Tasks.ReadWrite"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"delete.task","description":"Delete a Planner task. Requires the task @odata.etag in If-Match (etag-if-match).","parameters":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"]},"requiredScopes":["Tasks.ReadWrite"],"class":"mutation","cas":"etag-if-match","externalEffect":true}]},{"kind":"microsoft-calendar","displayName":"Microsoft Calendar (Outlook 365)","description":"Let your agent check availability and book against an Outlook / Microsoft 365 calendar. Conflict-resolved via Graph's getSchedule pre-flight; etag-guarded on event updates.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["https://graph.microsoft.com/Calendars.ReadWrite","offline_access"],"clientIdEnv":"MS_OAUTH_CLIENT_ID","clientSecretEnv":"MS_OAUTH_CLIENT_SECRET"},"category":"calendar","defaultConsistencyModel":"authoritative","capabilities":[{"name":"list_availability","class":"read","description":"Look up busy windows on the connected Outlook calendar between timeMin and timeMax (RFC3339 timestamps).","parameters":{"type":"object","properties":{"timeMin":{"type":"string","description":"ISO8601 lower bound (inclusive)"},"timeMax":{"type":"string","description":"ISO8601 upper bound (exclusive)"}},"required":["timeMin","timeMax"]}},{"name":"book_slot","class":"mutation","description":"Reserve a time window on the connected Outlook calendar. Returns conflict + alternatives if the slot is no longer free.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"start":{"type":"string","description":"ISO8601 start time"},"end":{"type":"string","description":"ISO8601 end time"},"summary":{"type":"string","description":"Event title (subject)"},"description":{"type":"string","description":"Optional event body"},"attendees":{"type":"array","items":{"type":"string","description":"attendee email"}},"calendarId":{"type":"string","description":"Target calendar id; defaults to the user's primary calendar (/me/events) when omitted."},"location":{"type":"object","description":"Graph location resource, e.g. { displayName: \"Room 1\" }."},"recurrence":{"type":"object","description":"Graph patternedRecurrence resource ({ pattern, range })."},"isOnlineMeeting":{"type":"boolean","description":"Provision an online meeting (Teams) for the event."},"onlineMeetingProvider":{"type":"string","description":"Online meeting provider, e.g. 'teamsForBusiness'."},"reminderMinutesBeforeStart":{"type":"integer","description":"Minutes before start to fire the reminder."},"isAllDay":{"type":"boolean","description":"Mark the event as all-day (start/end must be midnight-aligned)."},"categories":{"type":"array","items":{"type":"string","description":"Outlook category name"}},"importance":{"type":"string","description":"Event importance: 'low' | 'normal' | 'high'."}},"required":["start","end","summary"]}},{"name":"delete_event","class":"mutation","description":"Delete an event by id from the connected Outlook calendar. Graph returns 204 on success; a re-delete of a missing event surfaces as 404 mapped to an idempotent tombstone. Honors If-Match against the event etag when the caller supplies expectedEtag.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"eventId":{"type":"string","description":"Graph event id to delete."}},"required":["eventId"]}},{"name":"list_events","class":"read","description":"List actual event objects on a calendar with OData paging/filtering ($top, $skip, $filter, $select, $orderby, $search). Targets the user's primary calendar (/me/events) unless calendarId is supplied. Distinct from list_availability, which returns busy windows.","parameters":{"type":"object","properties":{"calendarId":{"type":"string","description":"Calendar id; defaults to the user's primary calendar when omitted."},"$top":{"type":"integer","description":"Max events to return (OData page size)."},"$skip":{"type":"integer","description":"Number of events to skip (OData paging offset)."},"$filter":{"type":"string","description":"OData $filter expression."},"$select":{"type":"string","description":"Comma-separated event fields to project."},"$orderby":{"type":"string","description":"OData $orderby expression."},"$search":{"type":"string","description":"OData $search query."}}}}]},{"kind":"microsoft-dynamics-365-business-central","displayName":"Microsoft Dynamics 365 Business Central","description":"Read, create, update, delete, and search records in Microsoft Dynamics 365 Business Central — customers, vendors, items, sales invoices, sales orders, journal lines, and any custom OData entity the tenant exposes through the BC v2.0 API.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["https://api.businesscentral.dynamics.com/Financials.ReadWrite.All","https://api.businesscentral.dynamics.com/user_impersonation","offline_access"],"clientIdEnv":"BUSINESS_CENTRAL_OAUTH_CLIENT_ID","clientSecretEnv":"BUSINESS_CENTRAL_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.create","description":"Create a record in a Business Central entity set scoped to a company (Activepieces: Create Record).","parameters":{"type":"object","properties":{"companyId":{"type":"string","description":"Business Central company id (GUID). Required for every record operation because the API namespaces entities under companies({companyId})."},"entitySetName":{"type":"string","description":"OData entity set name on the Business Central API — e.g. customers, vendors, items, salesInvoices, salesOrders, journalLines, dimensions, generalLedgerEntries. Standard and custom entities both work."},"fields":{"type":"object","description":"Field name -> value payload. Field names match the Business Central entity schema (camelCase, e.g. displayName, number, lineType)."},"tenantId":{"type":"string","description":"Azure AD tenant id (GUID) hosting the Business Central environment. Stored on the data source as metadata.tenantId at connect time."},"environment":{"type":"string","description":"Business Central environment name (e.g. \"production\" or \"Sandbox-EU\"). Stored on the data source as metadata.environment at connect time."}},"required":["companyId","entitySetName","fields"]},"requiredScopes":["https://api.businesscentral.dynamics.com/Financials.ReadWrite.All"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.delete","description":"Delete a record from a Business Central entity set by id (Activepieces: Delete Record).","parameters":{"type":"object","properties":{"companyId":{"type":"string","description":"Business Central company id (GUID). Required for every record operation because the API namespaces entities under companies({companyId})."},"entitySetName":{"type":"string","description":"OData entity set name on the Business Central API — e.g. customers, vendors, items, salesInvoices, salesOrders, journalLines, dimensions, generalLedgerEntries. Standard and custom entities both work."},"recordId":{"type":"string","description":"Business Central record id (GUID) of the entity to delete."},"tenantId":{"type":"string","description":"Azure AD tenant id (GUID) hosting the Business Central environment. Stored on the data source as metadata.tenantId at connect time."},"environment":{"type":"string","description":"Business Central environment name (e.g. \"production\" or \"Sandbox-EU\"). Stored on the data source as metadata.environment at connect time."}},"required":["companyId","entitySetName","recordId"]},"requiredScopes":["https://api.businesscentral.dynamics.com/Financials.ReadWrite.All"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"records.get","description":"Read a single Business Central record by id (Activepieces: Get Record). Returns the entity payload plus its `@odata.etag` for downstream CAS updates.","parameters":{"type":"object","properties":{"companyId":{"type":"string","description":"Business Central company id (GUID). Required for every record operation because the API namespaces entities under companies({companyId})."},"entitySetName":{"type":"string","description":"OData entity set name on the Business Central API — e.g. customers, vendors, items, salesInvoices, salesOrders, journalLines, dimensions, generalLedgerEntries. Standard and custom entities both work."},"recordId":{"type":"string","description":"Business Central record id (GUID) of the entity to read."},"expand":{"type":"string","description":"Optional OData $expand expression for navigation properties (e.g. \"dimensionSetLines,salesInvoiceLines\")."},"tenantId":{"type":"string","description":"Azure AD tenant id (GUID) hosting the Business Central environment. Stored on the data source as metadata.tenantId at connect time."},"environment":{"type":"string","description":"Business Central environment name (e.g. \"production\" or \"Sandbox-EU\"). Stored on the data source as metadata.environment at connect time."}},"required":["companyId","entitySetName","recordId"]},"requiredScopes":["https://api.businesscentral.dynamics.com/Financials.ReadWrite.All"],"class":"read"},{"name":"records.search","description":"Search records in a Business Central entity set with OData $filter / $top / $orderby (Activepieces: Search Records).","parameters":{"type":"object","properties":{"companyId":{"type":"string","description":"Business Central company id (GUID). Required for every record operation because the API namespaces entities under companies({companyId})."},"entitySetName":{"type":"string","description":"OData entity set name on the Business Central API — e.g. customers, vendors, items, salesInvoices, salesOrders, journalLines, dimensions, generalLedgerEntries. Standard and custom entities both work."},"filter":{"type":"string","description":"OData $filter expression, e.g. \"displayName eq 'Adatum Corporation'\" or \"totalAmountIncludingTax gt 1000\"."},"orderby":{"type":"string","description":"OData $orderby expression, e.g. \"lastModifiedDateTime desc\"."},"top":{"type":"integer","minimum":1,"maximum":20000,"description":"OData $top page size. BC caps the page at 20,000 rows."},"skip":{"type":"integer","minimum":0,"description":"OData $skip offset for paging."},"select":{"type":"string","description":"Optional OData $select to narrow the projection, e.g. \"id,number,displayName\"."},"tenantId":{"type":"string","description":"Azure AD tenant id (GUID) hosting the Business Central environment. Stored on the data source as metadata.tenantId at connect time."},"environment":{"type":"string","description":"Business Central environment name (e.g. \"production\" or \"Sandbox-EU\"). Stored on the data source as metadata.environment at connect time."}},"required":["companyId","entitySetName"]},"requiredScopes":["https://api.businesscentral.dynamics.com/Financials.ReadWrite.All"],"class":"read"},{"name":"records.update","description":"Patch a Business Central record by id (Activepieces: Update Record). Only the supplied fields are written; everything else is preserved.","parameters":{"type":"object","properties":{"companyId":{"type":"string","description":"Business Central company id (GUID). Required for every record operation because the API namespaces entities under companies({companyId})."},"entitySetName":{"type":"string","description":"OData entity set name on the Business Central API — e.g. customers, vendors, items, salesInvoices, salesOrders, journalLines, dimensions, generalLedgerEntries. Standard and custom entities both work."},"recordId":{"type":"string","description":"Business Central record id (GUID) of the entity to update."},"fields":{"type":"object","description":"Field name -> value patch payload. Field names match the Business Central entity schema."},"tenantId":{"type":"string","description":"Azure AD tenant id (GUID) hosting the Business Central environment. Stored on the data source as metadata.tenantId at connect time."},"environment":{"type":"string","description":"Business Central environment name (e.g. \"production\" or \"Sandbox-EU\"). Stored on the data source as metadata.environment at connect time."}},"required":["companyId","entitySetName","recordId","fields"]},"requiredScopes":["https://api.businesscentral.dynamics.com/Financials.ReadWrite.All"],"class":"mutation","cas":"etag-if-match","externalEffect":true}]},{"kind":"microsoft-dynamics-crm","displayName":"Microsoft Dynamics CRM","description":"Read, create, update, and delete records in Microsoft Dynamics 365 (Dataverse Web API v9.2).","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["offline_access","https://globaldisco.crm.dynamics.com/user_impersonation"],"clientIdEnv":"MICROSOFT_DYNAMICS_CRM_OAUTH_CLIENT_ID","clientSecretEnv":"MICROSOFT_DYNAMICS_CRM_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.get","description":"Read a single record from a Dataverse entity set by GUID. entitySet is the pluralized logical name (e.g. \"accounts\", \"contacts\", \"leads\", \"opportunities\").","parameters":{"type":"object","properties":{"entitySet":{"type":"string"},"recordId":{"type":"string"},"$select":{"type":"string"},"$expand":{"type":"string"}},"required":["entitySet","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.create","description":"Create a new record in a Dataverse entity set. fields is an OData JSON body keyed by logical attribute names; lookups are written as `@odata.bind` references.","parameters":{"type":"object","properties":{"entitySet":{"type":"string"},"fields":{"type":"object"}},"required":["entitySet","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Patch attributes on an existing record. Dataverse PATCH against an entity-set key performs an upsert; pass If-Match via the cas policy when update-only semantics are required.","parameters":{"type":"object","properties":{"entitySet":{"type":"string"},"recordId":{"type":"string"},"fields":{"type":"object"}},"required":["entitySet","recordId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"records.delete","description":"Delete a record from a Dataverse entity set by GUID.","parameters":{"type":"object","properties":{"entitySet":{"type":"string"},"recordId":{"type":"string"}},"required":["entitySet","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"microsoft-excel-365","displayName":"Microsoft Excel 365","description":"Read and update Excel workbooks, worksheets, tables, ranges, and rows via Microsoft Graph.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["offline_access","Files.ReadWrite","Sites.ReadWrite.All","User.Read"],"clientIdEnv":"MS_OAUTH_CLIENT_ID","clientSecretEnv":"MS_OAUTH_CLIENT_SECRET"},"category":"spreadsheet","defaultConsistencyModel":"authoritative","capabilities":[{"name":"get.workbooks","description":"List workbook (.xlsx) drive items in the user OneDrive, optionally narrowing via $search/$filter/$top.","parameters":{"type":"object","properties":{"$search":{"type":"string"},"$filter":{"type":"string"},"$top":{"type":"integer"},"$select":{"type":"string"}}},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"find.workbook","description":"Resolve a workbook drive item by exact filename within the user OneDrive root.","parameters":{"type":"object","properties":{"fileName":{"type":"string"}},"required":["fileName"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"get.worksheets","description":"List worksheets contained in a workbook.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"}},"required":["workbookId"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"get.worksheet","description":"Read a single worksheet by id or name within a workbook.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"}},"required":["workbookId","worksheetId"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"find.worksheet","description":"Locate a worksheet by name within a workbook using OData $filter on name.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"name":{"type":"string"}},"required":["workbookId","name"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"get.worksheet.rows","description":"Read the used range of a worksheet as a row-major value matrix (values only by default).","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"},"valuesOnly":{"type":"boolean"}},"required":["workbookId","worksheetId"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"get.worksheet.columns","description":"Read worksheet columns metadata for a worksheet.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"}},"required":["workbookId","worksheetId"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"get.range","description":"Read a specific A1-style range from a worksheet (e.g. Sheet1!A1:D10).","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"},"address":{"type":"string"}},"required":["workbookId","worksheetId","address"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"get.row","description":"Read a single row from a worksheet by 1-based row index (translated to an A1 address on the used range).","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"},"address":{"type":"string"}},"required":["workbookId","worksheetId","address"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"find.row","description":"Search a table column for a value, returning the matching row.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"tableId":{"type":"string"},"columnId":{"type":"string"},"value":{}},"required":["workbookId","tableId","columnId","value"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"get.table.columns","description":"List columns of a table within a workbook.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"tableId":{"type":"string"}},"required":["workbookId","tableId"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"get.table.rows","description":"List rows of a table within a workbook (server-paged via $top/$skip).","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"tableId":{"type":"string"},"$top":{"type":"integer"},"$skip":{"type":"integer"}},"required":["workbookId","tableId"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"lookup.table.column","description":"Read the data body range of a single table column to drive lookups.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"tableId":{"type":"string"},"columnId":{"type":"string"}},"required":["workbookId","tableId","columnId"]},"requiredScopes":["Files.ReadWrite"],"class":"read"},{"name":"create.workbook","description":"Create a new empty .xlsx workbook in the user OneDrive root.","parameters":{"type":"object","properties":{"fileName":{"type":"string"},"conflictBehavior":{"type":"string","enum":["rename","replace","fail"]}},"required":["fileName"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"delete.workbook","description":"Delete a workbook drive item by id.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"}},"required":["workbookId"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"add.worksheet","description":"Add a new worksheet to a workbook with an optional sheet name.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"name":{"type":"string"}},"required":["workbookId"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.worksheet","description":"Create a worksheet within a workbook (alias of add.worksheet).","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"name":{"type":"string"}},"required":["workbookId"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"delete.worksheet","description":"Delete a worksheet by id or name from a workbook.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"}},"required":["workbookId","worksheetId"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rename.worksheet","description":"Rename a worksheet (PATCH the worksheet name field).","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"},"name":{"type":"string"}},"required":["workbookId","worksheetId","name"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"clear.worksheet","description":"Clear the entire used range of a worksheet (values, formats, or all).","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"},"applyTo":{"type":"string","enum":["All","Formats","Contents"]}},"required":["workbookId","worksheetId"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"clear.range","description":"Clear an A1-style range within a worksheet.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"},"address":{"type":"string"},"applyTo":{"type":"string","enum":["All","Formats","Contents"]}},"required":["workbookId","worksheetId","address"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"clear.column","description":"Clear an entire column within a worksheet by A1 column address (e.g. B:B).","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"},"address":{"type":"string"},"applyTo":{"type":"string","enum":["All","Formats","Contents"]}},"required":["workbookId","worksheetId","address"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"clear.row","description":"Clear an entire row within a worksheet by A1 row address (e.g. 5:5).","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"},"address":{"type":"string"},"applyTo":{"type":"string","enum":["All","Formats","Contents"]}},"required":["workbookId","worksheetId","address"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"delete.row","description":"Delete a worksheet row by A1 address, shifting cells up.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"},"address":{"type":"string"}},"required":["workbookId","worksheetId","address"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"append.row","description":"Append a single row of values to a table within a workbook.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"tableId":{"type":"string"},"values":{"type":"array"}},"required":["workbookId","tableId","values"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"append.multiple.rows","description":"Append multiple rows of values to a table in a single batch.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"tableId":{"type":"string"},"values":{"type":"array"}},"required":["workbookId","tableId","values"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"append.table.rows","description":"Append rows to a table at a specific index (or end when omitted).","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"tableId":{"type":"string"},"index":{"type":"integer"},"values":{"type":"array"}},"required":["workbookId","tableId","values"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"update.row","description":"Update the values of an existing range within a worksheet.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"},"address":{"type":"string"},"values":{"type":"array"}},"required":["workbookId","worksheetId","address","values"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"create.table","description":"Convert a worksheet range into a table, optionally treating the first row as the header.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"worksheetId":{"type":"string"},"address":{"type":"string"},"hasHeaders":{"type":"boolean"}},"required":["workbookId","worksheetId","address"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"delete.table","description":"Delete a table from a workbook by id or name.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"tableId":{"type":"string"}},"required":["workbookId","tableId"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"convert.to.range","description":"Convert a table back into a normal worksheet range.","parameters":{"type":"object","properties":{"workbookId":{"type":"string"},"tableId":{"type":"string"}},"required":["workbookId","tableId"]},"requiredScopes":["Files.ReadWrite"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"microsoft-graph","displayName":"Microsoft Graph (Identity & Directory)","description":"Query the Microsoft 365 directory — look up users by email, list organizations, enumerate groups, and resolve group membership. Read-only identity surface shared across the Outlook, Teams, SharePoint, and OneDrive adapters.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["https://graph.microsoft.com/User.Read","https://graph.microsoft.com/User.Read.All","https://graph.microsoft.com/Group.Read.All","https://graph.microsoft.com/GroupMember.Read.All","https://graph.microsoft.com/Organization.Read.All","offline_access"],"clientIdEnv":"MS_OAUTH_CLIENT_ID","clientSecretEnv":"MS_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"get_me","class":"read","description":"Return the connected user (id, displayName, mail, userPrincipalName, jobTitle).","parameters":{"type":"object","properties":{}}},{"name":"lookup_user","class":"read","description":"Look up a Microsoft 365 user by primary email (matches mail OR userPrincipalName).","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]}},{"name":"list_users","class":"read","description":"List directory users, optionally narrowed by a $search prefix on displayName / mail.","parameters":{"type":"object","properties":{"search":{"type":"string","description":"Optional displayName/mail prefix."},"top":{"type":"integer","minimum":1,"maximum":100,"default":25}}}},{"name":"list_groups","class":"read","description":"List Azure AD groups, optionally narrowed by a $search prefix on displayName.","parameters":{"type":"object","properties":{"search":{"type":"string","description":"Optional displayName prefix."},"top":{"type":"integer","minimum":1,"maximum":100,"default":25}}}},{"name":"list_group_members","class":"read","description":"List the user / group members of a directory group.","parameters":{"type":"object","properties":{"groupId":{"type":"string"},"top":{"type":"integer","minimum":1,"maximum":100,"default":50}},"required":["groupId"]}},{"name":"get_organization","class":"read","description":"Return the tenant organization record (id, displayName, verifiedDomains).","parameters":{"type":"object","properties":{}}}]},{"kind":"microsoft-onenote","displayName":"Microsoft OneNote","description":"Create notebooks, sections, and pages in Microsoft OneNote and append content to existing pages via the Microsoft Graph OneNote API.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["offline_access","Notes.ReadWrite","Notes.ReadWrite.All","User.Read"],"clientIdEnv":"MICROSOFT_ONENOTE_OAUTH_CLIENT_ID","clientSecretEnv":"MICROSOFT_ONENOTE_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"notebooks.list","description":"List the signed-in user's OneNote notebooks. Use $top to page, $filter to narrow by displayName.","parameters":{"type":"object","properties":{"$top":{"type":"integer"},"$filter":{"type":"string"},"$select":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sections.list","description":"List sections in a given notebook. notebookId is the Graph notebook id (e.g. \"1-abcdef…\").","parameters":{"type":"object","properties":{"notebookId":{"type":"string"},"$top":{"type":"integer"},"$filter":{"type":"string"}},"required":["notebookId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pages.list","description":"List pages in a section. sectionId is the Graph section id; pages are returned in OneNote's default order (most-recently-modified first).","parameters":{"type":"object","properties":{"sectionId":{"type":"string"},"$top":{"type":"integer"},"$filter":{"type":"string"},"$search":{"type":"string"}},"required":["sectionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pages.getContent","description":"Get the HTML body of a OneNote page. Pass includeIDs=true to receive data-id attributes for use with the page-update PATCH endpoint.","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"includeIDs":{"type":"boolean"}},"required":["pageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"notebooks.create","description":"Create a new OneNote notebook owned by the signed-in user. displayName is required and must be unique across the user's notebooks.","parameters":{"type":"object","properties":{"displayName":{"type":"string"}},"required":["displayName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sections.create","description":"Create a section inside an existing notebook. notebookId pins the parent.","parameters":{"type":"object","properties":{"notebookId":{"type":"string"},"displayName":{"type":"string"}},"required":["notebookId","displayName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pages.create","description":"Create a new page in a OneNote section by POSTing OneNote-flavored HTML (full document with <title> and <body>). Callers must supply text/html content; this capability uses /me/onenote/pages directly, which requires a sectionId query parameter.","parameters":{"type":"object","properties":{"sectionId":{"type":"string"},"html":{"type":"string"}},"required":["sectionId","html"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pages.createInSection","description":"Create a page inside a specific section (alias of pages.create that POSTs to the section subpath). html is OneNote-flavored HTML with <title> and <body>.","parameters":{"type":"object","properties":{"sectionId":{"type":"string"},"html":{"type":"string"}},"required":["sectionId","html"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pages.createImage","description":"Create a page whose body embeds an image. html must reference the image either by absolute URL (<img src=\"https://…\">) or by data-URI (<img src=\"data:image/png;base64,…\">). For multipart uploads with named parts, use the upstream Graph multipart endpoint directly.","parameters":{"type":"object","properties":{"sectionId":{"type":"string"},"html":{"type":"string"}},"required":["sectionId","html"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pages.append","description":"Append (or otherwise patch) content to an existing OneNote page. revisions is a JSON array of OneNote PATCH commands; each entry is { target, action, position, content }. Common form: [{\"target\":\"body\",\"action\":\"append\",\"content\":\"<p>…</p>\"}].","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"revisions":{"type":"array"}},"required":["pageId","revisions"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"microsoft-power-bi","displayName":"Microsoft Power BI","description":"Create push datasets in Microsoft Power BI and stream rows into their tables.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["offline_access","https://analysis.windows.net/powerbi/api/Dataset.ReadWrite.All","https://analysis.windows.net/powerbi/api/Workspace.Read.All"],"clientIdEnv":"MS_OAUTH_CLIENT_ID","clientSecretEnv":"MS_OAUTH_CLIENT_SECRET"},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.dataset","description":"Create a Power BI push dataset in a workspace (group). The dataset payload describes table schemas; defaultMode \"Push\" is required for downstream rows.push calls.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"Power BI workspace (group) id that will own the dataset."},"name":{"type":"string","description":"Display name for the dataset within the workspace."},"defaultMode":{"type":"string","enum":["Push","Streaming","PushStreaming"],"description":"Dataset mode. Push is the default for REST-fed datasets; Streaming/PushStreaming enable real-time tiles."},"tables":{"type":"array","description":"Table schemas. Each entry carries { name, columns: [{ name, dataType }] } per the Power BI dataset spec.","items":{"type":"object"}},"relationships":{"type":"array","description":"Optional relationship definitions between tables.","items":{"type":"object"}}},"required":["groupId","name","tables"]},"requiredScopes":["https://analysis.windows.net/powerbi/api/Dataset.ReadWrite.All"],"class":"mutation","cas":"none","externalEffect":true},{"name":"push.rows.to.dataset.table","description":"Append rows to a table inside an existing Power BI push dataset. Power BI enforces a 10k-rows-per-request / 1MB-payload cap; callers must batch upstream.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"Power BI workspace (group) id that owns the dataset."},"datasetId":{"type":"string","description":"Push dataset id returned by create.dataset."},"tableName":{"type":"string","description":"Name of the table inside the dataset to receive the rows."},"rows":{"type":"array","description":"Row objects whose keys match the table column names defined at dataset creation.","items":{"type":"object"}}},"required":["groupId","datasetId","tableName","rows"]},"requiredScopes":["https://analysis.windows.net/powerbi/api/Dataset.ReadWrite.All"],"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"microsoft-teams","displayName":"Microsoft Teams","description":"Post messages from the agent into Microsoft Teams channels and 1:1/group chats, list teams and channels, and look up users by email. Advisory surface — Teams posts are informational, not transactional.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["https://graph.microsoft.com/ChannelMessage.Send","https://graph.microsoft.com/Chat.ReadWrite","https://graph.microsoft.com/Team.ReadBasic.All","https://graph.microsoft.com/Channel.ReadBasic.All","https://graph.microsoft.com/User.Read","https://graph.microsoft.com/User.ReadBasic.All","openid","profile","offline_access"],"clientIdEnv":"MS_OAUTH_CLIENT_ID","clientSecretEnv":"MS_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"advisory","capabilities":[{"name":"post_channel_message","class":"mutation","description":"Post a message to a Teams channel as the connected user. Append-only — no CAS.","cas":"none","externalEffect":true,"parameters":{"type":"object","properties":{"teamId":{"type":"string","description":"Graph team id (group id)."},"channelId":{"type":"string","description":"Graph channel id."},"content":{"type":"string","description":"Message body."},"contentType":{"type":"string","enum":["text","html"],"default":"text","description":"Body format — text or html."}},"required":["teamId","channelId","content"]}},{"name":"post_chat_message","class":"mutation","description":"Post a message to a 1:1 or group chat as the connected user. Append-only — no CAS.","cas":"none","externalEffect":true,"parameters":{"type":"object","properties":{"chatId":{"type":"string","description":"Graph chat id (e.g. 19:meeting_… or 19:…@thread.v2)."},"content":{"type":"string","description":"Message body."},"contentType":{"type":"string","enum":["text","html"],"default":"text","description":"Body format — text or html."}},"required":["chatId","content"]}},{"name":"list_channel_messages","class":"read","description":"List recent messages in a Teams channel (most recent first).","parameters":{"type":"object","properties":{"teamId":{"type":"string"},"channelId":{"type":"string"},"top":{"type":"integer","minimum":1,"maximum":50,"default":20}},"required":["teamId","channelId"]}},{"name":"list_joined_teams","class":"read","description":"List teams the connected user has joined.","parameters":{"type":"object","properties":{}}},{"name":"list_team_channels","class":"read","description":"List channels in a Team the connected user can see.","parameters":{"type":"object","properties":{"teamId":{"type":"string"}},"required":["teamId"]}},{"name":"lookup_user","class":"read","description":"Look up a Microsoft 365 user by primary email (UPN or mail address).","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]}}]},{"kind":"microsoft-todo","displayName":"Microsoft To Do","description":"Manage Microsoft To Do task lists and tasks via the Microsoft Graph todo API — list/create/update/complete/delete tasks, manage task lists, attach files.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["offline_access","Tasks.ReadWrite","User.Read"],"clientIdEnv":"MICROSOFT_TODO_OAUTH_CLIENT_ID","clientSecretEnv":"MICROSOFT_TODO_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"taskLists.list","description":"List the signed-in user's To Do task lists. Use $top to page, $filter to narrow by displayName.","parameters":{"type":"object","properties":{"$top":{"type":"integer"},"$filter":{"type":"string"},"$select":{"type":"string"},"$skip":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"taskLists.findByName","description":"Find a task list by exact displayName via a Graph $filter eq query.","parameters":{"type":"object","properties":{"displayName":{"type":"string"}},"required":["displayName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"taskLists.create","description":"Create a new To Do task list owned by the signed-in user.","parameters":{"type":"object","properties":{"displayName":{"type":"string"}},"required":["displayName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"taskLists.update","description":"Rename or otherwise update an existing task list. listId pins the target.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"displayName":{"type":"string"}},"required":["listId","displayName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.list","description":"List tasks in a To Do task list. listId is the Graph todoTaskList id.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"$top":{"type":"integer"},"$filter":{"type":"string"},"$select":{"type":"string"},"$orderby":{"type":"string"},"$skip":{"type":"integer"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.get","description":"Get a single task by id from a specific task list.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"taskId":{"type":"string"}},"required":["listId","taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.findByTitle","description":"Find tasks in a list whose title exactly matches via a Graph $filter eq query.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"title":{"type":"string"},"$top":{"type":"integer"}},"required":["listId","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.create","description":"Create a new task in a task list. body is JSON in todoTask shape (e.g. {\"title\":\"…\",\"body\":{\"content\":\"…\",\"contentType\":\"text\"},\"dueDateTime\":{\"dateTime\":\"2026-06-01T17:00:00\",\"timeZone\":\"UTC\"},\"importance\":\"normal\"}).","parameters":{"type":"object","properties":{"listId":{"type":"string"},"task":{"type":"object"}},"required":["listId","task"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update an existing task. Pass only the fields to change in patch (Graph PATCH semantics).","parameters":{"type":"object","properties":{"listId":{"type":"string"},"taskId":{"type":"string"},"patch":{"type":"object"}},"required":["listId","taskId","patch"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.complete","description":"Mark a task as completed by PATCHing status=completed. Graph also sets completedDateTime server-side when status transitions to completed.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"taskId":{"type":"string"}},"required":["listId","taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.delete","description":"Delete a task from a task list. Irreversible.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"taskId":{"type":"string"}},"required":["listId","taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.addAttachment","description":"Attach a small file (< 3MB) to a task via the taskFileAttachment endpoint. contentBytes must be base64-encoded.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"taskId":{"type":"string"},"name":{"type":"string"},"contentType":{"type":"string"},"contentBytes":{"type":"string"}},"required":["listId","taskId","name","contentBytes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"millionverifier","displayName":"MillionVerifier","description":"Verify the deliverability of an email address through MillionVerifier.","auth":{"kind":"api-key","hint":"MillionVerifier API key from the account dashboard."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"verify.email","description":"Verify whether an email address is deliverable. Returns MillionVerifier result codes (ok, catch_all, unknown, error, disposable, invalid) plus quality, subresult, and free/role flags.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"The email address to verify."},"timeout":{"type":"integer","description":"Maximum seconds to wait for the verification result. Defaults to 10 if omitted; range 2..60.","minimum":2,"maximum":60}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"mind-studio","displayName":"MindStudio","description":"Run MindStudio apps and workflows with variable inputs.","auth":{"kind":"api-key","hint":"MindStudio API Bearer token."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"workflows.run","description":"Run a MindStudio workflow by App ID.","parameters":{"type":"object","properties":{"appId":{"type":"string","description":"The MindStudio app ID to run."},"workflow":{"type":"string","description":"Workflow name to run (without the .flow extension)."},"variables":{"type":"object","description":"Key-value variables passed to the app."},"callbackUrl":{"type":"string","description":"URL to receive the execution result asynchronously."},"includeBillingCost":{"type":"boolean","description":"Return the billing cost in the response."}},"required":["appId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"mindee","displayName":"Mindee","description":"Run Mindee document-AI predictions against off-the-shelf or custom APIs.","auth":{"kind":"api-key","hint":"Mindee API key from https://platform.mindee.com/api-keys."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"mindee.predict.document","description":"Submit a document URL to a Mindee prediction API and receive the parsed document object.","parameters":{"type":"object","properties":{"account_name":{"type":"string","description":"Mindee account or organization name that owns the API."},"api_name":{"type":"string","description":"Mindee API product slug (for example invoices, receipts, passport)."},"api_version":{"type":"string","description":"API version to invoke. Defaults to v1."},"file":{"type":"string","description":"Remote URL of the file to parse. Supported formats: .pdf, .jpg, .png, .webp, .tiff, .heic."}},"required":["account_name","api_name","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false}]},{"kind":"miro","displayName":"Miro","description":"Read and edit Miro boards: list and search boards, read board items (sticky notes, shapes, text, cards, images, frames, connectors), create and update items, and post board content back into the source of truth.","auth":{"kind":"oauth2","authorizationUrl":"https://miro.com/oauth/authorize","tokenUrl":"https://api.miro.com/v1/oauth/token","scopes":["boards:read","boards:write","identity:read"],"clientIdEnv":"MIRO_OAUTH_CLIENT_ID","clientSecretEnv":"MIRO_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"me.get","description":"Return the authenticated Miro user.","parameters":{"type":"object","properties":{}},"requiredScopes":["identity:read"],"class":"read"},{"name":"boards.list","description":"List boards accessible to the authenticated user. Supports cursor pagination via `cursor` and team / sort filters.","parameters":{"type":"object","properties":{"team_id":{"type":"string","description":"Filter to a single team id."},"query":{"type":"string","description":"Free-text board name filter."},"owner":{"type":"string","description":"Filter by owner user id."},"limit":{"type":"integer","minimum":1,"maximum":50},"offset":{"type":"integer","minimum":0},"sort":{"type":"string","enum":["default","last_modified","last_opened","last_created","alphabetically"]}}},"requiredScopes":["boards:read"],"class":"read"},{"name":"boards.get","description":"Fetch a single Miro board by id.","parameters":{"type":"object","properties":{"board_id":{"type":"string"}},"required":["board_id"]},"requiredScopes":["boards:read"],"class":"read"},{"name":"boards.members.list","description":"List members (collaborators) of a Miro board.","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50},"offset":{"type":"integer","minimum":0}},"required":["board_id"]},"requiredScopes":["boards:read"],"class":"read"},{"name":"items.list","description":"List all items on a board, optionally filtered by item type (sticky_note, text, shape, card, image, frame, connector, embed, app_card, document).","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"type":{"type":"string","enum":["sticky_note","text","shape","card","image","frame","connector","embed","app_card","document","preview"]},"limit":{"type":"integer","minimum":1,"maximum":50},"cursor":{"type":"string"}},"required":["board_id"]},"requiredScopes":["boards:read"],"class":"read"},{"name":"items.get","description":"Fetch a single board item by id.","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"item_id":{"type":"string"}},"required":["board_id","item_id"]},"requiredScopes":["boards:read"],"class":"read"},{"name":"connectors.list","description":"List connector lines on a board (arrows / lines between items).","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50},"cursor":{"type":"string"}},"required":["board_id"]},"requiredScopes":["boards:read"],"class":"read"},{"name":"tags.list","description":"List tags defined on a board.","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50},"offset":{"type":"integer","minimum":0}},"required":["board_id"]},"requiredScopes":["boards:read"],"class":"read"},{"name":"boards.create","description":"Create a new Miro board. Accepts an optional name, description, team_id, and sharing policy. Returns the new board id used by every items.* endpoint.","parameters":{"type":"object","properties":{"name":{"type":"string","maxLength":60},"description":{"type":"string","maxLength":300},"team_id":{"type":"string"},"policy":{"type":"object","description":"Permissions + sharing policy. See https://developers.miro.com/reference/create-board for the full PolicyChange shape."}},"required":["name"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"boards.update","description":"Update a Miro board (name, description, team, or sharing policy).","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"name":{"type":"string","maxLength":60},"description":{"type":"string","maxLength":300},"team_id":{"type":"string"},"policy":{"type":"object"}},"required":["board_id"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"boards.delete","description":"Delete a Miro board (irreversible).","parameters":{"type":"object","properties":{"board_id":{"type":"string"}},"required":["board_id"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sticky_notes.create","description":"Create a sticky note on a board. `data.content` accepts plain text; `style.fillColor` is a Miro sticky-note color keyword (e.g. yellow, light_yellow, pink).","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"data":{"type":"object","properties":{"content":{"type":"string"},"shape":{"type":"string","enum":["square","rectangle"]}},"required":["content"]},"style":{"type":"object","properties":{"fillColor":{"type":"string"},"textAlign":{"type":"string","enum":["left","center","right"]},"textAlignVertical":{"type":"string","enum":["top","middle","bottom"]}}},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"},"origin":{"type":"string","enum":["center"]}}},"geometry":{"type":"object","properties":{"width":{"type":"number"},"height":{"type":"number"}}},"parent":{"type":"object","description":"Attach the sticky note to a frame: { id: <frame_item_id> }.","properties":{"id":{"type":"string"}}}},"required":["board_id","data"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sticky_notes.update","description":"Update a sticky note (content, style, position, geometry, or parent frame).","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"item_id":{"type":"string"},"data":{"type":"object"},"style":{"type":"object"},"position":{"type":"object"},"geometry":{"type":"object"},"parent":{"type":"object"}},"required":["board_id","item_id"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"text.create","description":"Create a text item on a board.","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"data":{"type":"object","properties":{"content":{"type":"string"}},"required":["content"]},"style":{"type":"object"},"position":{"type":"object"},"geometry":{"type":"object"},"parent":{"type":"object"}},"required":["board_id","data"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"shapes.create","description":"Create a shape item on a board. `data.shape` selects the geometric primitive (rectangle, round_rectangle, circle, triangle, rhombus, etc.).","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"data":{"type":"object","properties":{"shape":{"type":"string","description":"Miro shape kind; full enum at https://developers.miro.com/reference/create-shape-item."},"content":{"type":"string"}},"required":["shape"]},"style":{"type":"object"},"position":{"type":"object"},"geometry":{"type":"object"},"parent":{"type":"object"}},"required":["board_id","data"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cards.create","description":"Create a card item (title + description + assignee + due-date) on a board.","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"data":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"dueDate":{"type":"string","format":"date-time"},"assigneeId":{"type":"string"}},"required":["title"]},"style":{"type":"object"},"position":{"type":"object"},"geometry":{"type":"object"},"parent":{"type":"object"}},"required":["board_id","data"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"frames.create","description":"Create a frame on a board. Frames group items; child items can be attached via `parent.id` on item creation.","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"data":{"type":"object","properties":{"title":{"type":"string"},"format":{"type":"string","enum":["custom"]},"type":{"type":"string","enum":["freeform"]}}},"style":{"type":"object"},"position":{"type":"object"},"geometry":{"type":"object"}},"required":["board_id"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"images.create.by_url","description":"Create an image item from a public URL (Miro fetches the image server-side).","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"data":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"title":{"type":"string"}},"required":["url"]},"position":{"type":"object"},"geometry":{"type":"object"},"parent":{"type":"object"}},"required":["board_id","data"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"connectors.create","description":"Create a connector line between two items on the board. `startItem.id` and `endItem.id` reference existing item ids.","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"startItem":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"endItem":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"captions":{"type":"array","items":{"type":"object","properties":{"content":{"type":"string"}}}},"style":{"type":"object"},"shape":{"type":"string","enum":["straight","elbowed","curved"]}},"required":["board_id","startItem","endItem"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"items.delete","description":"Delete an item from a board (works across all item types).","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"item_id":{"type":"string"}},"required":["board_id","item_id"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"boards.share","description":"Invite users to a Miro board by email. Roles: viewer, commenter, editor, coowner.","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"emails":{"type":"array","items":{"type":"string","format":"email"}},"role":{"type":"string","enum":["viewer","commenter","editor","coowner"]},"message":{"type":"string"}},"required":["board_id","emails","role"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"missive","displayName":"Missive","description":"Manage Missive contacts, draft posts, and tasks, and look up contacts in shared contact books.","auth":{"kind":"api-key","hint":"Missive API token, sent as `Authorization: Bearer <token>`."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.find","description":"Search contacts in a Missive contact book, optionally filtered by free-text search, modification time, or deletion state.","parameters":{"type":"object","properties":{"contact_book":{"type":"string"},"search":{"type":"string"},"order":{"type":"string"},"limit":{"type":"integer"},"offset":{"type":"integer"},"modified_since":{"type":"integer"},"include_deleted":{"type":"boolean"}},"required":["contact_book"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create a contact in a Missive contact book. `infos` carries the emails/phones/addresses and `memberships` carries the organization or group links.","parameters":{"type":"object","properties":{"contact_book":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"middle_name":{"type":"string"},"phonetic_first_name":{"type":"string"},"phonetic_last_name":{"type":"string"},"phonetic_middle_name":{"type":"string"},"prefix":{"type":"string"},"suffix":{"type":"string"},"nickname":{"type":"string"},"file_as":{"type":"string"},"notes":{"type":"string"},"starred":{"type":"boolean"},"gender":{"type":"string"},"infos":{"type":"array","items":{"type":"object"}},"memberships":{"type":"array","items":{"type":"object"}}},"required":["contact_book"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update an existing Missive contact by id. Optionally move the contact to a different contact book.","parameters":{"type":"object","properties":{"contact_id":{"type":"string"},"move_to_contact_book":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"middle_name":{"type":"string"},"nickname":{"type":"string"},"notes":{"type":"string"},"starred":{"type":"boolean"},"gender":{"type":"string"},"infos":{"type":"array","items":{"type":"object"}},"memberships":{"type":"array","items":{"type":"object"}}},"required":["contact_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"drafts.create","description":"Create a draft post in Missive. Set `send` to deliver immediately, or pass `send_at` to schedule. Supports attachments and conversation/team metadata.","parameters":{"type":"object","properties":{"account":{"type":"string"},"subject":{"type":"string"},"body":{"type":"string"},"from_field":{"type":"object"},"to_fields":{"type":"array","items":{"type":"object"}},"cc_fields":{"type":"array","items":{"type":"object"}},"bcc_fields":{"type":"array","items":{"type":"object"}},"attachments":{"type":"array","items":{"type":"object"}},"references":{"type":"array","items":{"type":"string"}},"conversation":{"type":"string"},"conversation_subject":{"type":"string"},"conversation_color":{"type":"string"},"team":{"type":"string"},"force_team":{"type":"boolean"},"add_to_inbox":{"type":"boolean"},"add_to_team_inbox":{"type":"boolean"},"close":{"type":"boolean"},"add_shared_labels":{"type":"array","items":{"type":"string"}},"remove_shared_labels":{"type":"array","items":{"type":"string"}},"send":{"type":"boolean"},"send_at":{"type":"integer"},"auto_followup":{"type":"boolean"}},"required":["body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.create","description":"Create a task in Missive. Standalone tasks need `team`; conversation tasks need `conversation`; subtasks need `parent_task`.","parameters":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"team":{"type":"string"},"conversation":{"type":"string"},"parent_task":{"type":"string"},"assignees":{"type":"array","items":{"type":"string"}},"state":{"type":"string"},"due_at":{"type":"integer"}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"mixmax","displayName":"Mixmax","description":"Email productivity automation for Gmail: manage Mixmax code snippets and contacts (create, find, list).","auth":{"kind":"api-key","hint":"Mixmax API key, sent in the X-API-Token header."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"create.code.snippet","description":"Create a Mixmax code snippet with HTML content and optional syntax-highlighting metadata.","parameters":{"type":"object","properties":{"title":{"type":"string"},"html":{"type":"string"},"language":{"type":"string"},"background":{"type":"string"},"theme":{"type":"string"}},"required":["html"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"create.contact","description":"Create a Mixmax contact by email, with optional name and third-party enrichment.","parameters":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"},"enrich":{"type":"boolean"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"find.contact","description":"Search Mixmax contacts by email or name, optionally including linked Salesforce contacts.","parameters":{"type":"object","properties":{"query":{"type":"string"},"includeSalesforceContacts":{"type":"boolean"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"list.code.snippets","description":"List Mixmax code snippets.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"list.contacts","description":"List Mixmax contacts with optional filter and sort.","parameters":{"type":"object","properties":{"search":{"type":"string"},"sort":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"mixpanel","displayName":"Mixpanel","description":"Send product analytics events to Mixpanel and query stored event / profile data via the Service Account Query API.","auth":{"kind":"api-key","hint":"Mixpanel Project Token (for /track ingestion) plus Service Account username:secret (for the Query API). Configure API_HOST=api-eu.mixpanel.com for EU residency projects."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"events.track","description":"Send a single product event to Mixpanel /track. The Project Token, event name, distinct_id, and event properties are required by Mixpanel ingestion semantics.","parameters":{"type":"object","properties":{"event":{"type":"string","description":"Event name (e.g. \"Signup\", \"Purchase Completed\")."},"distinct_id":{"type":"string","description":"Stable identifier for the actor performing the event. Matches the Mixpanel profile distinct_id when profiles are also being written."},"event_properties":{"type":"object","description":"Extra event properties. Mixpanel reserved properties (token, time, $insert_id) are merged in by the adapter.","additionalProperties":true},"time":{"type":"integer","description":"Event timestamp in epoch seconds. Mixpanel rejects events older than 5 days for free projects."},"insert_id":{"type":"string","description":"Idempotency key for the event. Mixpanel deduplicates events with the same $insert_id within a 7-day window."}},"required":["event","distinct_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"profiles.set","description":"Set / overwrite properties on a Mixpanel user profile via /engage with the $set operation.","parameters":{"type":"object","properties":{"distinct_id":{"type":"string"},"properties":{"type":"object","description":"Profile properties to set.","additionalProperties":true}},"required":["distinct_id","properties"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.export","description":"Stream raw events from the Mixpanel Export API for a project + date range. Uses Service Account credentials via HTTP Basic over the Query API host.","parameters":{"type":"object","properties":{"project_id":{"type":"string","description":"Mixpanel Project ID."},"from_date":{"type":"string","description":"Inclusive UTC start date (YYYY-MM-DD)."},"to_date":{"type":"string","description":"Inclusive UTC end date (YYYY-MM-DD)."},"event":{"type":"array","description":"Optional list of event names to filter to.","items":{"type":"string"}},"where":{"type":"string","description":"Optional Mixpanel JQL-style filter expression."}},"required":["project_id","from_date","to_date"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"events.segmentation","description":"Aggregate counts / uniques for a single event over a date range. Returns a Mixpanel segmentation report.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"event":{"type":"string"},"from_date":{"type":"string"},"to_date":{"type":"string"},"unit":{"type":"string","description":"Granularity bucket size.","enum":["minute","hour","day","week","month"]},"type":{"type":"string","description":"Aggregation type.","enum":["general","unique","average"]},"on":{"type":"string","description":"Property expression to segment on (e.g. \"properties[\\\"plan\\\"]\")."}},"required":["project_id","event","from_date","to_date"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"profiles.query","description":"Query Mixpanel user profiles (Engage API) by selector / distinct_id. Returns a paginated list of profile documents.","parameters":{"type":"object","properties":{"project_id":{"type":"string"},"distinct_id":{"type":"string","description":"Optional exact distinct_id lookup."},"selector":{"type":"string","description":"Optional Mixpanel selector expression to filter profiles."},"page":{"type":"integer","description":"Zero-based page index when paginating."},"session_id":{"type":"string","description":"Engage pagination session id returned by the previous page. Required for page > 0."}},"required":["project_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"modelslab","displayName":"ModelsLab","description":"Submit text-to-image generations and fetch queued ModelsLab results.","auth":{"kind":"api-key","hint":"ModelsLab API key from modelslab.com/account/api-key."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"text.to.image","class":"mutation","description":"Submit a text-to-image generation. Poll images.status when ModelsLab returns processing.","parameters":{"type":"object","properties":{"prompt":{"type":"string"},"negative_prompt":{"type":"string"},"model_id":{"type":"string"},"width":{"type":"integer","minimum":256,"maximum":1024},"height":{"type":"integer","minimum":256,"maximum":1024},"num_inference_steps":{"type":"integer","minimum":20,"maximum":50},"guidance_scale":{"type":"number","minimum":1,"maximum":20},"samples":{"type":"integer","minimum":1,"maximum":4},"seed":{"type":"integer"},"safety_checker":{"type":"boolean"}},"required":["prompt"]},"cas":"none","externalEffect":true},{"name":"images.status","class":"read","description":"Fetch a queued image generation by request id.","parameters":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}}]},{"kind":"modjo","displayName":"Modjo","description":"Conversation intelligence platform. Export call records with transcripts and AI summaries, and list users and teams.","auth":{"kind":"api-key","hint":"Create an API key in Modjo (Administrator or Manager role required); copy it immediately as it is shown only once. Sent as the X-API-KEY header."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.export","description":"Retrieve a paginated list of calls with optional relations such as transcripts, AI summaries, and contacts.","parameters":{"type":"object","properties":{"page":{"type":"integer"},"perPage":{"type":"integer"},"transcript":{"type":"boolean"},"aiSummary":{"type":"boolean"},"contacts":{"type":"boolean"}},"required":["page","perPage"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.list","description":"Retrieve a paginated list of users in the Modjo workspace.","parameters":{"type":"object","properties":{"page":{"type":"integer"},"perPage":{"type":"integer"}},"required":["page","perPage"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"teams.list","description":"Retrieve a paginated list of teams in the Modjo workspace.","parameters":{"type":"object","properties":{"page":{"type":"integer"},"perPage":{"type":"integer"}},"required":["page","perPage"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"mollie","displayName":"Mollie","description":"Manage Mollie payments, orders, refunds, customers, and invoices. Automate payment processing and track payment statuses.","auth":{"kind":"api-key","hint":"Mollie API key (found in your Mollie dashboard under Developers → API keys)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"customers.create","description":"Create a Mollie customer with optional name, email, and metadata.","parameters":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"locale":{"type":"string"},"metadata":{"type":"object"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.search","description":"List or search Mollie customers with pagination.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"from":{"type":"string"},"sort":{"type":"string","enum":["name","-name","createdAt","-createdAt"]}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.create","description":"Create a Mollie order with order lines, billing address, and optional shipping address. Supports multiple payment methods and custom metadata.","parameters":{"type":"object","properties":{"amount":{"type":"string"},"currency":{"type":"string"},"orderNumber":{"type":"string"},"description":{"type":"string"},"customerId":{"type":"string"},"lines":{"type":"array","items":{"type":"object"}},"redirectUrl":{"type":"string"},"webhookUrl":{"type":"string"},"locale":{"type":"string"},"expiresAt":{"type":"string"},"testmode":{"type":"boolean"}},"required":["amount","currency","orderNumber"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.search","description":"Search Mollie orders with optional filtering by status and profile.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"status":{"type":"string","enum":["created","paid","authorized","canceled","shipping","completed","expired"]},"profileId":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"payments.create","description":"Create a Mollie payment with optional customer, mandate, and method restrictions. Supports description, metadata, and webhook configuration.","parameters":{"type":"object","properties":{"amount":{"type":"string"},"currency":{"type":"string"},"description":{"type":"string"},"customerId":{"type":"string"},"mandateId":{"type":"string"},"method":{"type":"string","enum":["creditcard","ideal","paypal","banktransfer","directdebit","kbc","belfius","girocard","eps","giropay","przelewy24","payip","klarnasliceit","klarnapaylater","klarnapaynow","klarnasliceithome","satispay","applepay","googlepay","twint","blik","voucher"]},"redirectUrl":{"type":"string"},"webhookUrl":{"type":"string"},"locale":{"type":"string"},"testmode":{"type":"boolean"}},"required":["amount","currency","description"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payments.search","description":"Search Mollie payments with optional status and profile filtering.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"status":{"type":"string","enum":["open","pending","authorized","canceled","failed","expired","paid"]},"profileId":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"refunds.create","description":"Create a refund for a Mollie payment with optional amount and description.","parameters":{"type":"object","properties":{"paymentId":{"type":"string"},"amount":{"type":"string"},"currency":{"type":"string"},"description":{"type":"string"}},"required":["paymentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"paymentlinks.create","description":"Create a Mollie payment link with optional fixed amount, billing address, and payment method restrictions.","parameters":{"type":"object","properties":{"amount":{"type":"string"},"currency":{"type":"string"},"description":{"type":"string"},"redirectUrl":{"type":"string"},"webhookUrl":{"type":"string"},"customerId":{"type":"string"},"locale":{"type":"string"},"method":{"type":"string"},"testmode":{"type":"boolean"},"reusable":{"type":"boolean"},"expiresAt":{"type":"string"}},"required":["amount","currency","description"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"monday","displayName":"monday.com","description":"Query and mutate monday.com boards, items, groups, and updates over the GraphQL v2 API.","auth":{"kind":"oauth2","authorizationUrl":"https://auth.monday.com/oauth2/authorize","tokenUrl":"https://auth.monday.com/oauth_ms/oauth/token","scopes":["me:read","boards:read","boards:write","workspaces:read","users:read","updates:read","updates:write","assets:read","tags:read","notifications:write"],"clientIdEnv":"MONDAY_OAUTH_CLIENT_ID","clientSecretEnv":"MONDAY_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"me.get","description":"Return the authenticated monday.com account holder.","parameters":{"type":"object","properties":{}},"requiredScopes":["me:read"],"class":"read"},{"name":"workspaces.list","description":"List workspaces the connected account can access.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1},"kind":{"type":"string","enum":["open","closed"]},"state":{"type":"string","enum":["active","archived","deleted","all"]}}},"requiredScopes":["workspaces:read"],"class":"read"},{"name":"boards.list","description":"List boards the connected account can read, optionally filtered by workspace, kind, or state.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1},"ids":{"type":"array","items":{"type":"string"}},"workspace_ids":{"type":"array","items":{"type":"string"}},"board_kind":{"type":"string","enum":["public","private","share"]},"state":{"type":"string","enum":["active","archived","deleted","all"]}}},"requiredScopes":["boards:read"],"class":"read"},{"name":"boards.get","description":"Fetch boards by id, including their groups and columns.","parameters":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}}},"required":["ids"]},"requiredScopes":["boards:read"],"class":"read"},{"name":"items.page","description":"Paginate items on a board using monday.com items_page cursor semantics.","parameters":{"type":"object","properties":{"boardId":{"type":"string","description":"Numeric board id as a string."},"limit":{"type":"integer","minimum":1,"maximum":500},"cursor":{"type":"string","description":"Opaque cursor returned by a previous items_page call."},"query_params":{"type":"object","description":"ItemsQuery filter (rules, operator, order_by), per monday.com schema."}},"required":["boardId"]},"requiredScopes":["boards:read"],"class":"read"},{"name":"items.get","description":"Fetch items by id with full column values.","parameters":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}}},"required":["ids"]},"requiredScopes":["boards:read"],"class":"read"},{"name":"updates.list","description":"List updates (comments) optionally scoped to a single item.","parameters":{"type":"object","properties":{"item_id":{"type":"string","description":"Item id to scope to. Omit for a global feed."},"limit":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}}},"requiredScopes":["updates:read"],"class":"read"},{"name":"items.create","description":"Create a new item on a board. column_values is a JSON map of column id → value, per monday.com column schema.","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"item_name":{"type":"string"},"group_id":{"type":"string"},"column_values":{"type":"object","description":"Column id → value map. monday accepts this as a JSON-encoded string; the runtime serializes it."},"create_labels_if_missing":{"type":"boolean"}},"required":["board_id","item_name"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"items.update_columns","description":"Change multiple column values on an existing item in a single call.","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"item_id":{"type":"string"},"column_values":{"type":"object","description":"Column id → new value map."},"create_labels_if_missing":{"type":"boolean"}},"required":["board_id","item_id","column_values"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"items.move_group","description":"Move an item from its current group into the target group on the same board.","parameters":{"type":"object","properties":{"item_id":{"type":"string"},"group_id":{"type":"string"}},"required":["item_id","group_id"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"items.archive","description":"Archive an item (recoverable, item remains in the board archive).","parameters":{"type":"object","properties":{"item_id":{"type":"string"}},"required":["item_id"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"items.delete","description":"Permanently delete an item from a board.","parameters":{"type":"object","properties":{"item_id":{"type":"string"}},"required":["item_id"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"groups.create","description":"Create a new group on a board, optionally positioned at top or bottom.","parameters":{"type":"object","properties":{"board_id":{"type":"string"},"group_name":{"type":"string"},"position":{"type":"string","description":"before_all | after_all | <group_id> per monday schema."}},"required":["board_id","group_name"]},"requiredScopes":["boards:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"updates.create","description":"Post an update (comment) on an item, optionally as a reply to a parent update.","parameters":{"type":"object","properties":{"item_id":{"type":"string"},"body":{"type":"string","description":"Update body. monday accepts a subset of HTML for rich text."},"parent_id":{"type":"string","description":"Parent update id when replying to a thread."}},"required":["item_id","body"]},"requiredScopes":["updates:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"mongodb","displayName":"MongoDB","description":"Inspect MongoDB collections and indexes and run bounded structured document reads over a verified TLS connection.","auth":{"kind":"api-key","hint":"JSON with a public MongoDB host, database, user, password, optional port/auth source, and optional TLS CA. Verified TLS is mandatory."},"category":"database","defaultConsistencyModel":"authoritative","rateLimit":{"requests":120,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"mongodb.collections.list","class":"read","description":"List collections visible in the configured database.","parameters":{"type":"object","properties":{},"additionalProperties":false}},{"name":"mongodb.collections.describe","class":"read","description":"Read options and metadata for one collection.","parameters":{"type":"object","properties":{"collection":{"type":"string","minLength":1,"maxLength":120,"description":"Collection name."}},"required":["collection"],"additionalProperties":false}},{"name":"mongodb.indexes.list","class":"read","description":"List bounded index metadata for one collection.","parameters":{"type":"object","properties":{"collection":{"type":"string","minLength":1,"maxLength":120,"description":"Collection name."}},"required":["collection"],"additionalProperties":false}},{"name":"mongodb.documents.find","class":"read","description":"Read bounded documents using fixed scalar predicates, projection, and sort fields.","parameters":{"type":"object","properties":{"collection":{"type":"string","minLength":1,"maxLength":120,"description":"Collection name."},"filters":{"type":"array","maxItems":20,"items":{"type":"object","properties":{"field":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$"},"operator":{"type":"string","enum":["eq","ne","lt","lte","gt","gte"]},"value":{"type":["string","number","boolean","null"]}},"required":["field","operator","value"],"additionalProperties":false}},"fields":{"type":"array","minItems":1,"maxItems":64,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$"}},"includeId":{"type":"boolean","default":true},"sort":{"type":"array","maxItems":8,"items":{"type":"object","properties":{"field":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$"},"direction":{"type":"string","enum":["asc","desc"],"default":"asc"}},"required":["field"],"additionalProperties":false}},"limit":{"type":"integer","minimum":1,"maximum":1000,"default":100},"skip":{"type":"integer","minimum":0,"maximum":1000000,"default":0}},"required":["collection"],"additionalProperties":false}},{"name":"mongodb.documents.count","class":"read","description":"Count documents matching fixed scalar predicates within a bounded server execution time.","parameters":{"type":"object","properties":{"collection":{"type":"string","minLength":1,"maxLength":120,"description":"Collection name."},"filters":{"type":"array","maxItems":20,"items":{"type":"object","properties":{"field":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$"},"operator":{"type":"string","enum":["eq","ne","lt","lte","gt","gte"]},"value":{"type":["string","number","boolean","null"]}},"required":["field","operator","value"],"additionalProperties":false}}},"required":["collection"],"additionalProperties":false}}]},{"kind":"mycase","displayName":"MyCase","description":"Manage legal cases, clients, companies, leads, matters, activities, time, expenses, and notes in MyCase.","auth":{"kind":"oauth2","authorizationUrl":"https://auth.mycase.com/login_sessions/new","tokenUrl":"https://auth.mycase.com/tokens","scopes":[],"sendScopeParam":false,"clientIdEnv":"MYCASE_OAUTH_CLIENT_ID","clientSecretEnv":"MYCASE_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"cases.list","description":"List or incrementally synchronize legal cases.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."},"name":{"type":"string"},"case_number":{"type":"string"},"case_stage_id":{"type":"string"},"practice_area_id":{"type":"string"},"status":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cases.create","description":"Create a legal case.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cases.update","description":"Update a legal case.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"MyCase resource id."},"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["id","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"clients.list","description":"List or incrementally synchronize clients.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"clients.create","description":"Create a person/client record.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"clients.update","description":"Update a person/client record.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"MyCase resource id."},"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["id","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"companies.list","description":"List or incrementally synchronize companies.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."},"name":{"type":"string"},"email":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.create","description":"Create a company record.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"companies.update","description":"Update a company record.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"MyCase resource id."},"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["id","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"leads.list","description":"List or incrementally synchronize leads.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"},"status":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.create","description":"Create a lead.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"staff.list","description":"List firm staff who can own or participate in work.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"case-stages.list","description":"List case stages.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"case-stages.create","description":"Create a case stage.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"practice-areas.list","description":"List practice areas.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"practice-areas.create","description":"Create a practice area.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"referral-sources.list","description":"List referral sources.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"referral-sources.create","description":"Create a referral source.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"people-groups.list","description":"List people groups.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"locations.list","description":"List office and event locations.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."},"name":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"locations.create","description":"Create a location.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.list","description":"List or incrementally synchronize calendar events.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."},"start_date":{"type":"string"},"end_date":{"type":"string"},"case_id":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"events.create","description":"Create a calendar event.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.list","description":"List or incrementally synchronize tasks.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."},"due_date_start":{"type":"string"},"due_date_end":{"type":"string"},"case_id":{"type":"string"},"assignee_id":{"type":"string"},"completed":{"type":"boolean"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.create","description":"Create a task.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.list","description":"List logged calls.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."},"caller_id":{"type":"string"},"caller_type":{"type":"string","enum":["client","lead"]},"staff_id":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.create","description":"Log a call.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"time-entries.list","description":"List time entries.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."},"case_id":{"type":"string"},"staff_id":{"type":"string"},"start_date":{"type":"string"},"end_date":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"time-entries.create","description":"Create a time entry.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"expenses.list","description":"List case expenses.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"updated_after":{"type":"string","description":"ISO 8601 lower timestamp bound for incremental synchronization."},"case_id":{"type":"string"},"staff_id":{"type":"string"},"start_date":{"type":"string"},"end_date":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"expenses.create","description":"Create a case expense.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"case-notes.create","description":"Add a note to a case.","parameters":{"type":"object","properties":{"caseId":{"type":"string","description":"MyCase resource id."},"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["caseId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"client-notes.create","description":"Add a note to a client.","parameters":{"type":"object","properties":{"clientId":{"type":"string","description":"MyCase resource id."},"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["clientId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"company-notes.create","description":"Add a note to a company.","parameters":{"type":"object","properties":{"companyId":{"type":"string","description":"MyCase resource id."},"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["companyId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"custom-fields.create","description":"Create a custom field definition.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Provider-native MyCase JSON payload for this resource."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"mysql","displayName":"MySQL","description":"Inspect schemas and run bounded parameterized reads or approved compare-and-swap writes against MySQL over verified TLS.","auth":{"kind":"api-key","hint":"JSON with host, port, user, password, optional database, and optional tlsCa. TLS and public network targets are mandatory."},"defaultConsistencyModel":"authoritative","category":"database","rateLimit":{"requests":120,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"mysql.databases.list","class":"read","description":"List databases visible to the connected MySQL user.","parameters":{"type":"object","properties":{},"additionalProperties":false}},{"name":"mysql.tables.list","class":"read","description":"List base tables and views in one database.","parameters":{"type":"object","properties":{"database":{"type":"string","minLength":1,"maxLength":64,"description":"Database name; defaults to the connection database."}},"additionalProperties":false}},{"name":"mysql.tables.describe","class":"read","description":"Read columns, types, nullability, defaults, and keys for one table.","parameters":{"type":"object","properties":{"database":{"type":"string","minLength":1,"maxLength":64,"description":"Database name; defaults to the connection database."},"table":{"type":"string","minLength":1,"maxLength":64,"description":"Table name."}},"required":["table"],"additionalProperties":false}},{"name":"mysql.query","class":"read","description":"Run one parameterized SELECT, SHOW, DESCRIBE, or EXPLAIN statement inside a read-only transaction.","parameters":{"type":"object","properties":{"statement":{"type":"string","minLength":1,"maxLength":1048576},"parameters":{"type":"array","maxItems":1000,"items":{"type":["string","number","boolean","null"]},"description":"Values bound to ? placeholders in order."}},"required":["statement"],"additionalProperties":false}},{"name":"mysql.execute","class":"mutation","description":"Run one approved parameterized INSERT, UPDATE, DELETE, or REPLACE statement and commit only when the affected-row count matches the caller expectation.","parameters":{"type":"object","properties":{"statement":{"type":"string","minLength":1,"maxLength":1048576},"parameters":{"type":"array","maxItems":1000,"items":{"type":["string","number","boolean","null"]},"description":"Values bound to ? placeholders in order."},"expectedAffectedRows":{"type":"integer","minimum":0,"maximum":10000,"description":"Commit only when MySQL reports exactly this many affected rows."}},"required":["statement","expectedAffectedRows"],"additionalProperties":false},"cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"n8n","displayName":"n8n","description":"Run, inspect, and manage n8n workflows against a self-hosted or n8n.cloud instance. Trigger workflows from agents, poll executions, and list workflows.","auth":{"kind":"api-key","hint":"n8n API key from Settings > API. Sent as `X-N8N-API-KEY: <key>`. The connection also requires the instance URL (e.g. https://workspace.app.n8n.cloud or https://n8n.example.com)."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"workflows.list","description":"List workflows on the n8n instance. Returns active and inactive workflows.","parameters":{"type":"object","properties":{"active":{"type":"boolean","description":"Filter to only active or only inactive workflows."},"tags":{"type":"string","description":"Comma-separated tag names to filter by."},"limit":{"type":"integer","minimum":1,"maximum":250},"cursor":{"type":"string","description":"Pagination cursor returned by a prior call."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workflows.get","description":"Read a single n8n workflow by id, including its node graph and settings.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workflows.activate","description":"Activate an n8n workflow so its triggers fire.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflows.deactivate","description":"Deactivate an n8n workflow.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"executions.list","description":"List recent executions across workflows. Filter by workflow id, status, and pagination cursor.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"},"status":{"type":"string","enum":["error","success","waiting"]},"limit":{"type":"integer","minimum":1,"maximum":250},"cursor":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"executions.get","description":"Read a single execution by id, including node outputs and final status. Use this after `workflows.execute` resolves to inspect the run.","parameters":{"type":"object","properties":{"executionId":{"type":"string"},"includeData":{"type":"boolean","description":"Include full node-by-node output payloads."}},"required":["executionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"webhooks.trigger","description":"POST a JSON payload to an n8n webhook trigger node. `webhookPath` is the path the workflow registered (e.g. `webhook/my-trigger`). Use this to trigger workflows that start with a Webhook node.","parameters":{"type":"object","properties":{"webhookPath":{"type":"string"},"payload":{"type":"object"}},"required":["webhookPath","payload"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflows.create","description":"Create a new n8n workflow. `definition` must include the full workflow JSON shape n8n expects (name, nodes, connections, settings). Newly-created workflows start inactive.","parameters":{"type":"object","properties":{"definition":{"type":"object","description":"Full workflow definition (name, nodes, connections, settings, etc.)."}},"required":["definition"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflows.update","description":"Replace an n8n workflow definition. `definition` is the full workflow JSON (nodes, connections, settings) that overwrites the existing record.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"},"definition":{"type":"object","description":"Full workflow definition replacing the current one."}},"required":["workflowId","definition"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflows.delete","description":"Permanently delete an n8n workflow by id.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"executions.delete","description":"Delete a past n8n execution record by id.","parameters":{"type":"object","properties":{"executionId":{"type":"string"}},"required":["executionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"executions.stop","description":"Stop a running n8n execution. Returns the final execution record once the runtime acknowledges the stop signal.","parameters":{"type":"object","properties":{"executionId":{"type":"string"}},"required":["executionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"netlify","displayName":"Netlify","description":"Inspect Netlify sites and deploys, trigger build hooks, manage environment variables, and drive deploy lifecycle (lock / unlock / restore / delete).","auth":{"kind":"oauth2","authorizationUrl":"https://app.netlify.com/authorize","tokenUrl":"https://api.netlify.com/oauth/token","scopes":[],"clientIdEnv":"NETLIFY_OAUTH_CLIENT_ID","clientSecretEnv":"NETLIFY_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"user.get","description":"Read the authenticated Netlify user (id, email, default account).","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.list","description":"List Netlify accounts (teams) the authenticated user belongs to.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sites.list","description":"List Netlify sites visible to the authenticated user, optionally filtered by name or account.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Filter by site name (subdomain)."},"filter":{"type":"string","enum":["all","owner","guest"]},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sites.get","description":"Read a single Netlify site by id.","parameters":{"type":"object","properties":{"site_id":{"type":"string","description":"Netlify site id or custom domain."}},"required":["site_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sites.deploys.list","description":"List deploys for a site (most recent first).","parameters":{"type":"object","properties":{"site_id":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100}},"required":["site_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"deploys.get","description":"Read a single deploy by id.","parameters":{"type":"object","properties":{"deploy_id":{"type":"string"}},"required":["deploy_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sites.build-hooks.list","description":"List build hooks configured for a site.","parameters":{"type":"object","properties":{"site_id":{"type":"string"}},"required":["site_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sites.env.list","description":"List environment variables configured for a site within an account.","parameters":{"type":"object","properties":{"account_id":{"type":"string","description":"Netlify account (team) slug or id."},"site_id":{"type":"string","description":"Site id to scope env vars to."},"context_name":{"type":"string","enum":["all","dev","branch-deploy","deploy-preview","production"],"description":"Optional deploy context filter."}},"required":["account_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sites.env.get","description":"Read a single environment variable by key.","parameters":{"type":"object","properties":{"account_id":{"type":"string"},"key":{"type":"string"},"site_id":{"type":"string"}},"required":["account_id","key"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.list","description":"List forms across the sites the user can access (or scoped to a single site).","parameters":{"type":"object","properties":{"site_id":{"type":"string","description":"Optional — when present scopes the listing to one site."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sites.create","description":"Create a new Netlify site under an account.","parameters":{"type":"object","properties":{"account_slug":{"type":"string","description":"Account (team) slug under which to create the site."},"fields":{"type":"object","description":"Site creation payload (name, custom_domain, repo, build_settings, etc.).","properties":{"name":{"type":"string"},"custom_domain":{"type":"string"},"password":{"type":"string"},"force_ssl":{"type":"boolean"},"repo":{"type":"object"}}}},"required":["account_slug","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sites.update","description":"Patch a Netlify site (name, custom_domain, build_settings, …).","parameters":{"type":"object","properties":{"site_id":{"type":"string"},"fields":{"type":"object","properties":{"name":{"type":"string"},"custom_domain":{"type":"string"},"password":{"type":"string"},"force_ssl":{"type":"boolean"},"build_settings":{"type":"object"},"processing_settings":{"type":"object"}}}},"required":["site_id","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"sites.delete","description":"Delete a Netlify site. Permanent — removes all deploys and DNS records owned by the site.","parameters":{"type":"object","properties":{"site_id":{"type":"string"}},"required":["site_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sites.build-hooks.trigger","description":"Trigger a Netlify build hook to start a new deploy. `hook_id` is the build-hook id returned by sites.build-hooks.list.","parameters":{"type":"object","properties":{"site_id":{"type":"string"},"hook_id":{"type":"string"},"trigger_branch":{"type":"string","description":"Optional override of the branch the build hook builds."},"trigger_title":{"type":"string","description":"Optional human-readable label written into the deploy log."}},"required":["site_id","hook_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sites.build-hooks.create","description":"Create a new build hook for a site.","parameters":{"type":"object","properties":{"site_id":{"type":"string"},"fields":{"type":"object","properties":{"title":{"type":"string"},"branch":{"type":"string"}},"required":["title"]}},"required":["site_id","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sites.build-hooks.delete","description":"Delete a build hook from a site.","parameters":{"type":"object","properties":{"site_id":{"type":"string"},"hook_id":{"type":"string"}},"required":["site_id","hook_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deploys.restore","description":"Restore a previous deploy to be the published deploy for its site.","parameters":{"type":"object","properties":{"site_id":{"type":"string"},"deploy_id":{"type":"string"}},"required":["site_id","deploy_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deploys.lock","description":"Lock the current published deploy so future deploys do not auto-publish.","parameters":{"type":"object","properties":{"deploy_id":{"type":"string"}},"required":["deploy_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deploys.unlock","description":"Unlock a deploy so subsequent successful deploys can auto-publish.","parameters":{"type":"object","properties":{"deploy_id":{"type":"string"}},"required":["deploy_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deploys.cancel","description":"Cancel an in-progress deploy.","parameters":{"type":"object","properties":{"deploy_id":{"type":"string"}},"required":["deploy_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deploys.delete","description":"Delete a non-published deploy. Netlify rejects deleting the currently-published deploy.","parameters":{"type":"object","properties":{"deploy_id":{"type":"string"}},"required":["deploy_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sites.env.create","description":"Create one or more environment variables on an account, optionally scoped to a single site and contexts.","parameters":{"type":"object","properties":{"account_id":{"type":"string"},"site_id":{"type":"string","description":"Optional — when present, scopes the new vars to one site."},"variables":{"type":"array","description":"Array of env-var entries to create.","items":{"type":"object","properties":{"key":{"type":"string"},"values":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"context":{"type":"string","enum":["all","dev","branch-deploy","deploy-preview","production"]},"context_parameter":{"type":"string"}},"required":["value","context"]}},"is_secret":{"type":"boolean"},"scopes":{"type":"array","items":{"type":"string","enum":["builds","functions","runtime","post-processing"]}}},"required":["key","values"]}}},"required":["account_id","variables"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sites.env.update","description":"Update an existing environment variable (replace its values + metadata).","parameters":{"type":"object","properties":{"account_id":{"type":"string"},"key":{"type":"string"},"site_id":{"type":"string"},"fields":{"type":"object","properties":{"key":{"type":"string"},"values":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"context":{"type":"string"},"context_parameter":{"type":"string"}},"required":["value","context"]}},"is_secret":{"type":"boolean"},"scopes":{"type":"array","items":{"type":"string"}}}}},"required":["account_id","key","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"sites.env.delete","description":"Delete an environment variable by key from an account (optionally scoped to a single site).","parameters":{"type":"object","properties":{"account_id":{"type":"string"},"key":{"type":"string"},"site_id":{"type":"string"}},"required":["account_id","key"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"netsuite","displayName":"NetSuite","description":"Query SuiteAnalytics and read or create NetSuite customers, vendors, invoices, and vendor bills.","auth":{"kind":"api-key","hint":"NetSuite OAuth 2.0 access token. Connection metadata must include the account-specific REST base URL."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"suiteql.query","description":"Run a SuiteQL query. Use a bounded WHERE clause and page with limit/offset.","parameters":{"type":"object","properties":{"query":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":1000},"offset":{"type":"integer","minimum":0}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.list","description":"List customer records.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"q":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"vendors.list","description":"List vendor records.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"q":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"invoices.get","description":"Read an invoice by internal id.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"vendor-bills.get","description":"Read a vendor bill by internal id.","parameters":{"type":"object","properties":{"vendorBillId":{"type":"string"}},"required":["vendorBillId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"neverbounce","displayName":"NeverBounce","description":"Verify email deliverability with the NeverBounce API.","auth":{"kind":"api-key","hint":"NeverBounce API key from Apps > API in the NeverBounce dashboard."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"verify.email.address","description":"Verify one email address and return deliverability status such as valid, invalid, disposable, catch-all, or unknown.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address to verify."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"nifty","displayName":"Nifty","description":"Project management made simple. Create and manage tasks in Nifty.","auth":{"kind":"oauth2","authorizationUrl":"https://app.nifty.com/oauth/authorize","tokenUrl":"https://api.nifty.com/oauth/token","scopes":["tasks:write","tasks:read"],"clientIdEnv":"NIFTY_OAUTH_CLIENT_ID","clientSecretEnv":"NIFTY_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tasks.create","description":"Create a task in Nifty.","parameters":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"assignee_id":{"type":"string"},"status":{"type":"string"},"priority":{"type":"string"},"due_date":{"type":"string"}},"required":["title"]},"requiredScopes":["tasks:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update an existing task in Nifty. `taskId` is required; any provided field replaces the current value. Use `assignee_ids: []` to clear assignees.","parameters":{"type":"object","properties":{"taskId":{"type":"string","description":"Nifty task id (URL path)."},"name":{"type":"string"},"description":{"type":"string"},"milestone_id":{"type":"string"},"assignee_ids":{"type":"array","items":{"type":"string"}},"due_date":{"type":"string"},"status":{"type":"string"}},"required":["taskId"]},"requiredScopes":["tasks:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Create a comment on a Nifty task. `object_id` is the task id; `object_type` is fixed to `Task`.","parameters":{"type":"object","properties":{"object_id":{"type":"string","description":"Task id to attach the comment to."},"content":{"type":"string","description":"Comment body."}},"required":["object_id","content"]},"requiredScopes":["tasks:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"ninjapipe","displayName":"NinjaPipe","description":"Connect to NinjaPipe and manage contacts, companies, deals, tasks, projects, products, and orders.","auth":{"kind":"api-key","hint":"NinjaPipe API key from Workspace Settings > API."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.list","description":"List contacts in NinjaPipe.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.get","description":"Get a contact by ID.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create a new contact.","parameters":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"company":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"},"status":{"type":"string"},"owner":{"type":"string"},"notes":{"type":"string"},"customFields":{"type":"object"}},"required":["firstName","lastName","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update a contact.","parameters":{"type":"object","properties":{"id":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"company":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"},"status":{"type":"string"},"owner":{"type":"string"},"notes":{"type":"string"},"customFields":{"type":"object"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.delete","description":"Delete a contact.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.upsert","description":"Upsert a contact by email.","parameters":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"},"status":{"type":"string"},"owner":{"type":"string"},"notes":{"type":"string"},"customFields":{"type":"object"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"companies.list","description":"List companies in NinjaPipe.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.get","description":"Get a company by ID.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.create","description":"Create a new company.","parameters":{"type":"object","properties":{"name":{"type":"string"},"industry":{"type":"string"},"website":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"},"owner":{"type":"string"},"notes":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"companies.update","description":"Update a company.","parameters":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"industry":{"type":"string"},"website":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"},"owner":{"type":"string"},"notes":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"companies.delete","description":"Delete a company.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deals.list","description":"List deals in NinjaPipe.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"deals.get","description":"Get a deal by ID.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"deals.create","description":"Create a new deal.","parameters":{"type":"object","properties":{"title":{"type":"string"},"value":{"type":"number"},"company":{"type":"string"},"owner":{"type":"string"},"status":{"type":"string"}},"required":["title","value"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deals.update","description":"Update a deal.","parameters":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"value":{"type":"number"},"company":{"type":"string"},"owner":{"type":"string"},"status":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"deals.delete","description":"Delete a deal.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.list","description":"List tasks in NinjaPipe.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.get","description":"Get a task by ID.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.create","description":"Create a new task.","parameters":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"assigneeId":{"type":"string"},"dueDate":{"type":"string"},"parentId":{"type":"string"},"priority":{"type":"string"}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update a task.","parameters":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"assigneeId":{"type":"string"},"dueDate":{"type":"string"},"parentId":{"type":"string"},"priority":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.delete","description":"Delete a task.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.list","description":"List projects in NinjaPipe.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.get","description":"Get a project by ID.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.create","description":"Create a new project.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"owner":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.update","description":"Update a project.","parameters":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"owner":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"projects.delete","description":"Delete a project.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.list","description":"List products in NinjaPipe.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.get","description":"Get a product by ID.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.create","description":"Create a new product.","parameters":{"type":"object","properties":{"sku":{"type":"string"},"name":{"type":"string"},"price":{"type":"number"},"description":{"type":"string"}},"required":["sku","name","price"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.update","description":"Update a product.","parameters":{"type":"object","properties":{"id":{"type":"string"},"sku":{"type":"string"},"name":{"type":"string"},"price":{"type":"number"},"description":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"products.delete","description":"Delete a product.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.list","description":"List orders in NinjaPipe.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.get","description":"Get an order by ID.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.create","description":"Create a new order.","parameters":{"type":"object","properties":{"customerName":{"type":"string"},"customerEmail":{"type":"string"},"totalAmount":{"type":"number"}},"required":["customerName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.update","description":"Update an order.","parameters":{"type":"object","properties":{"id":{"type":"string"},"customerName":{"type":"string"},"customerEmail":{"type":"string"},"totalAmount":{"type":"number"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"orders.delete","description":"Delete an order.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"nocodb","displayName":"NocoDB","description":"Create, read, update, delete, and search records in NocoDB tables.","auth":{"kind":"api-key","hint":"NocoDB API token."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.search","description":"Search records in a NocoDB table.","parameters":{"type":"object","properties":{"tableId":{"type":"string","description":"The table ID to search in."},"whereCondition":{"type":"string","description":"Filter condition for records."},"limit":{"type":"integer","description":"Maximum number of records to return."},"sort":{"type":"string","description":"Comma-separated field names for sorting."}},"required":["tableId","limit"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.get","description":"Retrieve a single record from a NocoDB table by record ID.","parameters":{"type":"object","properties":{"tableId":{"type":"string","description":"The table ID."},"recordId":{"type":"string","description":"The unique record ID."}},"required":["tableId","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.create","description":"Create a new record in a NocoDB table.","parameters":{"type":"object","properties":{"tableId":{"type":"string","description":"The table ID."},"fields":{"type":"object","description":"Field values for the new record."}},"required":["tableId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Update an existing record in a NocoDB table.","parameters":{"type":"object","properties":{"tableId":{"type":"string","description":"The table ID."},"recordId":{"type":"string","description":"The unique record ID to update."},"fields":{"type":"object","description":"Fields to update."}},"required":["tableId","recordId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.delete","description":"Delete a record from a NocoDB table.","parameters":{"type":"object","properties":{"tableId":{"type":"string","description":"The table ID."},"recordId":{"type":"string","description":"The unique record ID to delete."}},"required":["tableId","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tables.list","description":"List tables in a NocoDB base/project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"The base/project ID to list tables for."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tables.create","description":"Create a new table inside a NocoDB base/project. `definition` carries the table schema (table_name, title, columns).","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"The base/project ID to create the table in."},"definition":{"type":"object","description":"Table definition (table_name, title, columns, etc.)."}},"required":["projectId","definition"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"fields.create","description":"Add a column/field to an existing NocoDB table. `column` describes the new field (column_name, title, uidt, etc.).","parameters":{"type":"object","properties":{"tableId":{"type":"string","description":"The table ID to add the column to."},"column":{"type":"object","description":"Column definition (column_name, title, uidt, etc.)."}},"required":["tableId","column"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.bulk-create","description":"Insert many records into a NocoDB table in one request. `records` is an array of field-value objects.","parameters":{"type":"object","properties":{"tableId":{"type":"string","description":"The table ID to insert into."},"records":{"type":"array","description":"Array of record objects to insert.","items":{"type":"object"}}},"required":["tableId","records"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"nooks","displayName":"Nooks","description":"AI sales engagement and dialer platform. Read call records, prospects, and accounts from the Nooks Sequencing API.","auth":{"kind":"api-key","hint":"Create a long-lived API key (nooks-api-...) in Nooks Developer Settings -> API Keys. Sent as the Authorization: Bearer header."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.list","description":"List call records, with optional filters by prospect, account, or owner.","parameters":{"type":"object","properties":{"filter_prospect_id":{"type":"string"},"filter_account_id":{"type":"string"},"filter_owner_id":{"type":"string"},"include":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.get","description":"Get a single call record by its id.","parameters":{"type":"object","properties":{"id":{"type":"string"},"include":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"prospects.list","description":"List prospects (contacts), with optional filters by name, email, or account.","parameters":{"type":"object","properties":{"filter_name":{"type":"string"},"filter_primaryEmail":{"type":"string"},"filter_account_id":{"type":"string"},"include":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.list","description":"List accounts, with optional filters by name, domain, or CRM id.","parameters":{"type":"object","properties":{"filter_name":{"type":"string"},"filter_domain":{"type":"string"},"filter_crmId":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"prospects.sync","description":"Sync prospects from the connected CRM into Nooks.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"notion","displayName":"Notion","description":"Query and manipulate Notion databases, pages, and blocks.","auth":{"kind":"oauth2","authorizationUrl":"https://api.notion.com/v1/oauth/authorize","tokenUrl":"https://api.notion.com/v1/oauth/token","scopes":[],"clientIdEnv":"NOTION_OAUTH_CLIENT_ID","clientSecretEnv":"NOTION_OAUTH_CLIENT_SECRET","tokenClientAuthMethod":"client_secret_basic","extraAuthParams":{"owner":"user"}},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"databases.retrieve","description":"Retrieve a Notion database.","parameters":{"type":"object","properties":{"databaseId":{"type":"string"}},"required":["databaseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"databases.query","description":"Query a Notion database with filters and sorting.","parameters":{"type":"object","properties":{"databaseId":{"type":"string"},"filter":{"type":"object"},"sorts":{"type":"array"},"pageSize":{"type":"integer"}},"required":["databaseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pages.create","description":"Create a new Notion page.","parameters":{"type":"object","properties":{"parentDatabaseId":{"type":"string"},"title":{"type":"string"},"properties":{"type":"object"}},"required":["parentDatabaseId","properties"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pages.retrieve","description":"Retrieve a Notion page.","parameters":{"type":"object","properties":{"pageId":{"type":"string"}},"required":["pageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pages.update","description":"Update a Notion page properties.","parameters":{"type":"object","properties":{"pageId":{"type":"string"},"properties":{"type":"object"}},"required":["pageId","properties"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"pages.archive","description":"Archive a Notion page.","parameters":{"type":"object","properties":{"pageId":{"type":"string"}},"required":["pageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"blocks.retrieve","description":"Retrieve a Notion block.","parameters":{"type":"object","properties":{"blockId":{"type":"string"}},"required":["blockId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"blocks.children","description":"Retrieve all children blocks of a block or page.","parameters":{"type":"object","properties":{"blockId":{"type":"string"},"pageSize":{"type":"integer"}},"required":["blockId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"blocks.append","description":"Append blocks as children of a page or block.","parameters":{"type":"object","properties":{"blockId":{"type":"string"},"children":{"type":"array"}},"required":["blockId","children"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Add a comment to a page or block.","parameters":{"type":"object","properties":{"blockId":{"type":"string"},"richText":{"type":"array"}},"required":["blockId","richText"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.retrieve","description":"Retrieve comments on a block.","parameters":{"type":"object","properties":{"blockId":{"type":"string"},"pageSize":{"type":"integer"}},"required":["blockId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.list","description":"List users in the connected Notion workspace.","parameters":{"type":"object","properties":{"startCursor":{"type":"string","description":"Pagination cursor returned by a prior call."},"pageSize":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"blocks.update","description":"Update an existing Notion block. `content` carries the type-specific fields (e.g. { paragraph: { rich_text: [...] } }) Notion expects.","parameters":{"type":"object","properties":{"blockId":{"type":"string"},"content":{"type":"object","description":"Block content patch (type-specific fields keyed by block type)."}},"required":["blockId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"blocks.delete","description":"Delete a Notion block (moves it to trash).","parameters":{"type":"object","properties":{"blockId":{"type":"string"}},"required":["blockId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"databases.create","description":"Create a new Notion database underneath a parent page.","parameters":{"type":"object","properties":{"parentPageId":{"type":"string","description":"Parent page id under which to create the database."},"title":{"type":"array","description":"Notion rich_text array used as the database title."},"properties":{"type":"object","description":"Schema map — property name → Notion property schema."}},"required":["parentPageId","title","properties"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"databases.update","description":"Update a database title and/or schema.","parameters":{"type":"object","properties":{"databaseId":{"type":"string"},"title":{"type":"array","description":"Optional new rich_text title."},"properties":{"type":"object","description":"Optional partial schema update."}},"required":["databaseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"ntfy","displayName":"Ntfy","description":"Send push notifications to Ntfy topics.","auth":{"kind":"api-key","hint":"Ntfy server URL and optional access token."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"send.notification","description":"Send a notification to an Ntfy topic.","parameters":{"type":"object","properties":{"topic":{"type":"string","description":"The topic/channel to send to"},"message":{"type":"string","description":"The message body"},"title":{"type":"string","description":"Optional notification title"},"priority":{"type":"string","description":"Priority level (1-5, default 3)"},"tags":{"type":"object","description":"Optional tags object"},"icon":{"type":"string","description":"Optional icon URL"},"actions":{"type":"string","description":"Optional action buttons JSON"},"click":{"type":"string","description":"Optional click URL"},"delay":{"type":"string","description":"Optional delay specification"}},"required":["topic","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"ocean-io","displayName":"Ocean.io","description":"Lookalike B2B company and people search plus firmographic and contact enrichment. Build target lists from an ideal customer profile and enrich records.","auth":{"kind":"api-key","hint":"API token from Settings -> API tokens. Sent as the X-Api-Token header."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"companies.search","description":"Search/lookalike companies by filters (location, size, industry, technologies) and/or seed lookalike domains.","parameters":{"type":"object","properties":{"companiesFilters":{"type":"object"},"lookalikeDomains":{"type":"array","items":{"type":"string"}},"size":{"type":"integer"},"searchAfter":{"type":"string"}},"required":["size"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"people.search","description":"Search people by persona filters (seniority, department) optionally scoped by company filters.","parameters":{"type":"object","properties":{"peopleFilters":{"type":"object"},"companiesFilters":{"type":"object"},"size":{"type":"integer"},"searchAfter":{"type":"string"}},"required":["size"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.enrich","description":"Match one company against Ocean's database and return firmographic, technographic, and funding data. Costs 0.1 credits per result.","parameters":{"type":"object","properties":{"company":{"type":"object"}},"required":["company"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"people.enrich","description":"Match one person against Ocean's database and return profile data; optionally trigger asynchronous email/phone reveal via webhook. Costs 0.1 credits per result.","parameters":{"type":"object","properties":{"person":{"type":"object"},"revealEmails":{"type":"object"}},"required":["person"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"companies.autocomplete","description":"Type-ahead autocomplete for company name or domain, useful for picking seed companies for a lookalike search.","parameters":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"odoo","displayName":"Odoo","description":"Search, create, and update records in Odoo.","auth":{"kind":"api-key","hint":"Odoo API key. Also configure base URL, database name, and username at connection time."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.search_read","description":"Search and read records from an Odoo model using domain filters.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model name (e.g., res.partner, sale.order)"},"domain":{"type":"array","description":"List of domain criteria. Each criterion is [field, operator, value]."},"fields":{"type":"array","description":"List of field names to return. If empty, returns all fields."},"limit":{"type":"integer","description":"Maximum number of records to return."},"offset":{"type":"integer","description":"Number of records to skip."}},"required":["model"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.get","description":"Read a single record by ID.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model name"},"recordId":{"type":"integer","description":"Record ID"},"fields":{"type":"array","description":"List of field names to return."}},"required":["model","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.create","description":"Create a new record in an Odoo model.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model name"},"values":{"type":"object","description":"Field names and values for the new record"}},"required":["model","values"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Update an existing record.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model name"},"recordId":{"type":"integer","description":"Record ID"},"values":{"type":"object","description":"Field names and values to update"}},"required":["model","recordId","values"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.delete","description":"Delete a record.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model name"},"recordId":{"type":"integer","description":"Record ID"}},"required":["model","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"models.search","description":"Search for record IDs matching a domain filter.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model name"},"domain":{"type":"array","description":"List of domain criteria. Each criterion is [field, operator, value]."},"limit":{"type":"integer","description":"Maximum number of records to return."},"offset":{"type":"integer","description":"Number of records to skip."}},"required":["model"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"models.count","description":"Count records matching a domain filter.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model name"},"domain":{"type":"array","description":"List of domain criteria. Each criterion is [field, operator, value]."}},"required":["model"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.copy","description":"Duplicate an existing Odoo record. Returns the new record id.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model name"},"recordId":{"type":"integer","description":"Record ID to duplicate"}},"required":["model","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.unlink_batch","description":"Delete multiple records of a model in one call.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model name"},"recordIds":{"type":"array","description":"List of record IDs to delete."}},"required":["model","recordIds"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"fields.set","description":"Partial-update a single field on a record. `values` is the {fieldName: value} pair; using a one-key map keeps the wire payload identical to records.update so the existing /write endpoint applies.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model name"},"recordId":{"type":"integer","description":"Record ID"},"values":{"type":"object","description":"Single-key object: {fieldName: newValue}."}},"required":["model","recordId","values"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflow.action","description":"Trigger an Odoo workflow action (e.g. action_confirm, action_cancel, action_done) on a record by invoking the named method.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"Model name"},"recordId":{"type":"integer","description":"Record ID to act on"},"action":{"type":"string","description":"Workflow method name (e.g. action_confirm)."}},"required":["model","recordId","action"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"okta","displayName":"Okta","description":"Manage Okta users, lifecycle state, groups, memberships, and system-log events.","auth":{"kind":"api-key","hint":"Okta API token. Set domain to the full HTTPS URL of the Okta organization."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.list","description":"List or search users in the Okta organization.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200},"after":{"type":"string"},"search":{"type":"string","description":"Okta Users API search expression."},"filter":{"type":"string","description":"Okta Users API filter expression."},"q":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.get","description":"Read one user by id or login.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"Okta user id or login. Email addresses are accepted as logins."}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.find-by-email","description":"Read a user whose Okta login is the supplied email address.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.list","description":"List or search Okta groups.","parameters":{"type":"object","properties":{"q":{"type":"string"},"filter":{"type":"string"},"after":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":10000}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.users.list","description":"List users assigned to one Okta group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"Okta group id."}},"required":["groupId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"system.logs.list","description":"Read Okta System Log events for audit and synchronization.","parameters":{"type":"object","properties":{"since":{"type":"string","description":"ISO 8601 lower timestamp bound."},"until":{"type":"string","description":"ISO 8601 upper timestamp bound."},"filter":{"type":"string"},"q":{"type":"string"},"after":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":1000},"sortOrder":{"type":"string","enum":["ASCENDING","DESCENDING"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.create","description":"Create an Okta user from a provider-native profile object.","parameters":{"type":"object","properties":{"profile":{"type":"object","description":"Okta user profile. login and email are required by Okta."},"activate":{"type":"boolean"}},"required":["profile"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"users.update","description":"Update an Okta user profile.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"Okta user id or login. Email addresses are accepted as logins."},"profile":{"type":"object"}},"required":["userId","profile"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"users.activate","description":"Activate an Okta user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"Okta user id or login. Email addresses are accepted as logins."},"sendEmail":{"type":"boolean"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.deactivate","description":"Deactivate an Okta user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"Okta user id or login. Email addresses are accepted as logins."},"sendEmail":{"type":"boolean"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.suspend","description":"Suspend an Okta user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"Okta user id or login. Email addresses are accepted as logins."}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.unsuspend","description":"Unsuspend an Okta user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"Okta user id or login. Email addresses are accepted as logins."}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"groups.create","description":"Create an Okta group.","parameters":{"type":"object","properties":{"profile":{"type":"object","description":"Group profile containing at least name."}},"required":["profile"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"groups.update","description":"Update an Okta group profile.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"Okta group id."},"profile":{"type":"object"}},"required":["groupId","profile"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"groups.users.add","description":"Add a user to an Okta group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"Okta group id."},"userId":{"type":"string","description":"Okta user id or login. Email addresses are accepted as logins."}},"required":["groupId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"groups.users.remove","description":"Remove a user from an Okta group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"Okta group id."},"userId":{"type":"string","description":"Okta user id or login. Email addresses are accepted as logins."}},"required":["groupId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"omni-co","displayName":"Omni","description":"Query Omni dashboards and documents, create schedules, and generate queries with natural language.","auth":{"kind":"api-key","hint":"Omni API key."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"documents.create","description":"Create a document in Omni.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"The name of the document"},"folderPath":{"type":"string","description":"The destination folder path"},"scope":{"type":"string","description":"Optional sharing scope for the document"}},"required":["name","folderPath"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.delete","description":"Delete a document from Omni.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"The ID of the document to delete"}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"documents.move","description":"Move a document to a different folder.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"The ID of the document"},"folderPath":{"type":"string","description":"The destination folder path"}},"required":["documentId","folderPath"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"queries.run","description":"Run a query against a dashboard.","parameters":{"type":"object","properties":{"identifier":{"type":"string","description":"The dashboard identifier"},"query":{"type":"object","description":"The query object to run"},"limit":{"type":"integer","description":"Number of rows to return (defaults to 1000)"},"cache":{"type":"string","description":"Optional cache policy"},"formatResults":{"type":"boolean","description":"Apply formatting to numeric and currency values"},"resultType":{"type":"string","description":"Format of query results"},"planOnly":{"type":"boolean","description":"Return query execution plan without running"},"userId":{"type":"string","description":"Optional UUID to run query as specific user"}},"required":["identifier","query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"queries.generate","description":"Generate a query from natural language description.","parameters":{"type":"object","properties":{"identifier":{"type":"string","description":"The dashboard identifier"},"prompt":{"type":"string","description":"Natural language description of the query"},"currentTopicName":{"type":"string","description":"Name of the topic for context"},"branchId":{"type":"string","description":"Optional model branch ID"},"contextQuery":{"type":"object","description":"Optional context query object"},"structured":{"type":"boolean","description":"Return strictly structured query format"}},"required":["identifier","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"schedules.create","description":"Create a schedule for dashboard delivery.","parameters":{"type":"object","properties":{"identifier":{"type":"string","description":"The dashboard identifier"},"schedule":{"type":"string","description":"Cron expression for the schedule"},"timezone":{"type":"string","description":"Timezone for the schedule"},"format":{"type":"string","description":"Output format (pdf, csv, etc)"},"destinationType":{"type":"string","description":"Destination type (webhook, email, etc)"},"url":{"type":"string","description":"Webhook URL for delivery"},"recipients":{"type":"object","description":"Email recipients"},"subject":{"type":"string","description":"Email subject line"},"paperFormat":{"type":"string","description":"Paper format for PDF output"},"paperOrientation":{"type":"string","description":"Paper orientation for PDF output"}},"required":["identifier","schedule","timezone","format","destinationType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"schedules.edit","description":"Edit an existing schedule.","parameters":{"type":"object","properties":{"identifier":{"type":"string","description":"The dashboard identifier"},"scheduleId":{"type":"string","description":"The schedule ID to edit"},"schedule":{"type":"string","description":"Cron expression"},"timezone":{"type":"string","description":"Timezone"},"format":{"type":"string","description":"Output format"},"destinationType":{"type":"string","description":"Destination type"},"url":{"type":"string","description":"Webhook URL"},"recipients":{"type":"object","description":"Email recipients"},"subject":{"type":"string","description":"Email subject"}},"required":["identifier","scheduleId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"schedules.delete","description":"Delete a schedule.","parameters":{"type":"object","properties":{"identifier":{"type":"string","description":"The dashboard identifier"},"scheduleId":{"type":"string","description":"The schedule ID to delete"}},"required":["identifier","scheduleId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"documents.update","description":"Update an existing document title and/or content.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"The ID of the document to update"},"name":{"type":"string","description":"Updated document title"},"content":{"type":"object","description":"Updated document content payload"}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"queries.delete","description":"Delete a saved query by id.","parameters":{"type":"object","properties":{"queryId":{"type":"string","description":"The ID of the saved query to delete"}},"required":["queryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"schedules.run-now","description":"Trigger an immediate run of a scheduled query / dashboard delivery.","parameters":{"type":"object","properties":{"identifier":{"type":"string","description":"The dashboard identifier"},"scheduleId":{"type":"string","description":"The schedule ID to run"}},"required":["identifier","scheduleId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.share","description":"Share a document with a user or group at a given access level.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"The ID of the document to share"},"principalType":{"type":"string","description":"Recipient kind: \"user\" or \"group\"."},"principalId":{"type":"string","description":"User or group id receiving access."},"accessLevel":{"type":"string","description":"Access level (e.g. viewer, editor)."}},"required":["documentId","principalType","principalId","accessLevel"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"omnihr","displayName":"Omni HR","description":"Smart, all-in-one HR platform for managing employees, time tracking, and HR workflows.","auth":{"kind":"api-key","hint":"OmniHR credentials: username (email), password, and organization origin URL (e.g., https://youraccount.omnihr.com). The connection must store these in metadata."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"employees.get.system.id","description":"Get the system ID of an employee by email address.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"employees.get.info","description":"Retrieve detailed information about an employee.","parameters":{"type":"object","properties":{"systemId":{"type":"integer"}},"required":["systemId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"employees.get.organizational.chart","description":"Get the organizational chart structure for an employee, showing reporting relationships.","parameters":{"type":"object","properties":{"systemId":{"type":"integer"}},"required":["systemId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"employees.get.direct.reports","description":"Retrieve the list of direct reports for an employee.","parameters":{"type":"object","properties":{"systemId":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["systemId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"onedrive","displayName":"OneDrive","description":"Read and watch files in the user's OneDrive. List a folder, fetch a document's contents (Word/Excel/PowerPoint/PDF/images), and subscribe to folder change notifications via Graph subscriptions.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["https://graph.microsoft.com/Files.Read","offline_access"],"clientIdEnv":"MS_OAUTH_CLIENT_ID","clientSecretEnv":"MS_OAUTH_CLIENT_SECRET"},"category":"storage","defaultConsistencyModel":"authoritative","rateLimit":{"requests":250,"windowMs":1000,"scope":"oauth-client"},"capabilities":[{"name":"list_files","class":"read","description":"List driveItems visible to the connected OneDrive account. Optionally scope to a folder by id and/or pass a Graph $search (KQL), e.g. 'NDA filetype:pdf'.","requiredScopes":["https://graph.microsoft.com/Files.Read"],"parameters":{"type":"object","properties":{"folderId":{"type":"string","description":"driveItem id of a folder; when present, restricts to direct children. Defaults to the drive root."},"query":{"type":"string","description":"Graph $search KQL; mutually exclusive with $orderby (we drop orderby when search is set)."},"top":{"type":"integer","minimum":1,"maximum":1000,"default":100},"skipToken":{"type":"string","description":"Opaque pagination cursor extracted from a previous @odata.nextLink."}}}},{"name":"read_file","class":"read","description":"Read a OneDrive file's contents. Text-like mime types (text/*, JSON, XML, CSV) are returned utf-8; binary types (PDF, Office docs, images) are returned base64.","requiredScopes":["https://graph.microsoft.com/Files.Read"],"parameters":{"type":"object","properties":{"fileId":{"type":"string","description":"driveItem id of the file."}},"required":["fileId"]}},{"name":"watch_folder","class":"mutation","description":"Register a Graph subscription for change notifications on a folder. Graph POSTs to `notificationUrl`; the subscription expires at `expirationDateTime` (max ~30 days for OneDrive). Caller must renew before expiry.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Files.ReadWrite"],"parameters":{"type":"object","properties":{"folderId":{"type":"string","description":"driveItem id of the folder to watch; pass \"root\" to watch the drive root."},"notificationUrl":{"type":"string","description":"HTTPS endpoint Graph will POST change notifications to."},"ttlMinutes":{"type":"integer","minimum":1,"maximum":43200,"default":4230,"description":"Subscription lifetime in minutes. Graph caps OneDrive at ~30 days."},"clientState":{"type":"string","description":"Opaque value Graph echoes back on each notification. Defaults to the idempotency key."}},"required":["folderId","notificationUrl"]}},{"name":"files.upload","class":"mutation","description":"Upload a new file via Graph small-file upload (PUT /items/{parent}:/{name}:/content). Suitable for <4MB payloads; larger files require an upload session, which is out of scope here. fileContent may be utf-8 text or base64 (when encoding=\"base64\" the buffer is decoded before PUT).","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Files.ReadWrite"],"parameters":{"type":"object","properties":{"folderId":{"type":"string","description":"driveItem id of destination folder; pass \"root\" for the drive root."},"fileName":{"type":"string","description":"Name of the new file, including extension."},"fileContent":{"type":"string","description":"File contents. utf-8 by default; base64-encoded when encoding=\"base64\"."},"encoding":{"type":"string","enum":["utf-8","base64"],"default":"utf-8"},"contentType":{"type":"string","description":"Optional MIME type override sent as content-type on the PUT."}},"required":["folderId","fileName","fileContent"]}},{"name":"files.delete","class":"mutation","description":"Delete a file or folder by driveItem id. Returns 204 with no body on success.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Files.ReadWrite"],"parameters":{"type":"object","properties":{"itemId":{"type":"string","description":"driveItem id of the file or folder to delete."}},"required":["itemId"]}},{"name":"files.move","class":"mutation","description":"Move (or rename) a driveItem by PATCHing its parentReference and/or name. Supply newParentId, newName, or both.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Files.ReadWrite"],"parameters":{"type":"object","properties":{"itemId":{"type":"string","description":"driveItem id of the file or folder to move."},"newParentId":{"type":"string","description":"Destination folder id; pass \"root\" for the drive root. Omit to rename in place."},"newName":{"type":"string","description":"New name for the item. Omit to keep the existing name."}},"required":["itemId"]}},{"name":"files.share","class":"mutation","description":"Create a sharing link via POST /items/{id}/createLink. type is one of 'view' | 'edit' | 'embed'; scope is one of 'anonymous' | 'organization'.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Files.ReadWrite"],"parameters":{"type":"object","properties":{"itemId":{"type":"string","description":"driveItem id to share."},"type":{"type":"string","enum":["view","edit","embed"],"default":"view"},"scope":{"type":"string","enum":["anonymous","organization"],"default":"anonymous"},"password":{"type":"string","description":"Optional password for the link (where supported)."},"expirationDateTime":{"type":"string","description":"Optional ISO-8601 expiration timestamp."}},"required":["itemId"]}},{"name":"folders.create","class":"mutation","description":"Create a new folder under {parentId} via POST /items/{parent}/children. conflictBehavior defaults to \"fail\" so re-issuing the same idempotency key against an existing name surfaces a 409 rather than silently creating a sibling folder.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Files.ReadWrite"],"parameters":{"type":"object","properties":{"parentId":{"type":"string","description":"Parent folder driveItem id; pass \"root\" for the drive root."},"name":{"type":"string","description":"Name of the new folder."},"conflictBehavior":{"type":"string","enum":["fail","replace","rename"],"default":"fail"}},"required":["parentId","name"]}}]},{"kind":"onelogin","displayName":"OneLogin","description":"Provision OneLogin users, groups, and user group assignments with customer-owned API credentials.","auth":{"kind":"api-key","hint":"JSON credential bundle: {\"clientId\":\"...\",\"clientSecret\":\"...\",\"region\":\"us|eu\"}."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.list","description":"List or filter OneLogin users.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":1000},"page":{"type":"integer","minimum":1},"email":{"type":"string"},"username":{"type":"string"},"status":{"type":"integer"},"group_id":{"type":"integer"},"role_id":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.get","description":"Read one OneLogin user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"OneLogin user id."}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.create","description":"Create a OneLogin user from a provider-native user object.","parameters":{"type":"object","properties":{"user":{"type":"object"}},"required":["user"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.update","description":"Update mutable fields on a OneLogin user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"OneLogin user id."},"user":{"type":"object"}},"required":["userId","user"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"users.deactivate","description":"Set a OneLogin user to suspended status without deleting the record.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"OneLogin user id."}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"groups.list","description":"List OneLogin groups.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":1000},"page":{"type":"integer","minimum":1},"name":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.get","description":"Read one OneLogin group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"OneLogin group id."}},"required":["groupId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.users.add","description":"Assign a OneLogin user to a group. OneLogin permits one group per user.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"OneLogin group id."},"userId":{"type":"string","description":"OneLogin user id."}},"required":["groupId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"groups.users.remove","description":"Remove a OneLogin user from the expected current group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"OneLogin group id."},"userId":{"type":"string","description":"OneLogin user id."}},"required":["groupId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"onespan-sign","displayName":"OneSpan Sign","description":"Create, inspect, send, and delete OneSpan Sign packages, documents, and signer roles.","auth":{"kind":"api-key","hint":"Base64-encoded OneSpan Sign API credential for HTTP Basic authentication."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"packages.list","description":"List OneSpan signing packages with paging and status filters.","parameters":{"type":"object","properties":{"from":{"type":"integer","minimum":0},"to":{"type":"integer","minimum":1},"query":{"type":"string"},"status":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"packages.get","description":"Read a signing package, roles, documents, and status.","parameters":{"type":"object","properties":{"packageId":{"type":"string"}},"required":["packageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"packages.create","description":"Create a draft OneSpan signing package.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"emailMessage":{"type":"string"},"roles":{"type":"array","items":{"type":"object"}},"documents":{"type":"array","items":{"type":"object"}},"settings":{"type":"object"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"packages.send","description":"Move a draft package to SENT and notify its signer roles.","parameters":{"type":"object","properties":{"packageId":{"type":"string"}},"required":["packageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"packages.delete","description":"Delete a OneSpan signing package.","parameters":{"type":"object","properties":{"packageId":{"type":"string"}},"required":["packageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.add","description":"Add a document descriptor to a OneSpan package.","parameters":{"type":"object","properties":{"packageId":{"type":"string"},"document":{"type":"object"}},"required":["packageId","document"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"roles.add","description":"Add a signer role to a OneSpan package.","parameters":{"type":"object","properties":{"packageId":{"type":"string"},"role":{"type":"object"}},"required":["packageId","role"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"open-phone","displayName":"OpenPhone","description":"Send messages, manage contacts, and retrieve call summaries via OpenPhone.","auth":{"kind":"api-key","hint":"OpenPhone API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"messages.send","description":"Send an SMS message to one or more recipients.","parameters":{"type":"object","properties":{"content":{"type":"string"},"from":{"type":"string"},"to":{"type":"array","items":{"type":"string"}},"userId":{"type":"string"}},"required":["content","from","to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.create","description":"Create a new contact in OpenPhone.","parameters":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string"},"role":{"type":"string"},"emails":{"type":"array","items":{"type":"object"}},"phoneNumbers":{"type":"array","items":{"type":"object"}},"customFields":{"type":"object"},"source":{"type":"string"},"sourceUrl":{"type":"string"},"externalId":{"type":"string"}},"required":["firstName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update an existing contact in OpenPhone.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string"},"role":{"type":"string"},"emails":{"type":"array","items":{"type":"object"}},"phoneNumbers":{"type":"array","items":{"type":"object"}},"customFields":{"type":"object"},"source":{"type":"string"},"sourceUrl":{"type":"string"},"externalId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"calls.summary","description":"Retrieve a summary of a call.","parameters":{"type":"object","properties":{"callId":{"type":"string"}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.list","description":"List recent SMS/voice messages on a phone number.","parameters":{"type":"object","properties":{"phoneNumberId":{"type":"string","description":"OpenPhone phone number id (required)."},"participants":{"type":"array","items":{"type":"string"},"description":"Filter messages by participant phone numbers (E.164)."},"maxResults":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum messages to return (1-100)."},"pageToken":{"type":"string","description":"Opaque pagination cursor returned by a prior call."}},"required":["phoneNumberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.create","description":"Place an outbound call from an OpenPhone number to an external participant.","parameters":{"type":"object","properties":{"from":{"type":"string","description":"OpenPhone phone number (E.164) placing the call."},"to":{"type":"string","description":"Destination phone number (E.164)."},"userId":{"type":"string","description":"OpenPhone user id initiating the call (optional; defaults to the API key owner)."}},"required":["from","to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.delete","description":"Delete a contact from OpenPhone by contact id.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.transfer","description":"Transfer an active call to another OpenPhone user or external phone number.","parameters":{"type":"object","properties":{"callId":{"type":"string","description":"Identifier of the active call to transfer."},"to":{"type":"string","description":"Destination phone number (E.164) for an external transfer. Mutually exclusive with toUserId."},"toUserId":{"type":"string","description":"OpenPhone user id to transfer the call to. Mutually exclusive with `to`."}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"open-router","displayName":"OpenRouter","description":"Use any AI model to generate code, text, or images via OpenRouter.ai.","auth":{"kind":"api-key","hint":"OpenRouter API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"models.list","description":"List available models on OpenRouter.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"completions.create","description":"Generate a completion using a specified model.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"The model to use for generation."},"messages":{"type":"array","description":"Array of message objects with role and content."},"temperature":{"type":"number","description":"Controls randomness; lower values are more deterministic."},"top_p":{"type":"number","description":"Nucleus sampling parameter."},"max_tokens":{"type":"integer","description":"Maximum tokens to generate."}},"required":["model","messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"credits.get","description":"Get the current account credit balance and total usage.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"keys.list","description":"List provisioning API keys on the account.","parameters":{"type":"object","properties":{"offset":{"type":"integer","description":"Pagination offset."},"include_disabled":{"type":"boolean","description":"Include revoked/disabled keys."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"keys.create","description":"Create a new provisioning API key on the account.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Human-readable name for the key."},"label":{"type":"string","description":"Optional label for the key."},"limit":{"type":"number","description":"Optional credit limit in USD."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"keys.revoke","description":"Revoke an existing provisioning API key by its hash.","parameters":{"type":"object","properties":{"hash":{"type":"string","description":"Hash identifier of the key to revoke."}},"required":["hash"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"openai","displayName":"OpenAI","description":"Call OpenAI Platform APIs (chat/completions, responses, embeddings, images, audio, files, fine-tuning) with a project-scoped secret key.","auth":{"kind":"api-key","hint":"OpenAI secret key (sk-proj-... or sk-...) from https://platform.openai.com/api-keys. Prefer a project-scoped key restricted to the workloads you intend to authorize."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"models.list","description":"List models available to the authenticated project.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"models.get","description":"Retrieve a single model by id.","parameters":{"type":"object","properties":{"model":{"type":"string"}},"required":["model"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"chat.completions.create","description":"Create a chat completion. Set stream=false; the platform SDK is non-streaming. Use responses.create for the modern Responses API.","parameters":{"type":"object","properties":{"model":{"type":"string"},"messages":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["system","user","assistant","tool","developer"]},"content":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"text":{"type":"string"},"image_url":{"type":"object","properties":{"url":{"type":"string"}}}},"required":["type"]}}]},"name":{"type":"string"},"tool_call_id":{"type":"string"}},"required":["role"]}},"temperature":{"type":"number","minimum":0,"maximum":2},"top_p":{"type":"number","minimum":0,"maximum":1},"max_tokens":{"type":"integer","minimum":1},"max_completion_tokens":{"type":"integer","minimum":1},"n":{"type":"integer","minimum":1},"stop":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"presence_penalty":{"type":"number"},"frequency_penalty":{"type":"number"},"seed":{"type":"integer"},"response_format":{"type":"object"},"tools":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["function"]},"function":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"parameters":{"type":"object"},"strict":{"type":"boolean"}},"required":["name"]}},"required":["type","function"]}},"tool_choice":{"oneOf":[{"type":"string"},{"type":"object"}]},"parallel_tool_calls":{"type":"boolean"},"user":{"type":"string"},"stream":{"type":"boolean","const":false},"reasoning_effort":{"type":"string","enum":["minimal","low","medium","high"]}},"required":["model","messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"responses.create","description":"Create a response via the modern Responses API. Supports text+vision input, hosted tools (web_search, file_search, code_interpreter, computer_use), and structured output.","parameters":{"type":"object","properties":{"model":{"type":"string"},"input":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object"}}]},"instructions":{"type":"string"},"previous_response_id":{"type":"string"},"tools":{"type":"array","items":{"type":"object"}},"tool_choice":{"oneOf":[{"type":"string"},{"type":"object"}]},"temperature":{"type":"number","minimum":0,"maximum":2},"top_p":{"type":"number","minimum":0,"maximum":1},"max_output_tokens":{"type":"integer","minimum":1},"metadata":{"type":"object"},"store":{"type":"boolean"},"reasoning":{"type":"object"},"text":{"type":"object"},"parallel_tool_calls":{"type":"boolean"},"stream":{"type":"boolean","const":false},"user":{"type":"string"}},"required":["model","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"responses.get","description":"Retrieve a previously created Response by id.","parameters":{"type":"object","properties":{"responseId":{"type":"string"}},"required":["responseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"responses.delete","description":"Delete a stored Response (only valid when the original was stored).","parameters":{"type":"object","properties":{"responseId":{"type":"string"}},"required":["responseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"responses.cancel","description":"Cancel an in-flight background Response.","parameters":{"type":"object","properties":{"responseId":{"type":"string"}},"required":["responseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"embeddings.create","description":"Create an embedding vector for the given input(s).","parameters":{"type":"object","properties":{"model":{"type":"string"},"input":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"array","items":{"type":"array","items":{"type":"integer"}}}]},"encoding_format":{"type":"string","enum":["float","base64"]},"dimensions":{"type":"integer","minimum":1},"user":{"type":"string"}},"required":["model","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"images.generate","description":"Generate an image from a prompt (DALL·E / gpt-image-1).","parameters":{"type":"object","properties":{"model":{"type":"string"},"prompt":{"type":"string"},"n":{"type":"integer","minimum":1,"maximum":10},"size":{"type":"string"},"quality":{"type":"string"},"style":{"type":"string"},"response_format":{"type":"string","enum":["url","b64_json"]},"user":{"type":"string"}},"required":["prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"audio.speech.create","description":"Synthesize speech audio from text (tts-1, tts-1-hd, gpt-4o-mini-tts).","parameters":{"type":"object","properties":{"model":{"type":"string"},"input":{"type":"string"},"voice":{"type":"string"},"response_format":{"type":"string","enum":["mp3","opus","aac","flac","wav","pcm"]},"speed":{"type":"number","minimum":0.25,"maximum":4},"instructions":{"type":"string"}},"required":["model","input","voice"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"moderations.create","description":"Classify content against OpenAI usage policies.","parameters":{"type":"object","properties":{"model":{"type":"string"},"input":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.list","description":"List files uploaded to the project (fine-tuning, batch, vector store, etc.).","parameters":{"type":"object","properties":{"purpose":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":10000},"order":{"type":"string","enum":["asc","desc"]},"after":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.get","description":"Retrieve a file metadata record by id.","parameters":{"type":"object","properties":{"fileId":{"type":"string"}},"required":["fileId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.delete","description":"Delete an uploaded file.","parameters":{"type":"object","properties":{"fileId":{"type":"string"}},"required":["fileId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"fineTuning.jobs.list","description":"List fine-tuning jobs for the project.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"after":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"fineTuning.jobs.get","description":"Retrieve a fine-tuning job by id.","parameters":{"type":"object","properties":{"jobId":{"type":"string"}},"required":["jobId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"fineTuning.jobs.create","description":"Start a fine-tuning job from a previously uploaded training file.","parameters":{"type":"object","properties":{"model":{"type":"string"},"training_file":{"type":"string"},"validation_file":{"type":"string"},"suffix":{"type":"string"},"method":{"type":"object"},"hyperparameters":{"type":"object"},"integrations":{"type":"array","items":{"type":"object"}},"seed":{"type":"integer"}},"required":["model","training_file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"fineTuning.jobs.cancel","description":"Cancel a running fine-tuning job.","parameters":{"type":"object","properties":{"jobId":{"type":"string"}},"required":["jobId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"batches.create","description":"Submit a batch job over an uploaded JSONL input file.","parameters":{"type":"object","properties":{"input_file_id":{"type":"string"},"endpoint":{"type":"string"},"completion_window":{"type":"string","enum":["24h"]},"metadata":{"type":"object"}},"required":["input_file_id","endpoint","completion_window"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"batches.get","description":"Retrieve a batch job by id.","parameters":{"type":"object","properties":{"batchId":{"type":"string"}},"required":["batchId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"batches.list","description":"List batch jobs for the project.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"after":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"batches.cancel","description":"Cancel an in-flight batch job.","parameters":{"type":"object","properties":{"batchId":{"type":"string"}},"required":["batchId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"openmic-ai","displayName":"OpenMic AI","description":"Create and manage phone calls, retrieve bot and call information using OpenMic AI platform.","auth":{"kind":"api-key","hint":"OpenMic AI API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.create","description":"Create a new phone call.","parameters":{"type":"object","properties":{"fromNumber":{"type":"string","description":"The number you own in E.164 format (e.g., +1234567890)"},"toNumber":{"type":"string","description":"The number to call in E.164 format (e.g., +0987654321)"},"uid":{"type":"string","description":"The unique identifier of the bot"},"overrideAgentId":{"type":"string","description":"Override agent ID (optional)"},"customerId":{"type":"string","description":"Customer identifier for tracking (optional)"},"dynamicVariables":{"type":"object","description":"Key-value pairs to replace in the prompt (optional)"},"callbackUrl":{"type":"string","description":"Callback URL to receive call events (optional)"}},"required":["fromNumber","toNumber","uid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bots.list","description":"List all bots with optional filtering.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Filter by bot name (partial match)"},"createdAfter":{"type":"string","description":"Filter bots created after this date (ISO 8601 format)"},"createdBefore":{"type":"string","description":"Filter bots created before this date (ISO 8601 format)"},"limit":{"type":"integer","description":"Maximum number of bots to return (1-100)"},"offset":{"type":"integer","description":"Number of bots to skip for pagination"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bots.find","description":"Find a specific bot by ID.","parameters":{"type":"object","properties":{"botId":{"type":"string","description":"The unique identifier of the bot"}},"required":["botId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.list","description":"List all calls with optional filtering.","parameters":{"type":"object","properties":{"callId":{"type":"string","description":"The unique identifier of the call"},"botId":{"type":"string","description":"Filter by bot ID"},"fromDate":{"type":"string","description":"Filter calls from this date (ISO 8601 format)"},"toDate":{"type":"string","description":"Filter calls to this date (ISO 8601 format)"},"callStatus":{"type":"string","description":"Filter by call status"},"callType":{"type":"string","description":"Filter by call type"},"limit":{"type":"integer","description":"Maximum number of calls to return (1-100)"},"offset":{"type":"integer","description":"Number of calls to skip for pagination"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.find","description":"Find a specific call by ID.","parameters":{"type":"object","properties":{"callId":{"type":"string","description":"The unique identifier of the call"}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bots.create","description":"Create a new voice bot.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Display name of the bot"},"prompt":{"type":"string","description":"System prompt that drives the bot"},"voice":{"type":"string","description":"Voice identifier (optional)"},"settings":{"type":"object","description":"Additional bot configuration (optional)"}},"required":["name","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bots.update","description":"Update bot prompt, voice, or settings.","parameters":{"type":"object","properties":{"botId":{"type":"string","description":"The unique identifier of the bot"},"name":{"type":"string","description":"Updated display name (optional)"},"prompt":{"type":"string","description":"Updated system prompt (optional)"},"voice":{"type":"string","description":"Updated voice identifier (optional)"},"settings":{"type":"object","description":"Updated bot configuration (optional)"}},"required":["botId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bots.delete","description":"Delete a bot.","parameters":{"type":"object","properties":{"botId":{"type":"string","description":"The unique identifier of the bot to delete"}},"required":["botId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.cancel","description":"Cancel an outbound call in progress.","parameters":{"type":"object","properties":{"callId":{"type":"string","description":"The unique identifier of the call to cancel"}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"opnform","displayName":"Opnform","description":"Create beautiful online forms and surveys with unlimited fields and submissions.","auth":{"kind":"api-key","hint":"Opnform API key."},"category":"webhook","defaultConsistencyModel":"authoritative","capabilities":[{"name":"webhooks.configure","description":"Configure a webhook to receive form submission events.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"webhookUrl":{"type":"string"},"events":{"type":"array","items":{"type":"string"}}},"required":["formId","webhookUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.get","description":"Retrieve details of a specific form.","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.list","description":"List all forms in the workspace.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"submissions.list","description":"List submissions for a specific form.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"submissions.get","description":"Retrieve a specific form submission.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"submissionId":{"type":"string"}},"required":["formId","submissionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.create","description":"Create a new form.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"Form title"},"description":{"type":"string","description":"Form description (optional)"},"properties":{"type":"array","description":"Form field definitions","items":{"type":"object"}},"settings":{"type":"object","description":"Form settings (optional)"}},"required":["title","properties"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.update","description":"Update form schema or settings.","parameters":{"type":"object","properties":{"formId":{"type":"string","description":"The form identifier"},"title":{"type":"string","description":"Updated form title (optional)"},"description":{"type":"string","description":"Updated description (optional)"},"properties":{"type":"array","description":"Updated form field definitions (optional)","items":{"type":"object"}},"settings":{"type":"object","description":"Updated form settings (optional)"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.delete","description":"Delete a form.","parameters":{"type":"object","properties":{"formId":{"type":"string","description":"The form identifier"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"submissions.delete","description":"Delete a form submission.","parameters":{"type":"object","properties":{"formId":{"type":"string","description":"The form identifier"},"submissionId":{"type":"string","description":"The submission identifier"}},"required":["formId","submissionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"opportify","displayName":"Opportify","description":"Analyze emails and IP addresses with Opportify.","auth":{"kind":"api-key","hint":"Opportify API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"analyze.email","description":"Analyze an email address.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"analyze.ip.address","description":"Analyze an IP address.","parameters":{"type":"object","properties":{"ip":{"type":"string"}},"required":["ip"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"opsgenie","displayName":"Opsgenie","description":"Use an existing Opsgenie account to manage alerts and incidents, attach notes, and read schedules, on-call assignments, teams, and users.","auth":{"kind":"api-key","hint":"Opsgenie API key with access to the selected alert, incident, schedule, team, and user operations."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"alerts.list","description":"List Opsgenie alerts, optionally filtered by a search query (Opsgenie query DSL), with cursor-style offset pagination.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Opsgenie alert search expression, e.g. \"status: open AND priority: P1\"."},"searchIdentifier":{"type":"string","description":"Saved search id or name to reuse server-side."},"searchIdentifierType":{"type":"string","enum":["id","name"],"description":"How searchIdentifier should be resolved."},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":100},"sort":{"type":"string","description":"Sort key, e.g. \"createdAt\", \"updatedAt\", \"tinyId\", \"priority\"."},"order":{"type":"string","enum":["asc","desc"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"alerts.get","description":"Read a single alert by id, tiny id, or alias. `identifierType` defaults to \"id\" if omitted.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"identifierType":{"type":"string","enum":["id","tiny","alias"]}},"required":["identifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"alerts.create","description":"Create an Opsgenie alert. `message` is required; `responders`, `tags`, `priority`, and `alias` route and de-duplicate.","parameters":{"type":"object","properties":{"message":{"type":"string","description":"Alert title (max 130 chars)."},"alias":{"type":"string","description":"Client-side dedup key; subsequent creates with the same alias are merged."},"description":{"type":"string"},"responders":{"type":"array","description":"Routing targets; each entry references a team / user / schedule / escalation.","items":{"type":"object"}},"visibleTo":{"type":"array","description":"Optional team / user list that restricts who can see the alert.","items":{"type":"object"}},"actions":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"details":{"type":"object","description":"Free-form key/value metadata attached to the alert."},"entity":{"type":"string","description":"Source entity that raised the alert."},"source":{"type":"string"},"priority":{"type":"string","enum":["P1","P2","P3","P4","P5"]},"user":{"type":"string","description":"Display name of the request actor."},"note":{"type":"string"}},"required":["message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"alerts.acknowledge","description":"Acknowledge an alert. The alert is identified by id, tiny id, or alias.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"identifierType":{"type":"string","enum":["id","tiny","alias"]},"user":{"type":"string"},"source":{"type":"string"},"note":{"type":"string"}},"required":["identifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"alerts.close","description":"Close an alert.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"identifierType":{"type":"string","enum":["id","tiny","alias"]},"user":{"type":"string"},"source":{"type":"string"},"note":{"type":"string"}},"required":["identifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"alerts.notes.list","description":"List notes attached to an alert.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"identifierType":{"type":"string","enum":["id","tiny","alias"]},"offset":{"type":"string","description":"Opaque pagination offset returned by a prior call."},"direction":{"type":"string","enum":["next","prev"]},"limit":{"type":"integer","minimum":1,"maximum":100},"order":{"type":"string","enum":["asc","desc"]}},"required":["identifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"alerts.notes.add","description":"Attach a note to an alert.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"identifierType":{"type":"string","enum":["id","tiny","alias"]},"note":{"type":"string"},"user":{"type":"string"},"source":{"type":"string"}},"required":["identifier","note"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"incidents.list","description":"List Opsgenie incidents using the documented incident query DSL with cursor-style offset pagination.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Incident search expression, e.g. \"status: open AND priority: P1\"."},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":100},"sort":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"incidents.get","description":"Read a single incident by id or tiny id.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"identifierType":{"type":"string","enum":["id","tiny"]}},"required":["identifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"incidents.create","description":"Open an Opsgenie incident. `message` is required; `responders`, `priority`, and `serviceId` route the incident.","parameters":{"type":"object","properties":{"message":{"type":"string"},"description":{"type":"string"},"responders":{"type":"array","items":{"type":"object"}},"tags":{"type":"array","items":{"type":"string"}},"details":{"type":"object"},"priority":{"type":"string","enum":["P1","P2","P3","P4","P5"]},"note":{"type":"string"},"serviceId":{"type":"string","description":"Opsgenie service id the incident is opened on."},"statusPageEntry":{"type":"object","description":"Optional status-page payload (title + detail) for customer-facing communication."},"notifyStakeholders":{"type":"boolean"},"impactedServices":{"type":"array","items":{"type":"string"}}},"required":["message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"incidents.close","description":"Resolve / close an Opsgenie incident.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"identifierType":{"type":"string","enum":["id","tiny"]},"note":{"type":"string"}},"required":["identifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"incidents.notes.add","description":"Attach a note to an incident.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"identifierType":{"type":"string","enum":["id","tiny"]},"note":{"type":"string"}},"required":["identifier","note"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"schedules.list","description":"List on-call schedules with offset pagination.","parameters":{"type":"object","properties":{"expand":{"type":"array","description":"Optional expansion fields, e.g. \"rotation\".","items":{"type":"string"}}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"schedules.get","description":"Read a single schedule by id or name.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"identifierType":{"type":"string","enum":["id","name"]}},"required":["identifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"schedules.timeline","description":"Read the rendered timeline for a schedule between `interval` units relative to `date`.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"identifierType":{"type":"string","enum":["id","name"]},"intervalUnit":{"type":"string","enum":["days","weeks","months"]},"interval":{"type":"integer","minimum":1},"date":{"type":"string","description":"ISO-8601 anchor date; defaults to now if omitted."},"expand":{"type":"array","items":{"type":"string"}}},"required":["identifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"oncalls.current","description":"Return the current on-call participants for a schedule, optionally flattening nested escalations.","parameters":{"type":"object","properties":{"scheduleIdentifier":{"type":"string"},"scheduleIdentifierType":{"type":"string","enum":["id","name"]},"flat":{"type":"boolean","description":"If true, returns only the flat list of users."},"date":{"type":"string","description":"ISO-8601 timestamp for the query."}},"required":["scheduleIdentifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"oncalls.next","description":"Return the next on-call rotation for a schedule starting at `date` (or now).","parameters":{"type":"object","properties":{"scheduleIdentifier":{"type":"string"},"scheduleIdentifierType":{"type":"string","enum":["id","name"]},"flat":{"type":"boolean"},"date":{"type":"string"}},"required":["scheduleIdentifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"teams.list","description":"List all teams in the Opsgenie workspace.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"teams.get","description":"Read a single team by id or name.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"identifierType":{"type":"string","enum":["id","name"]}},"required":["identifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.list","description":"List Opsgenie users with offset pagination and an optional search query.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Search expression matched against user fields."},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":100},"sort":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.get","description":"Read a single user by id or username.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"expand":{"type":"array","items":{"type":"string"}}},"required":["identifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"oracle-database","displayName":"Oracle Database","description":"Query, insert, update, and delete Oracle Database rows via SQL.","auth":{"kind":"api-key","hint":"Oracle Database connection credentials."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"rows.find","description":"Query rows from a table with optional WHERE conditions.","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Table name."},"filter":{"type":"object","description":"WHERE conditions (e.g., { \"status\": \"active\" })."},"columns":{"type":"array","items":{"type":"string"},"description":"Columns to select."},"limit":{"type":"integer","description":"Maximum rows to return."},"orderBy":{"type":"string","description":"ORDER BY clause."}},"required":["table"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rows.insert","description":"Insert a single row into a table.","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Table name."},"row":{"type":"object","description":"Column names and values to insert."}},"required":["table","row"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rows.insertBatch","description":"Insert multiple rows into a table.","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Table name."},"rows":{"type":"array","items":{"type":"object"},"description":"Array of row objects."}},"required":["table","rows"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rows.update","description":"Update rows matching filter conditions.","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Table name."},"values":{"type":"object","description":"Column names and new values."},"filter":{"type":"object","description":"WHERE conditions to match rows."}},"required":["table","values","filter"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"rows.delete","description":"Delete rows matching filter conditions.","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Table name."},"filter":{"type":"object","description":"WHERE conditions to match rows for deletion."}},"required":["table","filter"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sql.execute","description":"Run custom SQL or PL/SQL with bind parameters.","parameters":{"type":"object","properties":{"sql":{"type":"string","description":"SQL or PL/SQL to execute. Use :param for bind parameters."},"binds":{"type":"object","description":"Key-value pairs for bind variables."}},"required":["sql"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"orimon","displayName":"Orimon","description":"Send messages to Orimon chatbots and manage conversations.","auth":{"kind":"api-key","hint":"Orimon API credentials (Tenant ID and API key)."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"messages.send","description":"Send a message to an Orimon chatbot.","parameters":{"type":"object","properties":{"tenantId":{"type":"string","description":"Tenant ID from Orimon dashboard."},"messageText":{"type":"string","description":"The message to send."},"messageId":{"type":"string","description":"Optional unique identifier for this message."},"markdown":{"type":"boolean","description":"Whether the message uses markdown formatting."}},"required":["tenantId","messageText","markdown"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.list","description":"List conversations for a tenant.","parameters":{"type":"object","properties":{"tenantId":{"type":"string","description":"Tenant ID."},"limit":{"type":"integer","description":"Maximum number of conversations to return."},"offset":{"type":"integer","description":"Pagination offset."}},"required":["tenantId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversations.get","description":"Get details of a specific conversation.","parameters":{"type":"object","properties":{"tenantId":{"type":"string","description":"Tenant ID."},"conversationId":{"type":"string","description":"Conversation ID."}},"required":["tenantId","conversationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversations.close","description":"Close a conversation.","parameters":{"type":"object","properties":{"tenantId":{"type":"string","description":"Tenant ID."},"conversationId":{"type":"string","description":"Conversation ID to close."}},"required":["tenantId","conversationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.create","description":"Create a new lead from a conversation.","parameters":{"type":"object","properties":{"tenantId":{"type":"string","description":"Tenant ID."},"conversationId":{"type":"string","description":"Conversation ID."},"name":{"type":"string","description":"Lead name."},"email":{"type":"string","description":"Lead email address."},"phone":{"type":"string","description":"Lead phone number."},"metadata":{"type":"object","description":"Additional lead metadata."}},"required":["tenantId","conversationId","name","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update","description":"Update an existing lead.","parameters":{"type":"object","properties":{"tenantId":{"type":"string","description":"Tenant ID."},"leadId":{"type":"string","description":"Lead ID to update."},"name":{"type":"string","description":"Updated lead name (optional)."},"email":{"type":"string","description":"Updated email (optional)."},"phone":{"type":"string","description":"Updated phone (optional)."},"metadata":{"type":"object","description":"Updated metadata (optional)."}},"required":["tenantId","leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.delete","description":"Delete a lead.","parameters":{"type":"object","properties":{"tenantId":{"type":"string","description":"Tenant ID."},"leadId":{"type":"string","description":"Lead ID to delete."}},"required":["tenantId","leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.assign","description":"Assign a conversation to an agent.","parameters":{"type":"object","properties":{"tenantId":{"type":"string","description":"Tenant ID."},"conversationId":{"type":"string","description":"Conversation ID to assign."},"agentId":{"type":"string","description":"Agent ID to assign the conversation to."}},"required":["tenantId","conversationId","agentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.tag","description":"Add a tag to a conversation.","parameters":{"type":"object","properties":{"tenantId":{"type":"string","description":"Tenant ID."},"conversationId":{"type":"string","description":"Conversation ID."},"tag":{"type":"string","description":"Tag to add to the conversation."}},"required":["tenantId","conversationId","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"outlook-mail","displayName":"Outlook Mail","description":"Read inbox messages from a Microsoft 365 / Outlook mailbox, fetch a single message with body + attachment manifest, reply on a conversation, and subscribe to a folder for new mail webhooks.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["https://graph.microsoft.com/Mail.Read","https://graph.microsoft.com/Mail.Send","https://graph.microsoft.com/Mail.ReadWrite","offline_access"],"clientIdEnv":"MS_OAUTH_CLIENT_ID","clientSecretEnv":"MS_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"authoritative","rateLimit":{"requests":250,"windowMs":1000,"scope":"oauth-client"},"capabilities":[{"name":"list_messages","class":"read","description":"List mailbox messages in a folder (default 'inbox'). Optional `query` becomes a Graph `$search` (KQL); `top` is the page size (max 1000). Returns headers, no bodies.","requiredScopes":["https://graph.microsoft.com/Mail.Read"],"parameters":{"type":"object","properties":{"folder":{"type":"string","description":"Well-known folder name (inbox, drafts, sentitems, ...) or folder id. Default: 'inbox'."},"query":{"type":"string","description":"Graph $search KQL, e.g. 'from:billing@stripe.com'."},"top":{"type":"integer","minimum":1,"maximum":1000,"default":25},"skipToken":{"type":"string","description":"Opaque pagination cursor from a previous nextLink."}}}},{"name":"read_message","class":"read","description":"Read a single Outlook message including body (HTML or text per upstream content type) and a flat manifest of attachments. Attachment bytes are not inlined.","requiredScopes":["https://graph.microsoft.com/Mail.Read"],"parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},{"name":"send_reply","class":"mutation","description":"Send a reply on a conversation. Uses Graph createReply (or createReplyAll) + patch body + send. Threading via inherited internetMessageHeaders.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Mail.Send","https://graph.microsoft.com/Mail.Read"],"parameters":{"type":"object","properties":{"messageId":{"type":"string","description":"Graph message id to reply to."},"body":{"type":"string","description":"Reply body (text or HTML; see bodyType)."},"bodyType":{"type":"string","enum":["text","html"],"default":"text"},"replyAll":{"type":"boolean","default":false},"comment":{"type":"string","description":"Optional comment passed to createReply/createReplyAll."}},"required":["messageId","body"]}},{"name":"send_message","class":"mutation","description":"Send a new email to arbitrary recipients (not tied to an existing conversation). Uses Graph POST /me/sendMail with saveToSentItems=true. Body is text/plain unless `html` is true. Use send_reply for in-thread replies.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Mail.Send"],"parameters":{"type":"object","properties":{"to":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Recipient address(es). String OR array of strings."},"subject":{"type":"string"},"body":{"type":"string","description":"text/plain body (unless html set)"},"cc":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"html":{"type":"boolean","default":false,"description":"When true, set Graph body.contentType=HTML and send body as HTML; otherwise text. Graph does NOT auto-derive a plain alternative — set html only when the body is HTML."},"attachments":{"type":"array","description":"Optional file attachments. Each item is { name, contentType?, contentBytes } where contentBytes is base64-encoded file data. Sent as Graph #microsoft.graph.fileAttachment entries.","items":{"type":"object","properties":{"name":{"type":"string"},"contentType":{"type":"string"},"contentBytes":{"type":"string","description":"Base64-encoded attachment bytes."}},"required":["name","contentBytes"]}}},"required":["to","subject","body"]}},{"name":"create_draft","class":"mutation","description":"Create a draft email in the user's Drafts folder via Graph POST /me/messages. Returns the draft message id so callers can patch attachments, then send via a separate /send call.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Mail.ReadWrite"],"parameters":{"type":"object","properties":{"to":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Recipient address(es). String OR array of strings."},"subject":{"type":"string"},"body":{"type":"string","description":"text/plain body (unless html set)"},"cc":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"html":{"type":"boolean","default":false,"description":"When true, set Graph body.contentType=HTML; otherwise text."},"attachments":{"type":"array","description":"Optional file attachments. Each item is { name, contentType?, contentBytes } where contentBytes is base64-encoded file data. Stored as Graph #microsoft.graph.fileAttachment entries on the draft.","items":{"type":"object","properties":{"name":{"type":"string"},"contentType":{"type":"string"},"contentBytes":{"type":"string","description":"Base64-encoded attachment bytes."}},"required":["name","contentBytes"]}}},"required":["to","subject","body"]}},{"name":"subscribe_folder","class":"mutation","description":"Register a Graph webhook subscription for new mail in a folder. Returns the subscription id and expirationDateTime. Mail subscriptions max out at ~3 days; caller must renew.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Mail.ReadWrite"],"parameters":{"type":"object","properties":{"folder":{"type":"string","description":"Well-known name or folder id. Default: 'inbox'."},"notificationUrl":{"type":"string","description":"HTTPS endpoint Graph will POST to."},"ttlMinutes":{"type":"integer","minimum":1,"maximum":4230,"default":4230},"clientState":{"type":"string","description":"Opaque value echoed back on each notification. Defaults to the idempotency key."}},"required":["notificationUrl"]}},{"name":"forward_message","class":"mutation","description":"Forward an existing message to one or more recipients with an optional comment. Graph POST /me/messages/{id}/forward.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Mail.Send"],"parameters":{"type":"object","properties":{"messageId":{"type":"string","description":"Graph message id to forward."},"to":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Recipient address(es). String OR array of strings."},"comment":{"type":"string","description":"Optional comment prepended to the forwarded body."}},"required":["messageId","to"]}},{"name":"move_message","class":"mutation","description":"Move a message to a destination mail folder by id (or well-known name like inbox/archive). Graph POST /me/messages/{id}/move; returns the relocated message (new id).","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Mail.ReadWrite"],"parameters":{"type":"object","properties":{"messageId":{"type":"string","description":"Graph message id to move."},"destinationId":{"type":"string","description":"Destination folder id or well-known name (inbox, archive, deleteditems, ...)."}},"required":["messageId","destinationId"]}},{"name":"set_labels","class":"mutation","description":"Set the full set of Outlook categories (labels) on a message. Graph PATCH /me/messages/{id} replaces the categories array, so supply the complete desired set (the caller computes adds/removes against the current set).","cas":"optimistic-read-verify","externalEffect":false,"requiredScopes":["https://graph.microsoft.com/Mail.ReadWrite"],"parameters":{"type":"object","properties":{"messageId":{"type":"string","description":"Graph message id to tag."},"categories":{"type":"array","items":{"type":"string"},"description":"Full desired category set. Graph replaces (not merges) the categories array."}},"required":["messageId","categories"]}},{"name":"send_draft","class":"mutation","description":"Send a previously created draft message by id. Graph POST /me/messages/{id}/send. Pairs with create_draft.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["https://graph.microsoft.com/Mail.Send"],"parameters":{"type":"object","properties":{"messageId":{"type":"string","description":"Graph draft message id to send."}},"required":["messageId"]}},{"name":"download_attachment","class":"read","description":"Read an attachment record for a message including base64 contentBytes for file attachments. Graph GET /me/messages/{messageId}/attachments/{attachmentId}. Fills the attachment-bytes gap that read_message defers.","requiredScopes":["https://graph.microsoft.com/Mail.Read"],"parameters":{"type":"object","properties":{"messageId":{"type":"string","description":"Graph message id owning the attachment."},"attachmentId":{"type":"string","description":"Graph attachment id (from read_message attachments[].id)."}},"required":["messageId","attachmentId"]}}]},{"kind":"outreach","displayName":"Outreach","description":"Manage Outreach prospects, accounts, and opportunities, and enroll prospects into sequences, through the JSON:API v2 REST API.","auth":{"kind":"oauth2","authorizationUrl":"https://api.outreach.io/oauth/authorize","tokenUrl":"https://api.outreach.io/oauth/token","scopes":["prospects.read","prospects.write","accounts.read","accounts.write","opportunities.read","sequences.read","sequenceStates.read","sequenceStates.write","users.read"],"clientIdEnv":"OUTREACH_OAUTH_CLIENT_ID","clientSecretEnv":"OUTREACH_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"prospects.list","description":"List or search prospects (contacts). Filter by email, paginate with pageSize/pageAfter, sort, and sideload related resources via include.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Filter prospects by email address (filter[emails][email])."},"pageSize":{"type":"number","description":"Results per page (default 50, max 1000)."},"pageAfter":{"type":"string","description":"Cursor for the next page (cursor-based pagination)."},"sort":{"type":"string","description":"Attribute to sort by; prefix with - for descending (e.g. -createdAt)."},"include":{"type":"string","description":"Comma-separated related resources to sideload (e.g. account,owner)."}}},"requiredScopes":["prospects.read"],"class":"read"},{"name":"prospects.create","description":"Create a prospect. Pass JSON:API `attributes` (e.g. { firstName, lastName, emails: [{ email, emailType: \"work\" }], title }) and an optional `relationships` object (e.g. { account: { data: { type: \"account\", id: 123 } } }).","parameters":{"type":"object","properties":{"attributes":{"type":"object","description":"JSON:API attributes for the prospect resource.","additionalProperties":true},"relationships":{"type":"object","description":"Optional JSON:API relationships object linking the prospect to an account, owner, etc.","additionalProperties":true}},"required":["attributes"]},"requiredScopes":["prospects.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"prospects.update","description":"Update a prospect by id. Pass the numeric id and a JSON:API `attributes` object; only provided fields change.","parameters":{"type":"object","properties":{"id":{"type":"number","description":"Numeric prospect id."},"attributes":{"type":"object","description":"JSON:API attributes to update.","additionalProperties":true},"relationships":{"type":"object","description":"Optional JSON:API relationships to update.","additionalProperties":true}},"required":["id","attributes"]},"requiredScopes":["prospects.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sequenceStates.create","description":"Enroll a prospect into a sequence (start a sequence state). Provide the numeric prospectId and sequenceId.","parameters":{"type":"object","properties":{"prospectId":{"type":"number","description":"Numeric prospect id to enroll."},"sequenceId":{"type":"number","description":"Numeric sequence id to enroll the prospect into."}},"required":["prospectId","sequenceId"]},"requiredScopes":["sequenceStates.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.list","description":"List opportunities, optionally filtered by account id; paginate and sideload via include.","parameters":{"type":"object","properties":{"accountId":{"type":"number","description":"Filter opportunities by associated account id (filter[account][id])."},"pageSize":{"type":"number","description":"Results per page."},"pageAfter":{"type":"string","description":"Cursor for the next page."},"include":{"type":"string","description":"Comma-separated related resources to sideload (e.g. account,prospects)."}}},"requiredScopes":["opportunities.read"],"class":"read"},{"name":"accounts.create","description":"Create an account (company). Pass JSON:API `attributes` (name is required; domain and industry optional).","parameters":{"type":"object","properties":{"attributes":{"type":"object","description":"JSON:API attributes for the account resource, e.g. { name, domain, industry }.","additionalProperties":true}},"required":["attributes"]},"requiredScopes":["accounts.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"paddle","displayName":"Paddle","description":"Manage customers, subscriptions, and recurring billing with Paddle Billing.","auth":{"kind":"api-key","hint":"Paddle API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"customers.list","description":"List customers with optional filtering.","parameters":{"type":"object","properties":{"email":{"type":"string"},"status":{"type":"string"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.get","description":"Get a subscription by ID.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.update","description":"Update a subscription.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string"},"quantity":{"type":"number"},"prorationBillingMode":{"type":"string"},"customData":{"type":"object"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"subscriptions.cancel","description":"Cancel a subscription.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string"},"effectiveFrom":{"type":"string"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.create","description":"Create a transaction.","parameters":{"type":"object","properties":{"items":{"type":"array"},"customData":{"type":"object"}},"required":["items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.create","description":"Create a new customer.","parameters":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"},"locale":{"type":"string"},"custom_data":{"type":"object"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.update","description":"Update a customer record. Send only the fields you want to change.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"status":{"type":"string"},"locale":{"type":"string"},"custom_data":{"type":"object"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"prices.create","description":"Create a new price for an existing product.","parameters":{"type":"object","properties":{"description":{"type":"string"},"productId":{"type":"string"},"unitPrice":{"type":"object","description":"Price object with amount (minor units string) and currency_code (ISO-4217)."},"billingCycle":{"type":"object"},"trialPeriod":{"type":"object"},"taxMode":{"type":"string"},"quantity":{"type":"object"},"customData":{"type":"object"}},"required":["description","productId","unitPrice"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.refund","description":"Refund a transaction by creating a refund adjustment against it. Paddle Billing exposes refunds through POST /adjustments with action=\"refund\".","parameters":{"type":"object","properties":{"transactionId":{"type":"string"},"reason":{"type":"string"},"items":{"type":"array","description":"Line items to refund. Each item is { item_id, type: \"full\"|\"partial\"|\"proration\", amount? }."}},"required":["transactionId","reason","items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.pause","description":"Pause a subscription.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string"},"effective_from":{"type":"string"},"resume_at":{"type":"string"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"pagerduty","displayName":"PagerDuty","description":"Triage PagerDuty incidents, page on-call responders, mutate services and escalation policies, and read schedules against a connected PagerDuty account.","auth":{"kind":"oauth2","authorizationUrl":"https://identity.pagerduty.com/oauth/authorize","tokenUrl":"https://identity.pagerduty.com/oauth/token","scopes":["incidents.read","incidents.write","services.read","services.write","escalation_policies.read","escalation_policies.write","schedules.read","schedules.write","teams.read","users.read","oncalls.read"],"clientIdEnv":"PAGERDUTY_OAUTH_CLIENT_ID","clientSecretEnv":"PAGERDUTY_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"incidents.list","description":"List incidents, optionally filtered by status, service, urgency, time window, or assigned user.","parameters":{"type":"object","properties":{"statuses":{"type":"array","description":"Filter by incident status. Repeat to match multiple values.","items":{"type":"string","enum":["triggered","acknowledged","resolved"]}},"serviceIds":{"type":"array","description":"PagerDuty service ids to scope the search to.","items":{"type":"string"}},"userIds":{"type":"array","description":"Filter to incidents assigned to the given user ids.","items":{"type":"string"}},"urgencies":{"type":"array","description":"Filter by urgency.","items":{"type":"string","enum":["high","low"]}},"since":{"type":"string","description":"ISO-8601 lower bound on created_at."},"until":{"type":"string","description":"ISO-8601 upper bound on created_at."},"sortBy":{"type":"string","description":"Sort key, e.g. \"created_at:desc\" or \"urgency:asc\"."},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["incidents.read"],"class":"read"},{"name":"incidents.get","description":"Read a single incident by id.","parameters":{"type":"object","properties":{"incidentId":{"type":"string"}},"required":["incidentId"]},"requiredScopes":["incidents.read"],"class":"read"},{"name":"incidents.create","description":"Create a PagerDuty incident on a service. Requires a From email (the user the call acts as).","parameters":{"type":"object","properties":{"fromEmail":{"type":"string","description":"Email of the PagerDuty user the incident is created as; supplied as the From request header."},"incident":{"type":"object","description":"Incident payload. Must include `type: \"incident\"`, a `title`, and a `service` reference of shape { id, type: \"service_reference\" }.","properties":{"type":{"type":"string","enum":["incident"]},"title":{"type":"string"},"service":{"type":"object"},"urgency":{"type":"string","enum":["high","low"]},"body":{"type":"object"},"incident_key":{"type":"string","description":"Dedup key for the incident."},"priority":{"type":"object"},"escalation_policy":{"type":"object"},"assignments":{"type":"array","items":{"type":"object"}},"conference_bridge":{"type":"object"}},"required":["type","title","service"]}},"required":["fromEmail","incident"]},"requiredScopes":["incidents.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"incidents.update","description":"Update a PagerDuty incident: change status, escalate, snooze, reassign, or set priority. Requires a From email.","parameters":{"type":"object","properties":{"incidentId":{"type":"string"},"fromEmail":{"type":"string"},"incident":{"type":"object","description":"Incident patch payload. Supports `status` (\"acknowledged\" | \"resolved\"), `priority`, `assignments`, `escalation_level`, `resolution`, `title`, `urgency`.","properties":{"type":{"type":"string","enum":["incident_reference"]},"status":{"type":"string","enum":["acknowledged","resolved"]},"resolution":{"type":"string"},"title":{"type":"string"},"urgency":{"type":"string","enum":["high","low"]},"escalation_level":{"type":"integer","minimum":1},"priority":{"type":"object"},"assignments":{"type":"array","items":{"type":"object"}}}}},"required":["incidentId","fromEmail","incident"]},"requiredScopes":["incidents.write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"incidents.notes.list","description":"List notes (comments) on an incident.","parameters":{"type":"object","properties":{"incidentId":{"type":"string"}},"required":["incidentId"]},"requiredScopes":["incidents.read"],"class":"read"},{"name":"incidents.notes.create","description":"Add a note to an incident. Requires a From email.","parameters":{"type":"object","properties":{"incidentId":{"type":"string"},"fromEmail":{"type":"string"},"content":{"type":"string","description":"Note body."}},"required":["incidentId","fromEmail","content"]},"requiredScopes":["incidents.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"incidents.snooze","description":"Snooze an incident for a given duration in seconds. Requires a From email.","parameters":{"type":"object","properties":{"incidentId":{"type":"string"},"fromEmail":{"type":"string"},"duration":{"type":"integer","minimum":1,"description":"Seconds to snooze; PagerDuty caps this at 24 hours."}},"required":["incidentId","fromEmail","duration"]},"requiredScopes":["incidents.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"services.list","description":"List services, optionally filtered by team or name query.","parameters":{"type":"object","properties":{"teamIds":{"type":"array","items":{"type":"string"}},"query":{"type":"string","description":"Substring match on service name."},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["services.read"],"class":"read"},{"name":"services.get","description":"Read a single service by id.","parameters":{"type":"object","properties":{"serviceId":{"type":"string"}},"required":["serviceId"]},"requiredScopes":["services.read"],"class":"read"},{"name":"services.create","description":"Create a PagerDuty service. The payload must include `type: \"service\"`, `name`, and an `escalation_policy` reference.","parameters":{"type":"object","properties":{"service":{"type":"object","properties":{"type":{"type":"string","enum":["service"]},"name":{"type":"string"},"description":{"type":"string"},"auto_resolve_timeout":{"type":["integer","null"]},"acknowledgement_timeout":{"type":["integer","null"]},"escalation_policy":{"type":"object"},"alert_creation":{"type":"string","enum":["create_alerts_and_incidents","create_incidents"]},"incident_urgency_rule":{"type":"object"},"support_hours":{"type":"object"},"scheduled_actions":{"type":"array","items":{"type":"object"}}},"required":["type","name","escalation_policy"]}},"required":["service"]},"requiredScopes":["services.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"services.update","description":"Update fields on a PagerDuty service.","parameters":{"type":"object","properties":{"serviceId":{"type":"string"},"service":{"type":"object"}},"required":["serviceId","service"]},"requiredScopes":["services.write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"services.delete","description":"Delete a PagerDuty service. Open incidents on the service must be resolved first.","parameters":{"type":"object","properties":{"serviceId":{"type":"string"}},"required":["serviceId"]},"requiredScopes":["services.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"escalation_policies.list","description":"List escalation policies, optionally filtered by team or substring query.","parameters":{"type":"object","properties":{"query":{"type":"string"},"teamIds":{"type":"array","items":{"type":"string"}},"userIds":{"type":"array","items":{"type":"string"}},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["escalation_policies.read"],"class":"read"},{"name":"escalation_policies.get","description":"Read a single escalation policy by id.","parameters":{"type":"object","properties":{"escalationPolicyId":{"type":"string"}},"required":["escalationPolicyId"]},"requiredScopes":["escalation_policies.read"],"class":"read"},{"name":"escalation_policies.create","description":"Create an escalation policy. Payload must include `type: \"escalation_policy\"`, `name`, and `escalation_rules`.","parameters":{"type":"object","properties":{"escalation_policy":{"type":"object","properties":{"type":{"type":"string","enum":["escalation_policy"]},"name":{"type":"string"},"escalation_rules":{"type":"array","items":{"type":"object"}},"num_loops":{"type":"integer","minimum":0},"on_call_handoff_notifications":{"type":"string","enum":["if_has_services","always"]},"teams":{"type":"array","items":{"type":"object"}},"description":{"type":"string"}},"required":["type","name","escalation_rules"]}},"required":["escalation_policy"]},"requiredScopes":["escalation_policies.write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"escalation_policies.update","description":"Update an escalation policy.","parameters":{"type":"object","properties":{"escalationPolicyId":{"type":"string"},"escalation_policy":{"type":"object"}},"required":["escalationPolicyId","escalation_policy"]},"requiredScopes":["escalation_policies.write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"schedules.list","description":"List on-call schedules, optionally filtered by substring query.","parameters":{"type":"object","properties":{"query":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["schedules.read"],"class":"read"},{"name":"schedules.get","description":"Read a schedule by id, optionally returning the rendered timeline between `since` and `until`.","parameters":{"type":"object","properties":{"scheduleId":{"type":"string"},"since":{"type":"string","description":"ISO-8601 start of the rendered timeline."},"until":{"type":"string","description":"ISO-8601 end of the rendered timeline."},"timeZone":{"type":"string","description":"IANA tz used to render the schedule."}},"required":["scheduleId"]},"requiredScopes":["schedules.read"],"class":"read"},{"name":"oncalls.list","description":"List on-call entries — who is currently or imminently on call for which escalation policy / level / time range.","parameters":{"type":"object","properties":{"escalationPolicyIds":{"type":"array","items":{"type":"string"}},"userIds":{"type":"array","items":{"type":"string"}},"scheduleIds":{"type":"array","items":{"type":"string"}},"since":{"type":"string","description":"ISO-8601 lower bound."},"until":{"type":"string","description":"ISO-8601 upper bound."},"earliest":{"type":"boolean","description":"If true, return only the earliest active on-call per layer."},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["oncalls.read"],"class":"read"},{"name":"teams.list","description":"List teams, optionally filtered by substring query.","parameters":{"type":"object","properties":{"query":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["teams.read"],"class":"read"},{"name":"users.list","description":"List PagerDuty users, optionally filtered by substring query or team.","parameters":{"type":"object","properties":{"query":{"type":"string"},"teamIds":{"type":"array","items":{"type":"string"}},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["users.read"],"class":"read"},{"name":"users.get","description":"Read a single user by id.","parameters":{"type":"object","properties":{"userId":{"type":"string"}},"required":["userId"]},"requiredScopes":["users.read"],"class":"read"},{"name":"users.me","description":"Read the user the connected credential authenticates as.","parameters":{"type":"object","properties":{}},"requiredScopes":["users.read"],"class":"read"}]},{"kind":"pandadoc","displayName":"PandaDoc","description":"Draft contracts and proposals from PandaDoc templates, send them for signature, poll signing status, and cancel in-flight documents.","auth":{"kind":"oauth2","authorizationUrl":"https://app.pandadoc.com/oauth2/authorize","tokenUrl":"https://api.pandadoc.com/oauth2/access_token","scopes":["read","read+write"],"clientIdEnv":"PANDADOC_OAUTH_CLIENT_ID","clientSecretEnv":"PANDADOC_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"search_documents","class":"read","description":"List PandaDoc documents matching a free-text query, status, or template id. Returns up to `limit` rows (default 25, max 100).","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Free-text query against document name (q=)."},"status":{"type":"string","description":"PandaDoc status filter — one of 'document.draft', 'document.sent', 'document.completed', 'document.voided', etc."},"templateId":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25}}}},{"name":"get_document","class":"read","description":"Fetch full details for a PandaDoc document: status, recipients, fields, pricing tables, and tokens.","parameters":{"type":"object","properties":{"documentId":{"type":"string"}},"required":["documentId"]}},{"name":"create_document","class":"mutation","description":"Draft a new PandaDoc document from a template. The idempotencyKey is written to metadata so retries of the same key resolve to the same draft.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"name":{"type":"string"},"templateId":{"type":"string","description":"PandaDoc template uuid."},"recipients":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"role":{"type":"string"},"signingOrder":{"type":"integer"}},"required":["email"]}},"tokens":{"type":"array","description":"Template token substitutions (name/value pairs).","items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}},"required":["name","value"]}},"fields":{"type":"object","additionalProperties":{"type":"object","additionalProperties":true},"description":"Map of field name → { value, role? } pairs to prefill."},"pricingTables":{"type":"array","items":{"type":"object","additionalProperties":true}},"metadata":{"type":"object","additionalProperties":true},"tags":{"type":"array","items":{"type":"string"}}},"required":["name","templateId","recipients"]}},{"name":"send_document","class":"mutation","description":"Transition a draft document into the sent state, optionally overriding the email subject and message. Re-sending a sent document is a contention.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"documentId":{"type":"string"},"subject":{"type":"string"},"message":{"type":"string"},"sender":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"}}},"silent":{"type":"boolean","default":false,"description":"When true, PandaDoc skips the recipient email and just marks the document as sent."}},"required":["documentId"]}},{"name":"cancel_document","class":"mutation","description":"Cancel/void an in-flight PandaDoc document. Idempotent at the upstream — re-cancelling returns idempotentReplay=true.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"documentId":{"type":"string"},"reason":{"type":"string"}},"required":["documentId"]}}]},{"kind":"paperform","displayName":"Paperform","description":"Manage Paperform spaces, forms, products, coupons, and submissions.","auth":{"kind":"api-key","hint":"Paperform API key."},"category":"webhook","defaultConsistencyModel":"authoritative","capabilities":[{"name":"spaces.create","description":"Create a new space.","parameters":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"spaces.update","description":"Update a space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"}},"required":["spaceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"spaces.find","description":"Find a space by ID.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"}},"required":["spaceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.find","description":"Find a form.","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"submissions.find","description":"Find a form submission by ID.","parameters":{"type":"object","properties":{"submissionId":{"type":"string"}},"required":["submissionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"submissions.delete","description":"Delete a form submission.","parameters":{"type":"object","properties":{"submissionId":{"type":"string"}},"required":["submissionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"partial_submissions.delete","description":"Delete a partial form submission.","parameters":{"type":"object","properties":{"partialSubmissionId":{"type":"string"}},"required":["partialSubmissionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.create","description":"Create a form product.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"name":{"type":"string"},"sku":{"type":"string"},"price":{"type":"number"},"quantity":{"type":"number"},"discountable":{"type":"boolean"},"imageUrl":{"type":"string"}},"required":["formId","name","sku","price"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.update","description":"Update a form product.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"productId":{"type":"string"},"name":{"type":"string"},"price":{"type":"number"},"quantity":{"type":"number"},"discountable":{"type":"boolean"}},"required":["formId","productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"products.delete","description":"Delete a form product.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"productId":{"type":"string"}},"required":["formId","productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.find","description":"Find a form product.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"search":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"coupons.create","description":"Create a form coupon.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"code":{"type":"string"},"discountType":{"type":"string"},"discountAmount":{"type":"number"},"discountPercentage":{"type":"number"},"enabled":{"type":"boolean"},"expiresAt":{"type":"string"}},"required":["formId","code","discountType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"coupons.update","description":"Update a form coupon.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"couponId":{"type":"string"},"enabled":{"type":"boolean"},"discountAmount":{"type":"number"},"discountPercentage":{"type":"number"}},"required":["formId","couponId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"coupons.delete","description":"Delete a form coupon.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"couponId":{"type":"string"}},"required":["formId","couponId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"parquet-files","displayName":"Parquet Files","description":"Read bounded Apache Parquet files and create Parquet files from structured records.","auth":{"kind":"none"},"defaultConsistencyModel":"advisory","category":"database","capabilities":[{"name":"parquet.read","class":"read","description":"Read selected columns and a bounded row range from a base64-encoded Parquet file.","parameters":{"type":"object","properties":{"fileBase64":{"type":"string","description":"Parquet file content encoded as canonical base64."},"columns":{"type":"array","maxItems":256,"items":{"type":"string","minLength":1}},"rowStart":{"type":"integer","minimum":0,"default":0},"rowLimit":{"type":"integer","minimum":1,"maximum":10000,"default":10000}},"required":["fileBase64"],"additionalProperties":false}},{"name":"parquet.create","class":"mutation","description":"Create a base64-encoded Parquet file from object records with inferred column types.","parameters":{"type":"object","properties":{"records":{"type":"array","minItems":1,"maxItems":10000,"items":{"type":"object"}}},"required":["records"],"additionalProperties":false},"cas":"none","externalEffect":true}]},{"kind":"parseur","displayName":"Parseur","description":"Extract structured data from emails, PDFs, invoices, and forms. Create documents, process files, and retrieve parsed results.","auth":{"kind":"api-key","hint":"Parseur API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"documents.find","description":"Find a document by name or search criteria.","parameters":{"type":"object","properties":{"search":{"type":"string","description":"Search term to filter documents by name (case insensitive)."},"limit":{"type":"integer","description":"Maximum number of documents to return."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.get","description":"Get a parsed document by its ID.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"The ID of the document."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.create","description":"Create a new document for parsing from email data.","parameters":{"type":"object","properties":{"subject":{"type":"string","description":"The subject of the document/email."},"from":{"type":"string","description":"The sender email address."},"recipient":{"type":"string","description":"The recipient email address."},"to":{"type":"string","description":"The to email address."},"cc":{"type":"string","description":"The cc email address."},"bcc":{"type":"string","description":"The bcc email address."},"body_html":{"type":"string","description":"The HTML content of the document/email."},"body_plain":{"type":"string","description":"The plain text content of the document/email."},"message_headers":{"type":"object","description":"A JSON object representing the email headers (key-value pairs)."}},"required":["subject","from","recipient"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.createFromFile","description":"Create a new document for parsing from a file upload.","parameters":{"type":"object","properties":{"file":{"type":"string","description":"The file to upload."},"subject":{"type":"string","description":"The subject of the document."},"from":{"type":"string","description":"The sender email address."},"recipient":{"type":"string","description":"The recipient email address."}},"required":["file","subject","from","recipient"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.reprocess","description":"Reprocess a document to extract data again.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"The ID of the document to reprocess."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"documents.delete","description":"Delete a document / parse job by ID.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"The ID of the document to delete."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"templates.list","description":"List parser templates configured for a given mailbox (parser).","parameters":{"type":"object","properties":{"parserId":{"type":"string","description":"The ID of the parser (mailbox) whose templates to list. In Parseur, templates are scoped to a parser."},"limit":{"type":"integer","description":"Maximum number of templates to return."}},"required":["parserId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"templates.train","description":"Submit feedback to retrain a template. The body is forwarded as-is so callers can pass corrected field positions, sample text, or layout adjustments per the Parseur template-training spec.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"The ID of the template to train."},"document_id":{"type":"string","description":"Optional ID of a document whose extraction was incorrect."},"fields":{"type":"array","description":"Corrected field values to use as training feedback."},"sample_text":{"type":"string","description":"Raw text that the template should match."}},"required":["templateId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"mailboxes.list","description":"List parser mailboxes (Parseur exposes mailboxes through its parsers endpoint).","parameters":{"type":"object","properties":{"search":{"type":"string","description":"Search term to filter mailboxes by name."},"limit":{"type":"integer","description":"Maximum number of mailboxes to return."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"pastefy","displayName":"Pastefy","description":"Create and retrieve code snippets on Pastefy.","auth":{"kind":"api-key","hint":"Pastefy instance URL and API token."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"pastes.list","description":"List all pastes.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pastes.get","description":"Retrieve a specific paste by ID.","parameters":{"type":"object","properties":{"paste_id":{"type":"string"}},"required":["paste_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pastes.create","description":"Create a new code snippet paste.","parameters":{"type":"object","properties":{"name":{"type":"string"},"content":{"type":"string"},"title":{"type":"string"},"password":{"type":"string"},"expiry":{"type":"string"}},"required":["name","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pastes.delete","description":"Delete a paste by ID.","parameters":{"type":"object","properties":{"paste_id":{"type":"string"}},"required":["paste_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"pastes.update","description":"Update the content, title, or metadata of a paste.","parameters":{"type":"object","properties":{"paste_id":{"type":"string"},"title":{"type":"string"},"content":{"type":"string"},"name":{"type":"string"},"folder":{"type":"string"},"visibility":{"type":"string"}},"required":["paste_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"folders.list","description":"List user folders.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"folders.create","description":"Create a new folder for organizing pastes.","parameters":{"type":"object","properties":{"name":{"type":"string"},"parent":{"type":"string","description":"Optional parent folder ID."},"visibility":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pastes.share","description":"Generate a share link for a paste. Pastefy returns a token-bearing URL the caller can hand out.","parameters":{"type":"object","properties":{"paste_id":{"type":"string"},"expires_at":{"type":"string","description":"Optional ISO-8601 expiry for the share link."}},"required":["paste_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"paychex","displayName":"Paychex","description":"Read HR and payroll data from Paychex: companies, workers, worker profiles, compensation, pay rates, communications, and federal tax setup.","auth":{"kind":"oauth2","grantType":"client_credentials","tokenUrl":"https://api.paychex.com/auth/oauth/v2/token","scopes":[],"clientIdEnv":"PAYCHEX_OAUTH_CLIENT_ID","clientSecretEnv":"PAYCHEX_OAUTH_CLIENT_SECRET"},"category":"hr","defaultConsistencyModel":"authoritative","capabilities":[{"name":"companies.list","description":"List all companies the app has been granted access to. Each carries the companyId (UUID) needed for company-scoped calls.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Page size, max 100 (default 25)."},"offset":{"type":"integer","description":"Zero-based pagination offset."},"displayid":{"type":"string","description":"Filter by the company display id."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.get","description":"Read a single company by companyId.","parameters":{"type":"object","properties":{"companyId":{"type":"string"}},"required":["companyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.workers.list","description":"List workers (employees + contractors) for a company. Minimal fields per worker (givenName, familyName, legalId, workerId); sub-resources are separate calls. Use statusType=ACTIVE to exclude terminated workers.","parameters":{"type":"object","properties":{"companyId":{"type":"string"},"limit":{"type":"integer","description":"Page size, max 100."},"offset":{"type":"integer"},"statusType":{"type":"string","description":"e.g. ACTIVE to exclude terminated workers."},"employeeId":{"type":"string","description":"Filter to a specific employee id."}},"required":["companyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workers.get","description":"Full profile for a single worker: demographics, employment type, hire date, current status, job info.","parameters":{"type":"object","properties":{"workerId":{"type":"string"}},"required":["workerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workers.compensation.get","description":"Compensation overview for a worker: payFrequency, flsaStatus, calculatedAnnualPay, calculatedPayPeriod, defaultOvertimeFactor (with HATEOAS links to payrates and paystandards).","parameters":{"type":"object","properties":{"workerId":{"type":"string"}},"required":["workerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workers.compensation.payrates.list","description":"All pay rate profiles for a worker (up to 25): rateId, startDate, rateType, amount, standardHours, standardOvertime. `asof` scopes to an effective date.","parameters":{"type":"object","properties":{"workerId":{"type":"string"},"asof":{"type":"string","description":"Effective date to scope the rates to (YYYY-MM-DD)."}},"required":["workerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workers.compensation.paystandards.get","description":"Pay standards for a worker: payFrequency (WEEKLY/BI_WEEKLY/SEMI_MONTHLY/MONTHLY), defaultOvertimeFactor, calculatedPayPeriod, calculatedAnnualSalary.","parameters":{"type":"object","properties":{"workerId":{"type":"string"}},"required":["workerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workers.communications.list","description":"Worker contact info (email addresses, phone numbers) — not embedded in the base worker profile.","parameters":{"type":"object","properties":{"workerId":{"type":"string"}},"required":["workerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workers.federaltax.get","description":"W-4 federal tax withholding configuration for a worker.","parameters":{"type":"object","properties":{"workerId":{"type":"string"}},"required":["workerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"paywhirl","displayName":"Paywhirl","description":"Paywhirl integration for managing customers, subscriptions, and recurring billing.","auth":{"kind":"api-key","hint":"Paywhirl API key. Set source.metadata.apiSecret to the matching API secret."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"customers.create","description":"Create a new customer in Paywhirl.","parameters":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"currency":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"},"country":{"type":"string"},"password":{"type":"string"},"gatewayId":{"type":"string"},"utmSource":{"type":"string"},"utmMedium":{"type":"string"},"utmTerm":{"type":"string"},"utmContent":{"type":"string"},"utmCampaign":{"type":"string"},"utmGroup":{"type":"string"}},"required":["firstName","lastName","email","currency"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.get","description":"Retrieve a customer by ID.","parameters":{"type":"object","properties":{"customerId":{"type":"string"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.search","description":"Search for customers with pagination and filtering.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"orderKey":{"type":"string"},"orderDirection":{"type":"string"},"beforeId":{"type":"integer"},"afterId":{"type":"integer"},"keyword":{"type":"string"},"status":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.create","description":"Subscribe a customer to a plan.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"planId":{"type":"integer"},"trialEnd":{"type":"integer"},"promoId":{"type":"integer"},"quantity":{"type":"integer"}},"required":["customerId","planId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.cancel","description":"Cancel a customer subscription.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"integer"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.search","description":"Search customer subscriptions.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"orderKey":{"type":"string"},"orderDirection":{"type":"string"},"beforeId":{"type":"integer"},"afterId":{"type":"integer"},"keyword":{"type":"string"},"status":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.update","description":"Update an existing customer's profile fields.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"currency":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"},"country":{"type":"string"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.delete","description":"Delete a customer from Paywhirl.","parameters":{"type":"object","properties":{"customerId":{"type":"string"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.create","description":"Create a one-off invoice for a customer.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"amount":{"type":"number"},"currency":{"type":"string"},"description":{"type":"string"},"dueDate":{"type":"string"}},"required":["customerId","amount"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.pause","description":"Pause an active customer subscription.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"integer"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"pdfmonkey","displayName":"PDFMonkey","description":"Generate, find, and delete PDF documents using PDFMonkey templates.","auth":{"kind":"api-key","hint":"PDFMonkey API key."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"documents.generate","description":"Generate a new PDF document from a template.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"PDFMonkey template ID."},"payload":{"type":"object","description":"Data to use for document generation."},"meta":{"type":"object","description":"Meta-data to attach to the document."},"fileName":{"type":"string","description":"Custom file name for the generated document."},"status":{"type":"string","description":"Document status (draft, completed, archived)."}},"required":["templateId","payload"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.find","description":"Retrieve a specific PDF document by ID.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"PDFMonkey document ID."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.list","description":"List all PDF documents.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of documents to return."},"offset":{"type":"integer","description":"Number of documents to skip."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.delete","description":"Delete a PDF document.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"PDFMonkey document ID to delete."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"templates.list","description":"List the PDF templates available in the PDFMonkey workspace.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of templates to return."},"offset":{"type":"integer","description":"Number of templates to skip."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.share","description":"Generate a public share URL for an existing PDFMonkey document.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"PDFMonkey document ID to share."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.regenerate","description":"Regenerate a previously generated PDFMonkey document, producing a new render.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"PDFMonkey document ID to regenerate."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"peekshot","displayName":"PeekShot","description":"Capture screenshots of web pages with customizable dimensions, CSS, and JavaScript injection.","auth":{"kind":"api-key","hint":"PeekShot API key or target URL."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"capture.screenshot","description":"Capture a screenshot of a target URL with optional customization.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Target URL to capture."},"width":{"type":"integer","description":"Custom screenshot width in pixels."},"height":{"type":"integer","description":"Custom screenshot height in pixels."},"file_type":{"type":"string","description":"Output format: jpeg, png, webp."},"inject_css":{"type":"string","description":"Custom CSS to apply before capture."},"inject_js":{"type":"string","description":"Custom JavaScript to execute before capture."},"full_page":{"type":"boolean","description":"Capture the entire page instead of viewport."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"perplexity-ai","displayName":"Perplexity AI","description":"Create chat completions using Perplexity AI models.","auth":{"kind":"api-key","hint":"Perplexity AI API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"chat.create-completion","description":"Create a chat completion using Perplexity AI.","parameters":{"type":"object","properties":{"model":{"type":"string","description":"The model to use (e.g., pplx-7b-online, pplx-70b-online, pplx-8x7b-online)."},"messages":{"type":"array","description":"Array of message objects with role and content."},"temperature":{"type":"number","description":"Controls randomness (0-2). Higher values increase randomness."},"top_p":{"type":"number","description":"Nucleus sampling threshold (0-1). Affects diversity of responses."},"top_k":{"type":"integer","description":"Limits token selection to top k most likely tokens."},"max_tokens":{"type":"integer","description":"Maximum number of tokens to generate."},"frequency_penalty":{"type":"number","description":"Penalizes frequent tokens (-2 to 2)."},"presence_penalty":{"type":"number","description":"Penalizes tokens already in the prompt (-2 to 2)."}},"required":["model","messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"personal-ai","displayName":"Personal AI","description":"Manage memory storage, messaging, and documents through AI integration.","auth":{"kind":"api-key","hint":"Personal AI API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"memory.create","description":"Create a new memory with ChatGPT instruction text and optional context.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"The instruction or prompt to send to ChatGPT"},"context":{"type":"string","description":"Additional context for the AI response"},"domainName":{"type":"string","description":"The domain identifier for the AI profile"},"userName":{"type":"string","description":"Name of the user sending the request"},"sessionId":{"type":"string","description":"Use the same sessionId to continue conversation"},"sourceName":{"type":"string","description":"Name of the source app of the inbound instruction"},"isStack":{"type":"boolean","description":"Flag to also add the user instruction to memory"}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"message.create","description":"Create a new message in a conversation.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"The message text"},"channelId":{"type":"string","description":"The unique identifier for the conversation channel"},"isDraft":{"type":"boolean","description":"Flag to create a copilot message for the AI"}},"required":["text","channelId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversation.get","description":"Get messages from a conversation channel with optional pagination.","parameters":{"type":"object","properties":{"channelId":{"type":"string","description":"The unique identifier for the conversation channel"},"limit":{"type":"integer","description":"Maximum number of messages to return"},"skip":{"type":"integer","description":"Number of messages to skip for pagination"}},"required":["channelId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"training.create","description":"Create custom training data for the AI.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"The training instruction text"},"context":{"type":"string","description":"Additional context for training"}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"document.get","description":"Get a document by ID with optional content inclusion.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"The unique identifier of the document"},"includeContent":{"type":"boolean","description":"Flag to include the document content in response"}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"document.upload","description":"Upload a document with file or URL.","parameters":{"type":"object","properties":{"fileName":{"type":"string","description":"Name of the file to be uploaded"},"url":{"type":"string","description":"The URL of the content to upload"}},"required":["fileName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"document.update","description":"Update a document with new metadata.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"The unique identifier of the document"},"title":{"type":"string","description":"Updated title of the document"},"tags":{"type":"string","description":"Comma delimited list of tags for the document"},"createdTime":{"type":"string","description":"Time (including timezone) of document creation"}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"memory.delete","description":"Delete a memory entry from the Personal AI memory store.","parameters":{"type":"object","properties":{"memoryId":{"type":"string","description":"The unique identifier of the memory entry to delete."}},"required":["memoryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"document.delete","description":"Delete a document from the AI's knowledge base.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"The unique identifier of the document to delete."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"training.delete","description":"Delete a custom training entry from the Personal AI training set.","parameters":{"type":"object","properties":{"trainingId":{"type":"string","description":"The unique identifier of the training entry to delete."}},"required":["trainingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"persona.update","description":"Update persona settings (display name, tone, instructions) for the Personal AI profile.","parameters":{"type":"object","properties":{"displayName":{"type":"string","description":"Display name shown for this persona."},"tone":{"type":"string","description":"Tone descriptor used to shape AI responses."},"instructions":{"type":"string","description":"Free-form system instructions for the persona."},"domainName":{"type":"string","description":"Domain identifier for the AI profile this persona belongs to."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"phantombuster","displayName":"PhantomBuster","description":"Launch PhantomBuster Phantoms (automation agents) that scrape and extract data from sites like LinkedIn, then retrieve their output and results.","auth":{"kind":"api-key","hint":"API key from your PhantomBuster dashboard (Workspace settings -> API key). Sent in the X-Phantombuster-Key header."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"agents.fetch_all","description":"List all Phantoms (agents) in the current organization.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"agents.fetch","description":"Fetch the configuration and metadata of a single Phantom by its agent id.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Id of the agent (Phantom) to fetch."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"agents.launch","description":"Launch a Phantom (agent), optionally passing arguments, and start a new run (container).","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Id of the agent (Phantom) to launch."},"argument":{"type":"object","description":"JSON object of arguments overriding the Phantom's saved configuration for this run."},"bonusArgument":{"type":"object","description":"Additional one-off arguments merged for this launch only."},"saveArgument":{"type":"boolean","description":"Persist the provided argument as the Phantom's default configuration."},"manualLaunch":{"type":"boolean","description":"Mark the launch as manual."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"agents.fetch_output","description":"Retrieve the console output and most recent container status of a Phantom's run by agent id.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Id of the agent to fetch output from."},"fromOutputPos":{"type":"number","description":"Position from which to start returning output."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"containers.fetch_output","description":"Retrieve the console output of a specific Phantom run (container) by its container id.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Id of the container (run) to fetch output from."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"phony","displayName":"ph0ny","description":"Place real outbound phone calls with a voice agent, then read back call status, transcript, and extracted fields. Outbound calls require recorded user consent and support a dry-run that validates the full configuration without dialing.","auth":{"kind":"api-key","hint":"Paste your ph0ny API key (plabs_…). Create one in the developer portal via POST /v1/keys — it is shown once."},"category":"comms","defaultConsistencyModel":"cache","capabilities":[{"name":"list_agents","class":"read","description":"List the voice agents on your ph0ny developer account (newest first).","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100,"default":20},"cursor":{"type":"string","description":"Pagination cursor from a prior response."}}}},{"name":"get_call","class":"read","description":"Fetch a single outbound call by id, including status, transcript, and extracted fields.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Outbound call id returned by start_outbound_call."}},"required":["id"]}},{"name":"list_calls","class":"read","description":"List recent outbound calls for the account, optionally filtered by agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string","description":"Optional filter — only calls placed by this agent."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":20}}}},{"name":"start_outbound_call","class":"mutation","description":"Place an outbound phone call. Requires userConsentRecorded=true (the user must have explicitly authorized the call). Set dryRun=true to validate the full configuration without dialing.","cas":"none","externalEffect":true,"parameters":{"type":"object","properties":{"agentId":{"type":"string","description":"Agent that will place the call (agentKind must be personal_assistant)."},"toNumber":{"type":"string","description":"E.164 destination, e.g. +14155551212."},"fromNumber":{"type":"string","description":"E.164 caller number provisioned to your developer account."},"mission":{"type":"object","description":"What the agent should accomplish on the call.","properties":{"goal":{"type":"string","description":"Plain-language objective (8–2000 chars)."},"successSchema":{"type":"object","description":"Optional JSON schema describing fields to extract on success."},"ivrHints":{"type":"array","items":{"type":"string"},"description":"Optional hints for navigating phone-tree / IVR menus (≤8 entries)."},"maxTurns":{"type":"integer","minimum":1,"maximum":60},"maxDurationMs":{"type":"integer","minimum":30000,"maximum":1200000}},"required":["goal"]},"missionId":{"type":"string","description":"Optional caller-supplied mission id."},"callerProfile":{"type":"object","properties":{"userName":{"type":"string"},"companyName":{"type":"string"}}},"voiceCloneId":{"type":"string","description":"Optional cloned-voice id to speak with."},"userConsentRecorded":{"type":"boolean","description":"REQUIRED. Must be true — the user explicitly authorized this call. ph0ny rejects false."},"dryRun":{"type":"boolean","description":"When true, validate every gate and return a dryRunReport without placing the call."}},"required":["agentId","toNumber","fromNumber","mission","userConsentRecorded"]}},{"name":"create_agent","class":"mutation","description":"Create a voice agent on your ph0ny developer account. Only name is required; the rest configure the LLM, TTS, voice, knowledge base, and capture behavior.","cas":"none","externalEffect":true,"parameters":{"type":"object","properties":{"id":{"type":"string","description":"Optional caller-supplied agent id (1–60 chars)."},"name":{"type":"string","description":"Display name (1–100 chars)."},"description":{"type":"string","description":"Optional description (≤1000 chars)."},"systemPrompt":{"type":"string","description":"Optional system prompt (≤10000 chars)."},"firstMessage":{"type":"string","description":"Optional opening line the agent speaks first (≤1000 chars)."},"voiceId":{"type":"string","description":"Optional TTS voice id."},"ttsProvider":{"type":"string","description":"TTS provider; \"default\" lets ph0ny choose."},"ttsModel":{"type":"string","description":"Optional TTS model id."},"sttProvider":{"type":"string","description":"Optional speech-to-text provider."},"llmProvider":{"type":"string","description":"LLM provider (e.g. openai, anthropic). Defaults to openai server-side."},"llmModel":{"type":"string","description":"Optional LLM model id."},"libraryId":{"type":"string","description":"Ingest-service library id (preferred over collectionId)."},"collectionId":{"type":"string","description":"Deprecated — KB collection id to attach. Prefer libraryId."},"styleProfile":{"type":"object","description":"Optional style profile object."},"promptByModel":{"type":"object","description":"Optional per-model prompt overrides (modelId → prompt)."},"language":{"type":"string","description":"BCP-47 language code; defaults to \"en\"."},"temperature":{"type":"number","minimum":0,"maximum":2,"description":"Sampling temperature (0–2); defaults to 0.7."},"maxTokens":{"type":"integer","minimum":1,"maximum":16384,"description":"Optional max output tokens."},"contactCaptureEnabled":{"type":"boolean","description":"Enable structured contact capture during calls."},"contactCaptureFields":{"type":"array","items":{"type":"string","enum":["name","email","phone"]},"description":"Which contact fields to capture when capture is enabled."},"metadata":{"type":"object","description":"Arbitrary metadata object stored with the agent."}},"required":["name"]}},{"name":"provision_agent","class":"mutation","description":"Create an agent and, in the same atomic call, optionally a fresh knowledge-base collection and seed it with initial content. Returns the agent plus the created collection and ingestion results.","cas":"none","externalEffect":true,"parameters":{"type":"object","properties":{"id":{"type":"string","description":"Optional caller-supplied agent id (1–60 chars)."},"name":{"type":"string","description":"Display name (1–100 chars)."},"description":{"type":"string","description":"Optional description (≤1000 chars)."},"systemPrompt":{"type":"string","description":"Optional system prompt (≤10000 chars)."},"firstMessage":{"type":"string","description":"Optional opening line the agent speaks first (≤1000 chars)."},"voiceId":{"type":"string","description":"Optional TTS voice id."},"ttsProvider":{"type":"string","description":"TTS provider; \"default\" lets ph0ny choose."},"ttsModel":{"type":"string","description":"Optional TTS model id."},"sttProvider":{"type":"string","description":"Optional speech-to-text provider."},"llmProvider":{"type":"string","description":"LLM provider (e.g. openai, anthropic). Defaults to openai server-side."},"llmModel":{"type":"string","description":"Optional LLM model id."},"libraryId":{"type":"string","description":"Ingest-service library id (preferred over collectionId)."},"collectionId":{"type":"string","description":"Existing KB collection id to attach instead of creating one."},"styleProfile":{"type":"object","description":"Optional style profile object."},"promptByModel":{"type":"object","description":"Optional per-model prompt overrides (modelId → prompt)."},"language":{"type":"string","description":"BCP-47 language code; defaults to \"en\"."},"temperature":{"type":"number","minimum":0,"maximum":2,"description":"Sampling temperature (0–2); defaults to 0.7."},"maxTokens":{"type":"integer","minimum":1,"maximum":16384,"description":"Optional max output tokens."},"contactCaptureEnabled":{"type":"boolean","description":"Enable structured contact capture during calls."},"contactCaptureFields":{"type":"array","items":{"type":"string","enum":["name","email","phone"]},"description":"Which contact fields to capture when capture is enabled."},"metadata":{"type":"object","description":"Arbitrary metadata object stored with the agent."},"collection":{"type":"object","description":"When present, create a fresh KB collection and attach it to the agent.","properties":{"name":{"type":"string","description":"Collection name (1–100 chars)."},"description":{"type":"string","description":"Optional collection description (≤500 chars)."}},"required":["name"]},"initialContent":{"type":"array","maxItems":10,"description":"Documents to ingest into the new/attached collection (≤10).","items":{"type":"object","properties":{"content":{"type":"string","description":"Raw text or transcript content."},"contentType":{"type":"string","enum":["text","transcript"],"description":"Defaults to \"text\"."},"metadata":{"type":"object","description":"Arbitrary metadata stored with the document."}},"required":["content"]}}},"required":["name"]}},{"name":"kb_create_collection","class":"mutation","description":"Create a knowledge-base collection the agent can search at call time.","cas":"none","externalEffect":true,"parameters":{"type":"object","properties":{"name":{"type":"string","description":"Collection name (1–100 chars)."},"description":{"type":"string","description":"Optional description (≤500 chars)."},"metadata":{"type":"object","description":"Arbitrary metadata object stored with the collection."}},"required":["name"]}},{"name":"kb_ingest","class":"mutation","description":"Chunk, embed, and store content into a KB collection. Provide content directly (≤1MB), or a sourceUrl for audio transcription. contentType \"url\" is not yet implemented server-side (501).","cas":"none","externalEffect":true,"parameters":{"type":"object","properties":{"collectionId":{"type":"string","description":"Target collection id."},"content":{"type":"string","description":"Raw text/transcript content (≤1,000,000 chars)."},"sourceUrl":{"type":"string","description":"Public URL — required when contentType is \"audio\" (transcribed) or \"url\"."},"contentType":{"type":"string","enum":["text","transcript","audio","url"],"description":"Defaults to \"text\". \"audio\" transcribes sourceUrl; \"url\" returns 501."},"metadata":{"type":"object","description":"Arbitrary metadata stored with the document."},"chunkSize":{"type":"integer","minimum":100,"maximum":4000,"description":"Chunk size in chars; defaults to 1000."},"chunkOverlap":{"type":"integer","minimum":0,"maximum":500,"description":"Chunk overlap in chars; defaults to 200. Must be < chunkSize."}},"required":["collectionId"]}},{"name":"kb_search","class":"read","description":"Hybrid vector + keyword search over a KB collection. Returns ranked results with scores.","parameters":{"type":"object","properties":{"collectionId":{"type":"string","description":"Collection id to search."},"query":{"type":"string","description":"Search query (1–2000 chars)."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Max results; defaults to 10."},"threshold":{"type":"number","minimum":0,"maximum":1,"description":"Minimum similarity score; defaults to 0.7."},"includeMetadata":{"type":"boolean","description":"Include per-result metadata; defaults to true."}},"required":["collectionId","query"]}}]},{"kind":"pinch-payments","displayName":"Pinch Payments","description":"Australian payment processing platform for direct debits, credit cards, and recurring payments. Create payers, process payments, manage subscriptions, and handle payment sources.","auth":{"kind":"api-key","hint":"Pinch Payments API credentials (Application ID and Secret Key)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"payers.create-or-update","description":"Create or update a payer with contact information and metadata.","parameters":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"emailAddress":{"type":"string"},"mobileNumber":{"type":"string"},"companyName":{"type":"string"},"streetAddress":{"type":"string"},"suburb":{"type":"string"},"state":{"type":"string"},"postcode":{"type":"string"},"country":{"type":"string"},"metadata":{"type":"object"}},"required":["firstName","emailAddress"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payers.find","description":"Find a payer by ID or email.","parameters":{"type":"object","properties":{"payerId":{"type":"string"}},"required":["payerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sources.add-to-payer","description":"Add a payment source (bank account or credit card) to a payer.","parameters":{"type":"object","properties":{"payerId":{"type":"string"},"sourceType":{"type":"string"},"token":{"type":"string"},"bankAccountNumber":{"type":"string"},"bankAccountBsb":{"type":"string"},"bankAccountName":{"type":"string"}},"required":["payerId","sourceType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payments.create-realtime","description":"Create and process a real-time payment (immediate debit).","parameters":{"type":"object","properties":{"payerId":{"type":"string"},"amount":{"type":"number"},"description":{"type":"string"},"sourceId":{"type":"string"},"nonce":{"type":"string"}},"required":["payerId","amount"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payments.create-or-update-scheduled","description":"Create or update a scheduled payment for a future transaction date.","parameters":{"type":"object","properties":{"paymentId":{"type":"string"},"payerId":{"type":"string"},"amount":{"type":"number"},"transactionDate":{"type":"string"},"description":{"type":"string"},"sourceId":{"type":"string"},"applicationFee":{"type":"number"}},"required":["payerId","amount","transactionDate"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"subscriptions.create-or-update","description":"Create or update a subscription for recurring payments.","parameters":{"type":"object","properties":{"payerId":{"type":"string"},"planId":{"type":"string"},"sourceId":{"type":"string"},"startDate":{"type":"string"},"totalAmount":{"type":"number"},"surcharge":{"type":"string"}},"required":["payerId","planId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.find","description":"Find a subscription by ID.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"events.find","description":"Find an event by ID.","parameters":{"type":"object","properties":{"eventId":{"type":"string"}},"required":["eventId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"payments.refund","description":"Refund a real-time payment.","parameters":{"type":"object","properties":{"paymentId":{"type":"string"},"amount":{"type":"number"},"reason":{"type":"string"}},"required":["paymentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.cancel","description":"Cancel a subscription.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payers.delete","description":"Delete a payer record.","parameters":{"type":"object","properties":{"payerId":{"type":"string"}},"required":["payerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sources.remove","description":"Remove a payment source from a payer.","parameters":{"type":"object","properties":{"payerId":{"type":"string"},"sourceId":{"type":"string"}},"required":["payerId","sourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"pinecone","displayName":"Pinecone","description":"Manage Pinecone indexes and collections, upsert and query dense / sparse vectors, fetch by id, and drive Pinecone Assistants. Vector data-plane calls require metadata.indexHost from the index describe response.","auth":{"kind":"api-key","hint":"Pinecone API key (pcsk_…) from https://app.pinecone.io → Project → API Keys. Project-scoped — connect one DataSource per Pinecone project. For data-plane operations also set metadata.indexHost to the host returned by GET /indexes/{indexName}."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"indexes.list","description":"List every index in the project the API key is scoped to. Returns name, dimension, metric, spec, status, host.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"indexes.describe","description":"Fetch metadata for a single index. The returned .host is what the caller must persist on metadata.indexHost before invoking any vectors.* capability.","parameters":{"type":"object","properties":{"indexName":{"type":"string"}},"required":["indexName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"indexes.create","description":"Create a new index. Pass `name`, `dimension`, `metric` (cosine|euclidean|dotproduct), and `spec` (serverless { cloud, region } OR pod { environment, pod_type, pods, replicas, shards }).","parameters":{"type":"object","properties":{"name":{"type":"string"},"dimension":{"type":"integer","minimum":1},"metric":{"type":"string","enum":["cosine","euclidean","dotproduct"]},"spec":{"type":"object"},"deletion_protection":{"type":"string","enum":["enabled","disabled"]},"tags":{"type":"object"},"vector_type":{"type":"string","enum":["dense","sparse"]}},"required":["name","dimension","metric","spec"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"indexes.configure","description":"Reconfigure an existing index — change replicas / pod_type (pod indexes), toggle deletion_protection, replace tags. Body matches the PATCH /indexes/{indexName} spec.","parameters":{"type":"object","properties":{"indexName":{"type":"string"},"spec":{"type":"object"},"deletion_protection":{"type":"string","enum":["enabled","disabled"]},"tags":{"type":"object"}},"required":["indexName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"indexes.delete","description":"Delete an index. Fails if deletion_protection is enabled — caller must indexes.configure first.","parameters":{"type":"object","properties":{"indexName":{"type":"string"}},"required":["indexName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.list","description":"List frozen-snapshot collections in the project (pod indexes only).","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"collections.describe","description":"Fetch collection metadata (size, vector_count, status, environment).","parameters":{"type":"object","properties":{"collectionName":{"type":"string"}},"required":["collectionName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"collections.create","description":"Create a collection (snapshot) from an existing pod index.","parameters":{"type":"object","properties":{"name":{"type":"string"},"source":{"type":"string","description":"Name of the source index."}},"required":["name","source"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.delete","description":"Delete a collection.","parameters":{"type":"object","properties":{"collectionName":{"type":"string"}},"required":["collectionName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"vectors.upsert","description":"Upsert vectors into a namespace. Each vector carries { id, values (dense), sparse_values?, metadata? }. Replays with the same ids overwrite — Pinecone keys on (namespace, id).","parameters":{"type":"object","properties":{"namespace":{"type":"string"},"vectors":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"values":{"type":"array","items":{"type":"number"}},"sparse_values":{"type":"object"},"metadata":{"type":"object"}},"required":["id"]}}},"required":["vectors"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"vectors.query","description":"Nearest-neighbour query against a namespace. Provide either { vector } (dense), { sparse_vector } (sparse), or { id } (server fetches the vector by id and queries with it). Returns top_k matches with optional metadata + values.","parameters":{"type":"object","properties":{"namespace":{"type":"string"},"top_k":{"type":"integer","minimum":1,"maximum":10000},"filter":{"type":"object"},"include_values":{"type":"boolean"},"include_metadata":{"type":"boolean"},"vector":{"type":"array","items":{"type":"number"}},"sparse_vector":{"type":"object"},"id":{"type":"string"}},"required":["top_k"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"vectors.fetch","description":"Fetch vectors by id from a namespace. Returns the dense values + metadata for each found id.","parameters":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}},"namespace":{"type":"string"}},"required":["ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"vectors.update","description":"Partial in-place update of a single vector — replace values, sparse_values, or metadata for an existing id.","parameters":{"type":"object","properties":{"id":{"type":"string"},"values":{"type":"array","items":{"type":"number"}},"sparse_values":{"type":"object"},"set_metadata":{"type":"object"},"namespace":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"vectors.delete","description":"Delete vectors. Either pass `ids` (specific vector ids), `filter` (metadata filter — Starter pods do not support this), or `delete_all: true` to wipe the whole namespace.","parameters":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}},"namespace":{"type":"string"},"delete_all":{"type":"boolean"},"filter":{"type":"object"}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"vectors.list","description":"List vector ids in a namespace (serverless indexes only). Supports prefix filtering and cursor pagination via pagination_token.","parameters":{"type":"object","properties":{"namespace":{"type":"string"},"prefix":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"pagination_token":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"vectors.describe_index_stats","description":"Per-namespace vector counts + total dimension count + index fullness. Useful for capacity dashboards.","parameters":{"type":"object","properties":{"filter":{"type":"object"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"assistants.list","description":"List Pinecone Assistants in the project.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"assistants.describe","description":"Fetch metadata for an assistant by name.","parameters":{"type":"object","properties":{"assistantName":{"type":"string"}},"required":["assistantName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"assistants.create","description":"Create a Pinecone Assistant. Body: { name, instructions?, metadata?, region? }.","parameters":{"type":"object","properties":{"name":{"type":"string"},"instructions":{"type":"string"},"metadata":{"type":"object"},"region":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assistants.delete","description":"Delete an assistant and its uploaded files.","parameters":{"type":"object","properties":{"assistantName":{"type":"string"}},"required":["assistantName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assistants.chat","description":"Send a chat turn to an assistant. Body: { messages: [{ role, content }], model?, stream?, filter?, json_response?, include_highlights? }. Non-idempotent — replay yields a new completion.","parameters":{"type":"object","properties":{"assistantName":{"type":"string"},"messages":{"type":"array","items":{"type":"object"}},"model":{"type":"string"},"stream":{"type":"boolean"},"filter":{"type":"object"},"json_response":{"type":"boolean"},"include_highlights":{"type":"boolean"}},"required":["assistantName","messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"assistants.update","description":"Update an existing Pinecone Assistant. Pass any subset of { instructions, metadata } — fields omitted from the body are left unchanged.","parameters":{"type":"object","properties":{"assistantName":{"type":"string"},"instructions":{"type":"string"},"metadata":{"type":"object"}},"required":["assistantName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assistants.files.delete","description":"Delete a file previously uploaded to a Pinecone Assistant. The file is removed from the assistant's knowledge base; existing chat sessions are unaffected.","parameters":{"type":"object","properties":{"assistantName":{"type":"string"},"assistantFileId":{"type":"string","description":"Assistant file ID returned by the upload endpoint."}},"required":["assistantName","assistantFileId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"backups.create","description":"Create a backup snapshot of an index. The backup is project-scoped and can be restored later via the Pinecone control plane.","parameters":{"type":"object","properties":{"indexName":{"type":"string"},"name":{"type":"string","description":"Backup name (project-unique)."},"description":{"type":"string"}},"required":["indexName","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"ping-identity","displayName":"Ping Identity","description":"Provision PingOne users, groups, and group memberships with customer-owned worker credentials.","auth":{"kind":"api-key","hint":"JSON credential bundle: {\"clientId\":\"...\",\"clientSecret\":\"...\",\"region\":\"us|ca|eu|au|asia\"}. Set environmentId in connection metadata."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.list","description":"List or filter users in the connected PingOne environment.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200},"filter":{"type":"string"},"order":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.get","description":"Read one PingOne user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"PingOne user id."}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.create","description":"Create a PingOne user from a provider-native user object.","parameters":{"type":"object","properties":{"user":{"type":"object"}},"required":["user"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.update","description":"Patch mutable fields on a PingOne user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"PingOne user id."},"user":{"type":"object"}},"required":["userId","user"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"users.deactivate","description":"Disable a PingOne user without deleting the record.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"PingOne user id."}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"groups.list","description":"List or filter groups in the PingOne environment.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200},"filter":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.get","description":"Read one PingOne group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"PingOne group id."}},"required":["groupId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.create","description":"Create a PingOne group from a provider-native group object.","parameters":{"type":"object","properties":{"group":{"type":"object"}},"required":["group"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"groups.update","description":"Patch mutable fields on a PingOne group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"PingOne group id."},"group":{"type":"object"}},"required":["groupId","group"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"groups.users.add","description":"Add a PingOne user to a group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"PingOne group id."},"userId":{"type":"string","description":"PingOne user id."}},"required":["groupId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"groups.users.remove","description":"Remove a PingOne user from a group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"PingOne group id."},"userId":{"type":"string","description":"PingOne user id."}},"required":["groupId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"pipedream","displayName":"Pipedream","description":"Manage Pipedream workflows and sources, list events, and POST payloads to HTTP-source workflow URLs.","auth":{"kind":"api-key","hint":"Pipedream API key from Account Settings > API. Sent as `Authorization: Bearer <key>`."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"workflows.list","description":"List workflows owned by the authenticated account or a specific organization workspace.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"Optional organization workspace id."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workflows.get","description":"Read a Pipedream workflow by id, including its source endpoints.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sources.list","description":"List event sources (the trigger half of a workflow).","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sources.events","description":"Read recent events emitted by a Pipedream source. Useful for polling without subscribing.","parameters":{"type":"object","properties":{"sourceId":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100}},"required":["sourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"http.trigger","description":"POST a JSON payload to a Pipedream HTTP-source workflow endpoint. Supply only its endpoint id; the provider host is fixed so credentials cannot be redirected.","parameters":{"type":"object","properties":{"endpointId":{"type":"string","description":"Subdomain id from the published `https://<id>.m.pipedream.net` endpoint."},"payload":{"type":"object"}},"required":["endpointId","payload"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.create","description":"Subscribe an emitting source/workflow to a listener so its events fan out to another workflow.","parameters":{"type":"object","properties":{"emitterId":{"type":"string"},"listenerId":{"type":"string"},"eventName":{"type":"string"}},"required":["emitterId","listenerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflows.deploy","description":"Deploy a new version of a workflow.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workflows.disable","description":"Disable an active workflow.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.delete","description":"Delete an event subscription.","parameters":{"type":"object","properties":{"emitterId":{"type":"string"},"listenerId":{"type":"string"},"eventName":{"type":"string"}},"required":["emitterId","listenerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sources.create","description":"Create a new event source.","parameters":{"type":"object","properties":{"componentId":{"type":"string"}},"required":["componentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"pipedrive","displayName":"Pipedrive","description":"Search and update Pipedrive deals, persons, and organizations.","auth":{"kind":"oauth2","authorizationUrl":"https://oauth.pipedrive.com/oauth/authorize","tokenUrl":"https://oauth.pipedrive.com/oauth/token","scopes":["deals:full","contacts:full","leads:full","activities:full"],"clientIdEnv":"PIPEDRIVE_OAUTH_CLIENT_ID","clientSecretEnv":"PIPEDRIVE_OAUTH_CLIENT_SECRET","tokenMetadata":{"apiDomain":{"field":"api_domain","required":true}}},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"deals.search","description":"Search Pipedrive deals by free-text term.","parameters":{"type":"object","properties":{"term":{"type":"string"},"fields":{"type":"string"},"status":{"type":"string","enum":["open","won","lost"]},"limit":{"type":"integer","minimum":1,"maximum":500}},"required":["term"]},"requiredScopes":["deals:full"],"class":"read"},{"name":"deals.get","description":"Read a single Pipedrive deal by id.","parameters":{"type":"object","properties":{"id":{"type":"integer"}},"required":["id"]},"requiredScopes":["deals:full"],"class":"read"},{"name":"deals.create","description":"Create a Pipedrive deal.","parameters":{"type":"object","properties":{"title":{"type":"string"},"value":{"type":"number"},"currency":{"type":"string"},"person_id":{"type":"integer"},"org_id":{"type":"integer"},"stage_id":{"type":"integer"},"status":{"type":"string","enum":["open","won","lost"]}},"required":["title"]},"requiredScopes":["deals:full"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deals.update","description":"Update a Pipedrive deal.","parameters":{"type":"object","properties":{"id":{"type":"integer"},"fields":{"type":"object"}},"required":["id","fields"]},"requiredScopes":["deals:full"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"persons.search","description":"Search Pipedrive persons by free-text term.","parameters":{"type":"object","properties":{"term":{"type":"string"},"fields":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":500}},"required":["term"]},"requiredScopes":["contacts:full"],"class":"read"},{"name":"persons.create","description":"Create a Pipedrive person.","parameters":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"array","items":{"type":"object"}},"phone":{"type":"array","items":{"type":"object"}},"org_id":{"type":"integer"}},"required":["name"]},"requiredScopes":["contacts:full"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"organizations.search","description":"Search Pipedrive organizations by free-text term.","parameters":{"type":"object","properties":{"term":{"type":"string"},"fields":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":500}},"required":["term"]},"requiredScopes":["contacts:full"],"class":"read"},{"name":"organizations.create","description":"Create a Pipedrive organization.","parameters":{"type":"object","properties":{"name":{"type":"string"},"owner_id":{"type":"integer"}},"required":["name"]},"requiredScopes":["contacts:full"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"activities.create","description":"Create a Pipedrive activity (call, meeting, task, deadline, email, lunch, etc.) optionally linked to a deal, person, or organization.","parameters":{"type":"object","properties":{"subject":{"type":"string"},"type":{"type":"string","description":"Activity type key (e.g. call, meeting, task, deadline, email, lunch)."},"due_date":{"type":"string","description":"YYYY-MM-DD due date."},"due_time":{"type":"string","description":"HH:MM due time."},"deal_id":{"type":"integer"},"person_id":{"type":"integer"},"org_id":{"type":"integer"},"note":{"type":"string"}},"required":["subject","type"]},"requiredScopes":["activities:full"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.create","description":"Create a Pipedrive note attached to a deal, person, or organization.","parameters":{"type":"object","properties":{"content":{"type":"string","description":"Note body. Supports HTML."},"deal_id":{"type":"integer"},"person_id":{"type":"integer"},"org_id":{"type":"integer"}},"required":["content"]},"requiredScopes":["contacts:full"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"placid","displayName":"Placid","description":"Generate dynamic images, PDFs, and videos from templates and data.","auth":{"kind":"api-key","hint":"Placid API key."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"images.create","description":"Create a dynamic image from a template.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"The ID of the template."},"data":{"type":"object","description":"Template variables and their values."},"outputDpi":{"type":"integer","description":"Output DPI (default 72)."},"outputFilename":{"type":"string","description":"Custom output filename."}},"required":["templateId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"images.get","description":"Retrieve an image by ID.","parameters":{"type":"object","properties":{"imageId":{"type":"string","description":"The ID of the image to retrieve."}},"required":["imageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"pdfs.create","description":"Create a dynamic PDF from a template.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"The ID of the template."},"data":{"type":"object","description":"Template variables and their values."},"outputFilename":{"type":"string","description":"Custom output filename."}},"required":["templateId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pdfs.get","description":"Retrieve a PDF by ID.","parameters":{"type":"object","properties":{"pdfId":{"type":"string","description":"The ID of the PDF to retrieve."}},"required":["pdfId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"videos.create","description":"Create a dynamic video from a template.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"The ID of the template."},"data":{"type":"object","description":"Template variables and their values."},"outputFps":{"type":"integer","description":"Output frames per second."},"outputFilename":{"type":"string","description":"Custom output filename."}},"required":["templateId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"videos.get","description":"Retrieve a video by ID.","parameters":{"type":"object","properties":{"videoId":{"type":"string","description":"The ID of the video to retrieve."}},"required":["videoId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.convert","description":"Convert a file to a shareable URL.","parameters":{"type":"object","properties":{"file":{"type":"string","description":"File content or path."},"filename":{"type":"string","description":"Optional custom filename."}},"required":["file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"templates.list","description":"List available templates.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of templates to return."},"offset":{"type":"integer","description":"Pagination offset."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"images.delete","description":"Delete a generated image.","parameters":{"type":"object","properties":{"imageId":{"type":"string","description":"The ID of the image to delete."}},"required":["imageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pdfs.delete","description":"Delete a generated PDF.","parameters":{"type":"object","properties":{"pdfId":{"type":"string","description":"The ID of the PDF to delete."}},"required":["pdfId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"videos.delete","description":"Delete a generated video.","parameters":{"type":"object","properties":{"videoId":{"type":"string","description":"The ID of the video to delete."}},"required":["videoId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"templates.get","description":"Get details of a single template.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"The ID of the template to retrieve."}},"required":["templateId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"plaid","displayName":"Plaid","description":"Read linked bank accounts, balances, transactions, identity, liabilities, and investments from Plaid.","auth":{"kind":"api-key","hint":"JSON credential bundle: {\"clientId\":\"...\",\"secret\":\"...\",\"accessToken\":\"...\"}."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"accounts.get","description":"Read accounts and current/available balances for the linked Plaid item.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"auth.get","description":"Read account and routing numbers for checking and savings accounts.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"identity.get","description":"Read account-holder identity data supplied by the financial institution.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"liabilities.get","description":"Read credit-card, mortgage, and student-loan liabilities.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"investments.holdings.get","description":"Read investment holdings and security metadata.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transactions.sync","description":"Incrementally synchronize transactions. Persist `next_cursor` and call again while `has_more` is true.","parameters":{"type":"object","properties":{"cursor":{"type":"string"},"count":{"type":"integer","minimum":1,"maximum":500},"options":{"type":"object"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"plausible","displayName":"Plausible Analytics","description":"List sites, create goals, manage shared links, and configure custom properties in Plausible Analytics.","auth":{"kind":"api-key","hint":"Plausible Analytics API key from account settings."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"teams.list","description":"List all teams accessible to the API key.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sites.list","description":"List all sites in your Plausible account.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sites.get","description":"Retrieve details of a specific site.","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sites.create","description":"Create a new site in Plausible Analytics.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"timezone":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sites.update","description":"Update site settings like domain or timezone.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"new_domain":{"type":"string"},"timezone":{"type":"string"},"track_404_pages":{"type":"boolean"},"hash_based_routing":{"type":"boolean"},"outbound_links":{"type":"boolean"},"file_downloads":{"type":"boolean"},"form_submissions":{"type":"boolean"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"sites.delete","description":"Delete a site from Plausible Analytics.","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"goals.list","description":"List all goals configured for a site.","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"goals.create","description":"Create a new goal (event, page view, or custom).","parameters":{"type":"object","properties":{"domain":{"type":"string"},"goal_type":{"type":"string"},"event_name":{"type":"string"},"page_path":{"type":"string"},"display_name":{"type":"string"}},"required":["domain","goal_type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"goals.delete","description":"Delete a goal from a site.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"goal_id":{"type":"string"}},"required":["domain","goal_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"custom_properties.list","description":"List all custom properties configured for a site.","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"custom_properties.create","description":"Create a new custom property for a site.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"property":{"type":"string"}},"required":["domain","property"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"custom_properties.delete","description":"Delete a custom property from a site.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"property":{"type":"string"}},"required":["domain","property"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"shared_links.create","description":"Create a shared dashboard link for a site.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"name":{"type":"string"}},"required":["domain","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"guests.list","description":"List all guest invitations for a site.","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"guests.invite","description":"Invite a guest user to access a site.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"email":{"type":"string"},"role":{"type":"string"}},"required":["domain","email","role"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"guests.remove","description":"Remove a guest user from a site.","parameters":{"type":"object","properties":{"domain":{"type":"string"},"email":{"type":"string"}},"required":["domain","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"pocketbase","displayName":"PocketBase","description":"Create, read, update, and delete records in a PocketBase collection.","auth":{"kind":"api-key","hint":"PocketBase host URL, superuser email, and password."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.list","description":"Get a paginated list of records from a collection.","parameters":{"type":"object","properties":{"collection":{"type":"string","description":"Collection name"},"page":{"type":"integer","description":"Page number (default: 1)"},"perPage":{"type":"integer","description":"Records per page (default: 30)"},"sort":{"type":"string","description":"Order attribute(s). Use - for DESC, + for ASC."},"filter":{"type":"string","description":"Filter expression"},"expand":{"type":"string","description":"Auto expand relations"},"fields":{"type":"string","description":"Comma separated fields to return"},"skipTotal":{"type":"boolean","description":"Skip total counts query"}},"required":["collection"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.fullList","description":"Get all records from a collection.","parameters":{"type":"object","properties":{"collection":{"type":"string","description":"Collection name"},"sort":{"type":"string","description":"Order attribute(s)"},"filter":{"type":"string","description":"Filter expression"},"expand":{"type":"string","description":"Auto expand relations"},"fields":{"type":"string","description":"Comma separated fields to return"}},"required":["collection"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.get","description":"Get a single record by ID.","parameters":{"type":"object","properties":{"collection":{"type":"string","description":"Collection name"},"recordId":{"type":"string","description":"Record ID"},"expand":{"type":"string","description":"Auto expand relations"},"fields":{"type":"string","description":"Comma separated fields to return"}},"required":["collection","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.create","description":"Create a new record in a collection.","parameters":{"type":"object","properties":{"collection":{"type":"string","description":"Collection name"},"recordData":{"type":"object","description":"Record data fields"},"expand":{"type":"string","description":"Auto expand relations"},"fields":{"type":"string","description":"Comma separated fields to return"}},"required":["collection","recordData"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Update an existing record.","parameters":{"type":"object","properties":{"collection":{"type":"string","description":"Collection name"},"recordId":{"type":"string","description":"Record ID"},"recordData":{"type":"object","description":"Record data fields to update"},"expand":{"type":"string","description":"Auto expand relations"},"fields":{"type":"string","description":"Comma separated fields to return"}},"required":["collection","recordId","recordData"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"records.delete","description":"Delete a record.","parameters":{"type":"object","properties":{"collection":{"type":"string","description":"Collection name"},"recordId":{"type":"string","description":"Record ID"}},"required":["collection","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"collections.list","description":"List collections (tables) in the PocketBase database.","parameters":{"type":"object","properties":{"page":{"type":"integer","description":"Page number (default: 1)"},"perPage":{"type":"integer","description":"Items per page (default: 30)"},"sort":{"type":"string","description":"Order attribute(s)."},"filter":{"type":"string","description":"Filter expression"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"collections.create","description":"Create a new collection (table) in the PocketBase database.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Collection name"},"type":{"type":"string","description":"Collection type (base, auth, view). Defaults to base."},"fields":{"type":"array","description":"Schema field definitions for the collection."},"system":{"type":"boolean","description":"Whether the collection is a system collection."},"listRule":{"type":"string","description":"List API rule."},"viewRule":{"type":"string","description":"View API rule."},"createRule":{"type":"string","description":"Create API rule."},"updateRule":{"type":"string","description":"Update API rule."},"deleteRule":{"type":"string","description":"Delete API rule."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.delete","description":"Delete a collection (table) from the PocketBase database.","parameters":{"type":"object","properties":{"collection":{"type":"string","description":"Collection name or ID to delete."}},"required":["collection"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"pollybot-ai","displayName":"PollyBot AI","description":"Automate lead management with PollyBot AI chatbot integration.","auth":{"kind":"api-key","hint":"PollyBot API Key starting with your organization identifier."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"leads.create","description":"Create a new lead in PollyBot.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The unique ID for the specific chatbot"},"name":{"type":"string","description":"Lead name"},"email":{"type":"string","description":"Valid email address"},"phone":{"type":"string","description":"Phone number (optional)"},"source":{"type":"string","description":"Lead source (e.g., website, referral)"},"status":{"type":"string","description":"Lead status"},"metadata":{"type":"object","description":"Custom data as JSON object"}},"required":["chatbotId","name","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.get","description":"Get a specific lead by ID.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The chatbot ID"},"leadId":{"type":"string","description":"The unique identifier of the lead"}},"required":["chatbotId","leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.update","description":"Update an existing lead.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The chatbot ID"},"leadId":{"type":"string","description":"The unique identifier of the lead to update"},"name":{"type":"string","description":"Lead name"},"email":{"type":"string","description":"Email address"},"phone":{"type":"string","description":"Phone number"},"source":{"type":"string","description":"Lead source"},"status":{"type":"string","description":"Lead status"},"metadata":{"type":"object","description":"Custom data as JSON object"}},"required":["chatbotId","leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"leads.delete","description":"Delete a lead.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The chatbot ID"},"leadId":{"type":"string","description":"The unique identifier of the lead to delete"}},"required":["chatbotId","leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.list","description":"List leads for a chatbot.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The chatbot ID"},"page":{"type":"integer","description":"Page number (0-indexed)"},"limit":{"type":"integer","description":"Max 100 results per page"},"search":{"type":"string","description":"Search in name and email fields"}},"required":["chatbotId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.tag","description":"Add a tag to a lead.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The chatbot ID"},"leadId":{"type":"string","description":"The lead ID"},"tag":{"type":"string","description":"Tag value to attach to the lead"}},"required":["chatbotId","leadId","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.bulk-import","description":"Bulk import leads from a CSV/JSON payload.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The chatbot ID"},"leads":{"type":"array","description":"Array of lead objects to import (name, email, phone, etc.)."},"format":{"type":"string","description":"Source format hint, e.g. csv or json."}},"required":["chatbotId","leads"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.list","description":"List outbound campaigns for a chatbot.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The chatbot ID"},"page":{"type":"integer","description":"Page number (0-indexed)"},"limit":{"type":"integer","description":"Max results per page"}},"required":["chatbotId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.start","description":"Start an outbound campaign.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The chatbot ID"},"campaignId":{"type":"string","description":"The campaign ID to start"}},"required":["chatbotId","campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"polytomic","displayName":"Polytomic","description":"List and create ETL/reverse-ETL syncs, inspect sync status, and list available connection types.","auth":{"kind":"api-key","hint":"API key generated in the Polytomic Settings panel. Sent as the Authorization: Bearer header."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"syncs.list","description":"List configured syncs.","parameters":{"type":"object","properties":{"active":{"type":"boolean"},"mode":{"type":"string"},"target_connection_id":{"type":"string"},"limit":{"type":"integer"},"page_token":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"syncs.status","description":"Get the current status of a sync by its id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"connection_types.list","description":"List all connection types (source/destination connectors) supported by this deployment.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"syncs.create","description":"Create a new sync from one or more models to a destination.","parameters":{"type":"object","properties":{"name":{"type":"string"},"target":{"type":"object"},"mode":{"type":"string"},"fields":{"type":"array","items":{"type":"object"}},"schedule":{"type":"object"}},"required":["name","target","mode","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"postgres","displayName":"PostgreSQL","description":"Inspect PostgreSQL schemas and tables and run bounded structured row reads over a verified TLS connection.","auth":{"kind":"api-key","hint":"JSON with a public PostgreSQL host, database, user, password, optional port, and optional TLS CA. Verified TLS is mandatory."},"defaultConsistencyModel":"authoritative","category":"database","rateLimit":{"requests":120,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"postgres.schemas.list","class":"read","description":"List schemas visible to the connected PostgreSQL user.","parameters":{"type":"object","properties":{},"additionalProperties":false}},{"name":"postgres.tables.list","class":"read","description":"List tables and views in one schema.","parameters":{"type":"object","properties":{"schema":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Schema name; defaults to public."}},"additionalProperties":false}},{"name":"postgres.tables.describe","class":"read","description":"Read ordered column metadata for one table or view.","parameters":{"type":"object","properties":{"schema":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Schema name; defaults to public."},"table":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Table or view name."}},"required":["table"],"additionalProperties":false}},{"name":"postgres.rows.select","class":"read","description":"Read bounded rows using an identifier-safe query builder with scalar predicates.","parameters":{"type":"object","properties":{"schema":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Schema name; defaults to public."},"table":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Table or view name."},"columns":{"type":"array","minItems":1,"maxItems":64,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Column name."}},"filters":{"type":"array","maxItems":20,"items":{"type":"object","properties":{"column":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Column name."},"operator":{"type":"string","enum":["eq","ne","lt","lte","gt","gte","like","is-null","not-null"]},"value":{"type":["string","number","boolean","null"]}},"required":["column","operator"],"additionalProperties":false}},"orderBy":{"type":"array","maxItems":8,"items":{"type":"object","properties":{"column":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Column name."},"direction":{"type":"string","enum":["asc","desc"],"default":"asc"}},"required":["column"],"additionalProperties":false}},"limit":{"type":"integer","minimum":1,"maximum":10000,"default":100},"offset":{"type":"integer","minimum":0,"maximum":1000000,"default":0}},"required":["table","columns"],"additionalProperties":false}}]},{"kind":"posthog","displayName":"PostHog","description":"Product analytics: capture events and manage projects in PostHog.","auth":{"kind":"api-key","hint":"PostHog API key and instance URL. The connection must store apiUrl (e.g. https://app.posthog.com) or your self-hosted instance URL."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"events.create","description":"Create an event in PostHog.","parameters":{"type":"object","properties":{"event":{"type":"string","description":"The event name"},"distinctId":{"type":"string","description":"The distinct ID of the user or entity performing the event"},"properties":{"type":"object","description":"Event properties"},"timestamp":{"type":"string","description":"Event timestamp (ISO 8601 format)"},"context":{"type":"object","description":"Additional context for the event"},"messageId":{"type":"string","description":"Unique message identifier for idempotency"}},"required":["event","distinctId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.create","description":"Create a new PostHog project.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Project name"},"team":{"type":"integer","description":"Team ID"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.list","description":"List PostHog projects.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.get","description":"Get a specific PostHog project by ID.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Project ID"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cohorts.list","description":"List cohorts in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Project ID"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"feature-flags.list","description":"List feature flags in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Project ID"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"feature-flags.create","description":"Create a feature flag in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Project ID"},"key":{"type":"string","description":"Feature flag key"},"name":{"type":"string","description":"Feature flag name"}},"required":["projectId","key","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"feature-flags.update","description":"Update or toggle a feature flag in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Project ID"},"featureFlagId":{"type":"string","description":"Feature flag ID"},"key":{"type":"string","description":"Feature flag key"},"name":{"type":"string","description":"Feature flag name"},"active":{"type":"boolean","description":"Whether the feature flag is active"},"filters":{"type":"object","description":"Targeting filters/conditions"},"rollout_percentage":{"type":"integer","description":"Rollout percentage"},"deleted":{"type":"boolean","description":"Soft-delete marker"}},"required":["projectId","featureFlagId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"feature-flags.delete","description":"Delete a feature flag from a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Project ID"},"featureFlagId":{"type":"string","description":"Feature flag ID"}},"required":["projectId","featureFlagId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cohorts.create","description":"Create a new cohort in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Project ID"},"name":{"type":"string","description":"Cohort name"},"description":{"type":"string","description":"Cohort description"},"groups":{"type":"array","description":"Static or dynamic cohort group definitions"},"is_static":{"type":"boolean","description":"Whether the cohort is static"}},"required":["projectId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"annotations.create","description":"Create a release/event annotation in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Project ID"},"content":{"type":"string","description":"Annotation content"},"date_marker":{"type":"string","description":"ISO 8601 timestamp for the annotation"},"scope":{"type":"string","description":"Annotation scope (organization, project, dashboard_item)"},"dashboard_item":{"type":"integer","description":"Dashboard item ID when scope is dashboard_item"}},"required":["projectId","content","date_marker"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"insights.create","description":"Create a saved insight/dashboard tile in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string","description":"Project ID"},"name":{"type":"string","description":"Insight name"},"description":{"type":"string","description":"Insight description"},"filters":{"type":"object","description":"Query filter definition"},"query":{"type":"object","description":"HogQL/insight query definition"},"dashboard":{"type":"integer","description":"Dashboard ID to attach the insight to"},"favorited":{"type":"boolean","description":"Whether to mark the insight as a favorite"}},"required":["projectId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"postiz","displayName":"Postiz","description":"Manage social media posts and scheduling across 30+ platforms.","auth":{"kind":"api-key","hint":"Postiz API key from Settings > Developers > Public API"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"posts.create","description":"Create a new social media post.","parameters":{"type":"object","properties":{"content":{"type":"string","description":"Text content of the post"},"type":{"type":"string","enum":["now","draft","schedule"],"description":"Post type: immediate, draft, or scheduled"},"date":{"type":"string","description":"ISO 8601 publish date for scheduled posts"},"media":{"type":"object","description":"Media file paths to attach"},"shortLink":{"type":"boolean","description":"Automatically shorten URLs"},"settings":{"type":"object","description":"Platform-specific settings"}},"required":["content","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.list","description":"List all social media posts.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"posts.delete","description":"Delete a social media post.","parameters":{"type":"object","properties":{"postId":{"type":"string","description":"The ID of the post to delete"}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.update","description":"Update a scheduled post.","parameters":{"type":"object","properties":{"postId":{"type":"string","description":"The ID of the post to update"},"content":{"type":"string","description":"Updated text content"},"type":{"type":"string","enum":["now","draft","schedule"],"description":"Post type"},"date":{"type":"string","description":"ISO 8601 publish date for scheduled posts"},"media":{"type":"object","description":"Media file paths to attach"},"shortLink":{"type":"boolean","description":"Automatically shorten URLs"},"settings":{"type":"object","description":"Platform-specific settings"}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.schedule","description":"Schedule a post for a future time. Pass type=\"schedule\" plus the ISO date.","parameters":{"type":"object","properties":{"content":{"type":"string","description":"Text content of the post"},"type":{"type":"string","enum":["schedule"],"description":"Must be \"schedule\"."},"date":{"type":"string","description":"ISO 8601 publish date"},"media":{"type":"object","description":"Media file paths to attach"},"shortLink":{"type":"boolean","description":"Automatically shorten URLs"},"settings":{"type":"object","description":"Platform-specific settings"}},"required":["content","type","date"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"integrations.disconnect","description":"Disconnect an integration.","parameters":{"type":"object","properties":{"integrationId":{"type":"string","description":"The ID of the integration to disconnect"}},"required":["integrationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.delete","description":"Delete an uploaded media asset.","parameters":{"type":"object","properties":{"mediaId":{"type":"string","description":"The ID of the media asset to delete"}},"required":["mediaId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"integrations.list","description":"List connected social media platform integrations.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"analytics.platform","description":"Get analytics for a specific platform.","parameters":{"type":"object","properties":{"days":{"type":"integer","description":"Number of days to look back (e.g. 7, 30, 90)"}},"required":["days"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"analytics.post","description":"Get analytics for a specific post.","parameters":{"type":"object","properties":{"postId":{"type":"string","description":"The ID of the post"}},"required":["postId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"media.upload","description":"Upload media from a URL.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Public URL of the image or video to upload"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"slots.find","description":"Find available posting slots.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"postmark","displayName":"Postmark","description":"Send transactional email through the Postmark Server API — single send, batch send, template send, message search, bounce inspection, outbound stats, and template management.","auth":{"kind":"api-key","hint":"Postmark Server API token (Servers → your server → API Tokens). Sent as the `X-Postmark-Server-Token` header. Account-scoped operations (creating servers, domains, sender signatures) require a different token and are intentionally out of scope for this connector."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"server.get","description":"Return the Postmark server this token belongs to (GET /server). Use as a credential probe.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"email.send","description":"Send a single transactional email (POST /email). Either HtmlBody or TextBody (or both) must be supplied; Postmark rejects empty payloads.","parameters":{"type":"object","properties":{"From":{"type":"string","description":"Sender address. Must match a verified Postmark Signature or Domain."},"To":{"type":"string","description":"Comma-separated recipient list."},"Cc":{"type":"string"},"Bcc":{"type":"string"},"Subject":{"type":"string"},"Tag":{"type":"string","description":"Single tag used by Postmark analytics + filtering."},"HtmlBody":{"type":"string"},"TextBody":{"type":"string"},"ReplyTo":{"type":"string"},"Metadata":{"type":"object","description":"Up to 25 key/value pairs (string values, 1KB total) echoed in webhooks and stats.","additionalProperties":{"type":"string"}},"Headers":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string"},"Value":{"type":"string"}},"required":["Name","Value"]}},"TrackOpens":{"type":"boolean"},"TrackLinks":{"type":"string","enum":["None","HtmlAndText","HtmlOnly","TextOnly"]},"MessageStream":{"type":"string","description":"Outbound message stream ID (default \"outbound\" for transactional; \"broadcast\" for broadcast streams)."},"Attachments":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string","description":"Filename shown to the recipient."},"Content":{"type":"string","description":"Base64-encoded file content."},"ContentType":{"type":"string","description":"MIME type (e.g. application/pdf)."},"ContentID":{"type":"string","description":"Optional cid: identifier for inline attachments (used in HTML img src=\"cid:...\")."}},"required":["Name","Content","ContentType"]}}},"required":["From"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"email.send.batch","description":"Send up to 500 transactional emails in a single request (POST /email/batch). Returns one result object per submitted message, in order.","parameters":{"type":"object","properties":{"Messages":{"type":"array","items":{"type":"object","properties":{"From":{"type":"string","description":"Sender address. Must match a verified Postmark Signature or Domain."},"To":{"type":"string","description":"Comma-separated recipient list."},"Cc":{"type":"string"},"Bcc":{"type":"string"},"Subject":{"type":"string"},"Tag":{"type":"string","description":"Single tag used by Postmark analytics + filtering."},"HtmlBody":{"type":"string"},"TextBody":{"type":"string"},"ReplyTo":{"type":"string"},"Metadata":{"type":"object","description":"Up to 25 key/value pairs (string values, 1KB total) echoed in webhooks and stats.","additionalProperties":{"type":"string"}},"Headers":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string"},"Value":{"type":"string"}},"required":["Name","Value"]}},"TrackOpens":{"type":"boolean"},"TrackLinks":{"type":"string","enum":["None","HtmlAndText","HtmlOnly","TextOnly"]},"MessageStream":{"type":"string","description":"Outbound message stream ID (default \"outbound\" for transactional; \"broadcast\" for broadcast streams)."},"Attachments":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string","description":"Filename shown to the recipient."},"Content":{"type":"string","description":"Base64-encoded file content."},"ContentType":{"type":"string","description":"MIME type (e.g. application/pdf)."},"ContentID":{"type":"string","description":"Optional cid: identifier for inline attachments (used in HTML img src=\"cid:...\")."}},"required":["Name","Content","ContentType"]}}},"required":["From"]},"maxItems":500}},"required":["Messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"email.send.template","description":"Render and send a single email using a Postmark template (POST /email/withTemplate). Supply TemplateId or TemplateAlias plus a TemplateModel that fills the template variables.","parameters":{"type":"object","properties":{"From":{"type":"string","description":"Verified sender address."},"To":{"type":"string"},"Cc":{"type":"string"},"Bcc":{"type":"string"},"Tag":{"type":"string"},"ReplyTo":{"type":"string"},"TemplateId":{"type":"integer","description":"Numeric template identifier. Mutually exclusive with TemplateAlias."},"TemplateAlias":{"type":"string","description":"String alias of the template. Mutually exclusive with TemplateId."},"TemplateModel":{"type":"object","description":"Key/value map applied to the template variables.","additionalProperties":true},"InlineCss":{"type":"boolean","description":"If true (default for HTML templates), inlines CSS at send time."},"TrackOpens":{"type":"boolean"},"TrackLinks":{"type":"string","enum":["None","HtmlAndText","HtmlOnly","TextOnly"]},"MessageStream":{"type":"string"},"Metadata":{"type":"object","additionalProperties":{"type":"string"}},"Headers":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string"},"Value":{"type":"string"}},"required":["Name","Value"]}},"Attachments":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string","description":"Filename shown to the recipient."},"Content":{"type":"string","description":"Base64-encoded file content."},"ContentType":{"type":"string","description":"MIME type (e.g. application/pdf)."},"ContentID":{"type":"string","description":"Optional cid: identifier for inline attachments (used in HTML img src=\"cid:...\")."}},"required":["Name","Content","ContentType"]}}},"required":["From","TemplateModel"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"email.send.template.batch","description":"Send up to 500 template-rendered messages in one request (POST /email/batchWithTemplates). Each entry independently selects a TemplateId or TemplateAlias.","parameters":{"type":"object","properties":{"Messages":{"type":"array","maxItems":500,"items":{"type":"object","properties":{"From":{"type":"string","description":"RFC-5322 mailbox. Either bare `user@example.com` or `\"Name\" <user@example.com>`."},"To":{"type":"string"},"Cc":{"type":"string"},"Bcc":{"type":"string"},"TemplateId":{"type":"integer"},"TemplateAlias":{"type":"string"},"TemplateModel":{"type":"object","additionalProperties":true},"Tag":{"type":"string"},"MessageStream":{"type":"string"},"Metadata":{"type":"object","additionalProperties":{"type":"string"}},"Headers":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string"},"Value":{"type":"string"}},"required":["Name","Value"]}},"Attachments":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string","description":"Filename shown to the recipient."},"Content":{"type":"string","description":"Base64-encoded file content."},"ContentType":{"type":"string","description":"MIME type (e.g. application/pdf)."},"ContentID":{"type":"string","description":"Optional cid: identifier for inline attachments (used in HTML img src=\"cid:...\")."}},"required":["Name","Content","ContentType"]}}},"required":["From","TemplateModel"]}}},"required":["Messages"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.outbound.search","description":"Search outbound messages (GET /messages/outbound). Supports filters by recipient, tag, status, message stream, and date range; paginated by count + offset.","parameters":{"type":"object","properties":{"count":{"type":"integer","minimum":1,"maximum":500,"description":"Page size. Postmark default 50."},"offset":{"type":"integer","minimum":0},"recipient":{"type":"string"},"fromemail":{"type":"string"},"tag":{"type":"string"},"status":{"type":"string","enum":["queued","sent","failed"]},"todate":{"type":"string","description":"YYYY-MM-DD (exclusive upper bound)."},"fromdate":{"type":"string","description":"YYYY-MM-DD (inclusive lower bound)."},"messagestream":{"type":"string"},"subject":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.outbound.get","description":"Fetch a single outbound message by MessageID (GET /messages/outbound/{messageId}/details).","parameters":{"type":"object","properties":{"messageId":{"type":"string","description":"Postmark MessageID (UUID)."}},"required":["messageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bounces.search","description":"List bounces (GET /bounces). Filter by bounce type, inactive flag, recipient, tag, or message stream.","parameters":{"type":"object","properties":{"count":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0},"type":{"type":"string","description":"Postmark bounce type (HardBounce, Transient, Unsubscribe, Subscribe, AutoResponder, AddressChange, DnsError, SpamNotification, OpenRelayTest, Unknown, SoftBounce, VirusNotification, ChallengeVerification, BadEmailAddress, SpamComplaint, ManuallyDeactivated, Unconfirmed, Blocked, SMTPApiError, InboundError, DMARCPolicy, TemplateRenderingFailed)."},"inactive":{"type":"boolean"},"emailFilter":{"type":"string"},"tag":{"type":"string"},"messageID":{"type":"string"},"fromdate":{"type":"string"},"todate":{"type":"string"},"messagestream":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bounces.get","description":"Fetch a single bounce record (GET /bounces/{bounceId}).","parameters":{"type":"object","properties":{"bounceId":{"type":"integer"}},"required":["bounceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bounces.activate","description":"Reactivate a recipient previously suppressed because of a hard bounce (PUT /bounces/{bounceId}/activate). Postmark validates that the recipient is currently inactive.","parameters":{"type":"object","properties":{"bounceId":{"type":"integer"}},"required":["bounceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"stats.outbound.overview","description":"Outbound delivery overview for a window (GET /stats/outbound).","parameters":{"type":"object","properties":{"tag":{"type":"string"},"fromdate":{"type":"string","description":"YYYY-MM-DD."},"todate":{"type":"string","description":"YYYY-MM-DD."},"messagestream":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"templates.list","description":"List templates owned by this server (GET /templates).","parameters":{"type":"object","properties":{"count":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0},"templateType":{"type":"string","enum":["Standard","Layout"]},"layoutTemplate":{"type":"string","description":"Filter to templates that use the named layout."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"templates.get","description":"Fetch a single template by ID or alias (GET /templates/{idOrAlias}).","parameters":{"type":"object","properties":{"idOrAlias":{"type":"string"}},"required":["idOrAlias"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"templates.create","description":"Create a new template (POST /templates).","parameters":{"type":"object","properties":{"Name":{"type":"string"},"Subject":{"type":"string"},"HtmlBody":{"type":"string"},"TextBody":{"type":"string"},"Alias":{"type":"string"},"TemplateType":{"type":"string","enum":["Standard","Layout"]},"LayoutTemplate":{"type":"string"}},"required":["Name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"templates.update","description":"Update an existing template by ID or alias (PUT /templates/{idOrAlias}). Only the fields supplied are modified; omit fields to leave them unchanged.","parameters":{"type":"object","properties":{"idOrAlias":{"type":"string","description":"Template ID or string alias."},"Name":{"type":"string"},"Subject":{"type":"string"},"HtmlBody":{"type":"string"},"TextBody":{"type":"string"},"Alias":{"type":"string"},"TemplateType":{"type":"string","enum":["Standard","Layout"]},"LayoutTemplate":{"type":"string"}},"required":["idOrAlias"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"templates.delete","description":"Delete a template by ID or alias (DELETE /templates/{idOrAlias}).","parameters":{"type":"object","properties":{"idOrAlias":{"type":"string","description":"Template ID or string alias."}},"required":["idOrAlias"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bounces.delete","description":"Delete suppression records for one or more recipients on a message stream (POST /message-streams/{streamId}/suppressions/delete). This is Postmark's \"un-suppress\" operation — the way to clear a bounce-driven block so future sends to that recipient are accepted again.","parameters":{"type":"object","properties":{"streamId":{"type":"string","description":"Outbound message stream ID (e.g. \"outbound\", \"broadcast\")."},"Suppressions":{"type":"array","description":"List of email addresses to remove from the stream's suppression list.","items":{"type":"object","properties":{"EmailAddress":{"type":"string"}},"required":["EmailAddress"]}}},"required":["streamId","Suppressions"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"servers.update","description":"Update settings on the server this token belongs to (PUT /server). Server-token scoped — account-level server provisioning (creating new servers) requires an account token and is intentionally out of scope.","parameters":{"type":"object","properties":{"Name":{"type":"string"},"Color":{"type":"string","description":"UI badge color (Purple, Blue, Turquoise, Green, Red, Yellow, Grey)."},"SmtpApiActivated":{"type":"boolean"},"RawEmailEnabled":{"type":"boolean"},"DeliveryHookUrl":{"type":"string"},"InboundHookUrl":{"type":"string"},"BounceHookUrl":{"type":"string"},"OpenHookUrl":{"type":"string"},"ClickHookUrl":{"type":"string"},"DeliveryType":{"type":"string","enum":["Live","Sandbox"],"description":"Live sends real email; Sandbox is a no-send dev mode."},"PostFirstOpenOnly":{"type":"boolean"},"TrackOpens":{"type":"boolean"},"TrackLinks":{"type":"string","enum":["None","HtmlAndText","HtmlOnly","TextOnly"]},"IncludeBounceContentInHook":{"type":"boolean"},"EnableSmtpApiErrorHooks":{"type":"boolean"}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"predict-leads","displayName":"PredictLeads","description":"Query company intelligence data including companies, job openings, technologies, news events, and connections.","auth":{"kind":"api-key","hint":"PredictLeads API key and token."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"companies.find","description":"Find companies by location, size range, and filters.","parameters":{"type":"object","properties":{"location":{"type":"string"},"minMaxSizes":{"type":"string"},"activeOnly":{"type":"boolean"},"notClosed":{"type":"boolean"}},"required":["location","minMaxSizes"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.findByDomain","description":"Find a company by domain.","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobOpenings.find","description":"Find job openings with optional filters.","parameters":{"type":"object","properties":{"location":{"type":"string"},"minMaxSizes":{"type":"string"},"activeOnly":{"type":"boolean"},"withDescriptionOnly":{"type":"boolean"},"withLocationOnly":{"type":"boolean"},"categories":{"type":"string"},"onetCodes":{"type":"object"},"foundAtFrom":{"type":"string"},"foundAtUntil":{"type":"string"}},"required":["location","minMaxSizes"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobOpenings.getById","description":"Get a job opening by ID.","parameters":{"type":"object","properties":{"jobOpeningId":{"type":"string"}},"required":["jobOpeningId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobOpenings.getCompanyActions","description":"Get job opening actions for a company.","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"technologies.findByCompany","description":"Find technologies used by a company.","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.findByTechnologyId","description":"Find companies that use a specific technology.","parameters":{"type":"object","properties":{"technologyId":{"type":"string"}},"required":["technologyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"newsEvents.findById","description":"Find a news event by ID.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"newsEvents.findByDomain","description":"Find news events for a company by domain.","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"connections.find","description":"Find connections.","parameters":{"type":"object","properties":{"location":{"type":"string"},"minMaxSizes":{"type":"string"}},"required":["location","minMaxSizes"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"connections.findByDomain","description":"Find connections for a company by domain.","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"productboard","displayName":"Productboard","description":"Manage features and capture product feedback with Productboard.","auth":{"kind":"api-key","hint":"Productboard API token."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"features.create","description":"Create a new feature.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"parentType":{"type":"string"},"parentId":{"type":"string"},"type":{"type":"string"},"archived":{"type":"boolean"}},"required":["name","description","parentType","parentId","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"features.update","description":"Update an existing feature.","parameters":{"type":"object","properties":{"featureId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"archived":{"type":"boolean"}},"required":["featureId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"features.get","description":"Retrieve a feature by ID.","parameters":{"type":"object","properties":{"featureId":{"type":"string"}},"required":["featureId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"features.list","description":"List features.","parameters":{"type":"object","properties":{"archived":{"type":"boolean"},"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"notes.create","description":"Create a feedback note.","parameters":{"type":"object","properties":{"title":{"type":"string"},"content":{"type":"string"},"userEmail":{"type":"string"},"companyDomain":{"type":"string"},"displayUrl":{"type":"string"},"sourceOrigin":{"type":"string"},"sourceRecordId":{"type":"string"},"tags":{"type":"object"}},"required":["title","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.get","description":"Retrieve a note by ID.","parameters":{"type":"object","properties":{"noteId":{"type":"string"}},"required":["noteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"notes.list","description":"List feedback notes.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"features.delete","description":"Delete a feature.","parameters":{"type":"object","properties":{"featureId":{"type":"string"}},"required":["featureId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.update","description":"Update a customer feedback note.","parameters":{"type":"object","properties":{"noteId":{"type":"string"},"title":{"type":"string"},"content":{"type":"string"},"displayUrl":{"type":"string"},"tags":{"type":"object"}},"required":["noteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.delete","description":"Delete a customer feedback note.","parameters":{"type":"object","properties":{"noteId":{"type":"string"}},"required":["noteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"components.create","description":"Create a new component grouping.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"parentId":{"type":"string","description":"Optional parent component or product ID."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"proxycurl","displayName":"Proxycurl","description":"Enrich LinkedIn people and company profiles with Proxycurl.","auth":{"kind":"api-key","hint":"Proxycurl API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"person.profile.get","description":"Get person profile from LinkedIn URL.","parameters":{"type":"object","properties":{"linkedin_profile_url":{"type":"string"},"extra":{"type":"string"},"github_profile_id":{"type":"string"},"twitter_profile_id":{"type":"string"},"facebook_profile_id":{"type":"string"}},"required":["linkedin_profile_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.profile.get","description":"Get company profile from LinkedIn URL.","parameters":{"type":"object","properties":{"linkedin_company_url":{"type":"string"},"extra":{"type":"string"},"resolve_numeric_id":{"type":"boolean"},"categories":{"type":"string"}},"required":["linkedin_company_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"people.search","description":"Search people on LinkedIn.","parameters":{"type":"object","properties":{"linkedin_first_name":{"type":"string"},"linkedin_last_name":{"type":"string"},"linkedin_company_name":{"type":"string"},"linkedin_title":{"type":"string"},"linkedin_city":{"type":"string"},"linkedin_country":{"type":"string"},"page_size":{"type":"integer"},"enrich_profile":{"type":"boolean"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"person.email.lookup","description":"Lookup person email from LinkedIn profile URL.","parameters":{"type":"object","properties":{"linkedin_profile_url":{"type":"string"},"company_domain":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"}},"required":["linkedin_profile_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"pushbullet","displayName":"Pushbullet","description":"Send cross-device notifications via Pushbullet.","auth":{"kind":"oauth2","authorizationUrl":"https://www.pushbullet.com/authorize","tokenUrl":"https://api.pushbullet.com/oauth2/token","scopes":[],"clientIdEnv":"PUSHBULLET_OAUTH_CLIENT_ID","clientSecretEnv":"PUSHBULLET_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"notifications.sendLink","description":"Send a link notification.","parameters":{"type":"object","properties":{"deviceIden":{"type":"string"},"title":{"type":"string"},"body":{"type":"string"},"url":{"type":"string"}},"required":["title","body","url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notifications.sendNote","description":"Send a note notification.","parameters":{"type":"object","properties":{"deviceIden":{"type":"string"},"title":{"type":"string"},"body":{"type":"string"}},"required":["title","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"pushover","displayName":"Pushover","description":"Send push notifications to devices via Pushover.","auth":{"kind":"api-key","hint":"Pushover API token (application key) and user key. Both are required."},"category":"comms","defaultConsistencyModel":"advisory","capabilities":[{"name":"notifications.send","description":"Send a push notification to a Pushover user or group.","parameters":{"type":"object","properties":{"api_token":{"type":"string","description":"Pushover application API token/key."},"user_key":{"type":"string","description":"Pushover user key or group key to send the notification to."},"message":{"type":"string","description":"The message body to send."},"title":{"type":"string","description":"Optional title for the notification."},"priority":{"type":"integer","description":"Priority level of the notification (-2 to 2). -2 is lowest, 2 is emergency. Default is 0."},"url":{"type":"string","description":"Optional supplementary URL to include with the message."},"url_title":{"type":"string","description":"Optional title for the supplementary URL."},"device":{"type":"string","description":"Optional device name to send to. If omitted, sends to all user devices."},"html":{"type":"boolean","description":"Optional flag to enable HTML parsing in the message body."},"timestamp":{"type":"string","description":"Optional Unix timestamp to display instead of the current time."},"retry":{"type":"integer","description":"Optional retry interval in seconds. Only applicable when priority is 2."},"expire":{"type":"integer","description":"Optional expiration time in seconds. Only applicable when priority is 2."}},"required":["api_token","user_key","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"qawafel","displayName":"Qawafel","description":"B2B marketplace and ZATCA-compliant document platform — sync products, orders, merchants and invoices with Saudi Arabia.","auth":{"kind":"api-key","hint":"Qawafel API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"products.create","description":"Create a product in Qawafel.","parameters":{"type":"object","properties":{"sku":{"type":"string"},"unit_price":{"type":"string"},"description_en":{"type":"string"},"description_ar":{"type":"string"},"barcode":{"type":"string"},"is_active":{"type":"boolean"}},"required":["sku","unit_price"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.update","description":"Update a product in Qawafel.","parameters":{"type":"object","properties":{"product_id":{"type":"string"},"sku":{"type":"string"},"unit_price":{"type":"string"},"description_en":{"type":"string"},"description_ar":{"type":"string"},"barcode":{"type":"string"},"is_active":{"type":"boolean"}},"required":["product_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"products.get","description":"Get a single product from Qawafel.","parameters":{"type":"object","properties":{"product_id":{"type":"string"}},"required":["product_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.list","description":"List products in Qawafel.","parameters":{"type":"object","properties":{"supplier_id":{"type":"string"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.create","description":"Create an order in Qawafel.","parameters":{"type":"object","properties":{"items":{"type":"array"},"shipping_fees":{"type":"string"},"notes":{"type":"string"}},"required":["items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.updateStatus","description":"Update order status in Qawafel.","parameters":{"type":"object","properties":{"order_id":{"type":"string"},"transition":{"type":"string"}},"required":["order_id","transition"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"orders.cancel","description":"Cancel an order in Qawafel.","parameters":{"type":"object","properties":{"order_id":{"type":"string"},"reason":{"type":"string"}},"required":["order_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.get","description":"Get a single order from Qawafel.","parameters":{"type":"object","properties":{"order_id":{"type":"string"}},"required":["order_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.list","description":"List orders in Qawafel.","parameters":{"type":"object","properties":{"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"merchants.create","description":"Create a merchant in Qawafel.","parameters":{"type":"object","properties":{"legal_name":{"type":"string"},"name_en":{"type":"string"},"name_ar":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"cr_number":{"type":"string"},"vat_number":{"type":"string"},"unified_national_number":{"type":"string"},"is_taxable":{"type":"boolean"},"address_line":{"type":"string"},"city":{"type":"string"},"postal_code":{"type":"string"},"country":{"type":"string"},"district":{"type":"string"},"region":{"type":"string"},"short_address":{"type":"string"}},"required":["legal_name","name_en","name_ar","email","phone","cr_number","address_line","city","postal_code","country"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.create","description":"Create an invoice in Qawafel.","parameters":{"type":"object","properties":{"issue_date":{"type":"string"},"due_date":{"type":"string"},"shipping_fees":{"type":"string"},"payment_start_date":{"type":"string"},"payment_due_date":{"type":"string"},"notes":{"type":"string"},"items":{"type":"array"}},"required":["issue_date","due_date","items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.get","description":"Get a single invoice from Qawafel.","parameters":{"type":"object","properties":{"invoice_id":{"type":"string"}},"required":["invoice_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"invoices.list","description":"List invoices in Qawafel.","parameters":{"type":"object","properties":{"created_after":{"type":"string"},"limit":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.delete","description":"Delete a product in Qawafel.","parameters":{"type":"object","properties":{"product_id":{"type":"string"}},"required":["product_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.refund","description":"Refund an order in Qawafel.","parameters":{"type":"object","properties":{"order_id":{"type":"string"},"amount":{"type":"string"},"reason":{"type":"string"}},"required":["order_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.update","description":"Update invoice fields in Qawafel.","parameters":{"type":"object","properties":{"invoice_id":{"type":"string"},"issue_date":{"type":"string"},"due_date":{"type":"string"},"shipping_fees":{"type":"string"},"payment_start_date":{"type":"string"},"payment_due_date":{"type":"string"},"notes":{"type":"string"},"items":{"type":"array"}},"required":["invoice_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.send","description":"Send an invoice to the customer in Qawafel.","parameters":{"type":"object","properties":{"invoice_id":{"type":"string"},"email":{"type":"string"}},"required":["invoice_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"qdrant","displayName":"Qdrant","description":"Manage Qdrant vector collections, upsert and query points, run similarity search and recommendation queries, and manage payload indexes and snapshots.","auth":{"kind":"api-key","hint":"Qdrant Cloud cluster API key. Generate one in the Qdrant Cloud Console under Data Access Control → API Keys, scoped to the target cluster."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"collections.list","description":"List all collections in the cluster.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"collections.get","description":"Get detailed info for a single collection (config, points count, status).","parameters":{"type":"object","properties":{"collection_name":{"type":"string"}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"collections.exists","description":"Check whether a collection exists.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"collections.create","description":"Create a new collection. Body carries vectors config (size + distance metric), optional sparse_vectors, shard_number, replication_factor, hnsw_config, quantization_config, on_disk_payload, sharding_method.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"vectors":{"description":"Either a single VectorParams object or a map of named vectors → VectorParams."},"sparse_vectors":{"type":"object"},"shard_number":{"type":"integer","minimum":1},"replication_factor":{"type":"integer","minimum":1},"write_consistency_factor":{"type":"integer","minimum":1},"on_disk_payload":{"type":"boolean"},"hnsw_config":{"type":"object"},"wal_config":{"type":"object"},"optimizers_config":{"type":"object"},"quantization_config":{"type":"object"},"init_from":{"type":"object"},"sharding_method":{"type":"string","enum":["auto","custom"]},"strict_mode_config":{"type":"object"}},"required":["collection_name","vectors"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.update","description":"Update collection parameters (optimizer config, HNSW config, quantization config, params, vectors config). Used to retune an existing collection without recreating it.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"optimizers_config":{"type":"object"},"params":{"type":"object"},"hnsw_config":{"type":"object"},"vectors_config":{"type":"object"},"quantization_config":{"type":"object"},"sparse_vectors_config":{"type":"object"},"strict_mode_config":{"type":"object"}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.delete","description":"Delete a collection and all of its points. Irreversible.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.aliases.list","description":"List all collection aliases in the cluster.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"collections.aliases.update","description":"Apply a batch of alias actions (create_alias / delete_alias / rename_alias). Atomic across the actions list.","parameters":{"type":"object","properties":{"actions":{"type":"array","items":{"type":"object"},"description":"Array of { create_alias | delete_alias | rename_alias } objects."}},"required":["actions"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.index.create","description":"Create a payload field index to accelerate filtered search. Body specifies field_name and field_schema (keyword / integer / float / geo / text / bool / datetime / uuid).","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"field_name":{"type":"string"},"field_schema":{"description":"Either a schema string (e.g. \"keyword\") or an object with type + tokenizer options."},"wait":{"type":"boolean"},"ordering":{"type":"string","enum":["weak","medium","strong"]}},"required":["collection_name","field_name","field_schema"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.index.delete","description":"Delete a payload field index by name.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"field_name":{"type":"string"},"wait":{"type":"boolean"},"ordering":{"type":"string","enum":["weak","medium","strong"]}},"required":["collection_name","field_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"points.upsert","description":"Insert or update points. Body carries either { points: [{id, vector, payload?}, ...] } or { batch: {ids, vectors, payloads?} }. Pass wait=true to block until WAL fsync.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"points":{"type":"array","items":{"type":"object"},"description":"Array of { id, vector, payload? } point structs."},"batch":{"type":"object","description":"Columnar variant — { ids, vectors, payloads? }. Use either `points` or `batch`, not both."},"shard_key":{},"wait":{"type":"boolean"},"ordering":{"type":"string","enum":["weak","medium","strong"]}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"points.get","description":"Fetch a batch of points by id, optionally returning vectors and/or payload.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"ids":{"type":"array","items":{},"description":"Array of point ids (uint64 or uuid strings)."},"with_payload":{},"with_vector":{},"shard_key":{},"consistency":{}},"required":["collection_name","ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"points.delete","description":"Delete points by explicit id list or by filter. Body is { points: [...ids] } or { filter: {...} }; pass exactly one.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"points":{"type":"array","items":{},"description":"Array of point ids to delete."},"filter":{"type":"object","description":"Qdrant filter object — must / must_not / should clauses."},"shard_key":{},"wait":{"type":"boolean"},"ordering":{"type":"string","enum":["weak","medium","strong"]}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"points.set_payload","description":"Merge a payload object into the existing payloads of selected points.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"payload":{"type":"object"},"points":{"type":"array","items":{}},"filter":{"type":"object"},"key":{"type":"string"},"shard_key":{},"wait":{"type":"boolean"},"ordering":{"type":"string","enum":["weak","medium","strong"]}},"required":["collection_name","payload"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"points.overwrite_payload","description":"Replace the entire payload of selected points with the supplied object.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"payload":{"type":"object"},"points":{"type":"array","items":{}},"filter":{"type":"object"},"shard_key":{},"wait":{"type":"boolean"},"ordering":{"type":"string","enum":["weak","medium","strong"]}},"required":["collection_name","payload"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"points.delete_payload","description":"Delete a list of payload keys from selected points.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"keys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{}},"filter":{"type":"object"},"shard_key":{},"wait":{"type":"boolean"},"ordering":{"type":"string","enum":["weak","medium","strong"]}},"required":["collection_name","keys"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"points.clear_payload","description":"Remove all payload from selected points.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"points":{"type":"array","items":{}},"filter":{"type":"object"},"shard_key":{},"wait":{"type":"boolean"},"ordering":{"type":"string","enum":["weak","medium","strong"]}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"points.update_vectors","description":"Update vector values for a list of points (named vectors supported).","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"points":{"type":"array","items":{"type":"object"},"description":"Array of { id, vector } where vector is either a list or a name→list map."},"shard_key":{},"wait":{"type":"boolean"},"ordering":{"type":"string","enum":["weak","medium","strong"]}},"required":["collection_name","points"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"points.delete_vectors","description":"Delete named vectors from selected points without removing the points themselves.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"vector":{"type":"array","items":{"type":"string"},"description":"List of vector names to drop."},"points":{"type":"array","items":{}},"filter":{"type":"object"},"shard_key":{},"wait":{"type":"boolean"},"ordering":{"type":"string","enum":["weak","medium","strong"]}},"required":["collection_name","vector"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"points.batch_update","description":"Apply a heterogeneous batch of point operations (upsert / delete / set_payload / overwrite_payload / delete_payload / clear_payload / update_vectors / delete_vectors) atomically per-shard.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"operations":{"type":"array","items":{"type":"object"}},"wait":{"type":"boolean"},"ordering":{"type":"string","enum":["weak","medium","strong"]}},"required":["collection_name","operations"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"points.search","description":"Run a similarity search. Body carries vector (or named { name, vector }), optional filter, params (hnsw_ef, exact), limit, offset, with_payload, with_vector, score_threshold.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"vector":{},"filter":{"type":"object"},"params":{"type":"object"},"limit":{"type":"integer","minimum":1},"offset":{"type":"integer","minimum":0},"with_payload":{},"with_vector":{},"score_threshold":{"type":"number"},"shard_key":{},"consistency":{},"timeout":{"type":"integer"}},"required":["collection_name","vector","limit"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"points.search_batch","description":"Execute many similarity searches in a single request against one collection.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"searches":{"type":"array","items":{"type":"object"}},"consistency":{},"timeout":{"type":"integer"}},"required":["collection_name","searches"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"points.query","description":"Unified query endpoint — supports nearest-neighbour, recommend, discover, context, fusion, and prefetch pipelines. Body is a Query object per Qdrant ≥1.10.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"query":{},"prefetch":{},"using":{"type":"string"},"filter":{"type":"object"},"params":{"type":"object"},"limit":{"type":"integer","minimum":1},"offset":{"type":"integer","minimum":0},"with_payload":{},"with_vector":{},"score_threshold":{"type":"number"},"shard_key":{},"lookup_from":{"type":"object"},"consistency":{},"timeout":{"type":"integer"}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"points.query_batch","description":"Batch variant of the unified query endpoint.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"searches":{"type":"array","items":{"type":"object"}},"consistency":{},"timeout":{"type":"integer"}},"required":["collection_name","searches"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"points.recommend","description":"Recommend points by example: positive and/or negative example point ids (or raw vectors), optional filter, params, limit.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"positive":{"type":"array","items":{}},"negative":{"type":"array","items":{}},"strategy":{"type":"string","enum":["average_vector","best_score"]},"filter":{"type":"object"},"params":{"type":"object"},"limit":{"type":"integer","minimum":1},"offset":{"type":"integer","minimum":0},"with_payload":{},"with_vector":{},"score_threshold":{"type":"number"},"using":{"type":"string"},"lookup_from":{"type":"object"},"shard_key":{},"consistency":{},"timeout":{"type":"integer"}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"points.scroll","description":"Paginated scan of points matching an optional filter. Returns the next `offset` token for the next page.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"offset":{},"limit":{"type":"integer","minimum":1},"filter":{"type":"object"},"with_payload":{},"with_vector":{},"order_by":{},"shard_key":{},"consistency":{},"timeout":{"type":"integer"}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"points.count","description":"Count points matching an optional filter. Pass exact=false for an approximate fast path.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"filter":{"type":"object"},"exact":{"type":"boolean"},"shard_key":{},"consistency":{},"timeout":{"type":"integer"}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"snapshots.list","description":"List snapshots for a collection.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"snapshots.create","description":"Create a new snapshot of the named collection.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"wait":{"type":"boolean"}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"snapshots.delete","description":"Delete a snapshot by name.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"snapshot_name":{"type":"string"},"wait":{"type":"boolean"}},"required":["collection_name","snapshot_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"snapshots.list_full","description":"List full-cluster snapshots (all collections).","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cluster.info","description":"Get cluster topology: peer ids, leader, raft state. Useful for routing-aware clients.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cluster.collection_info","description":"Get per-shard placement and replication state for a collection.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"}},"required":["collection_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"snapshots.restore","description":"Restore a collection from a previously created snapshot URL. The Qdrant node fetches the snapshot file from `location` and replays it into the collection (creating it if needed). priority selects whether the local snapshot or the live replicas are authoritative during recovery.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"location":{"type":"string","description":"URL or local path of the snapshot file to recover from."},"priority":{"type":"string","enum":["no_sync","snapshot","replica"]},"checksum":{"type":"string","description":"Optional SHA-256 of the snapshot file for integrity."},"api_key":{"type":"string","description":"Optional api-key to authenticate the remote snapshot fetch."},"wait":{"type":"boolean"}},"required":["collection_name","location"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"shards.create","description":"Create a custom shard for collections that use sharding_method=\"custom\". Body carries shard_key (string or integer) and optional shards_number / replication_factor / placement overrides.","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"shard_key":{"description":"Shard key — string or integer."},"shards_number":{"type":"integer","minimum":1},"replication_factor":{"type":"integer","minimum":1},"placement":{"type":"array","items":{"type":"integer"}},"wait":{"type":"boolean"},"timeout":{"type":"integer"}},"required":["collection_name","shard_key"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"shards.delete","description":"Delete a custom shard from a collection. Body carries the shard_key to drop. Only valid for collections that use sharding_method=\"custom\".","parameters":{"type":"object","properties":{"collection_name":{"type":"string"},"shard_key":{"description":"Shard key to delete — string or integer."},"wait":{"type":"boolean"},"timeout":{"type":"integer"}},"required":["collection_name","shard_key"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cluster.peer.remove","description":"Remove a peer from the Raft cluster by peer_id. Pass force=true to drop the peer even when it still holds replicas (data on that peer is lost). Use after physically decommissioning a node.","parameters":{"type":"object","properties":{"peer_id":{"type":"integer"},"force":{"type":"boolean"}},"required":["peer_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"quaderno","displayName":"Quaderno","description":"Manage contacts, invoices, and expenses in Quaderno for tax compliance and financial tracking.","auth":{"kind":"api-key","hint":"Quaderno API Key (account_name and api_key credentials)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.find","description":"Search for contacts by name, email, or tax ID.","parameters":{"type":"object","properties":{"searchQuery":{"type":"string"},"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Create a new contact (customer or vendor).","parameters":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"fullName":{"type":"string"},"kind":{"type":"string"},"country":{"type":"string"},"city":{"type":"string"},"postalCode":{"type":"string"},"region":{"type":"string"},"streetLine1":{"type":"string"},"streetLine2":{"type":"string"},"taxId":{"type":"string"},"taxStatus":{"type":"string"},"language":{"type":"string"},"phone":{"type":"string"},"website":{"type":"string"},"discount":{"type":"number"},"notes":{"type":"string"},"processorId":{"type":"string"},"processor":{"type":"string"}},"required":["firstName","country"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.create","description":"Create a new invoice.","parameters":{"type":"object","properties":{"invoiceNumber":{"type":"string"},"dueDate":{"type":"string"},"customerFirstName":{"type":"string"},"customerLastName":{"type":"string"},"customerEmail":{"type":"string"},"customerCountry":{"type":"string"},"issueDate":{"type":"string"},"currency":{"type":"string"},"itemDescription":{"type":"string"},"itemQuantity":{"type":"number"},"itemUnitCost":{"type":"string"}},"required":["customerFirstName","issueDate","currency","itemDescription","itemQuantity","itemUnitCost"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update a contact's tax or billing fields.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"fullName":{"type":"string"},"kind":{"type":"string"},"country":{"type":"string"},"city":{"type":"string"},"postalCode":{"type":"string"},"region":{"type":"string"},"streetLine1":{"type":"string"},"streetLine2":{"type":"string"},"taxId":{"type":"string"},"taxStatus":{"type":"string"},"language":{"type":"string"},"phone":{"type":"string"},"website":{"type":"string"},"discount":{"type":"number"},"notes":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.delete","description":"Delete a contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.update","description":"Update an invoice.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"},"invoiceNumber":{"type":"string"},"dueDate":{"type":"string"},"issueDate":{"type":"string"},"currency":{"type":"string"},"poNumber":{"type":"string"},"notes":{"type":"string"},"tagList":{"type":"string"}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.deliver","description":"Email an invoice to the customer.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"},"emails":{"type":"string"}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"credits.create","description":"Create a credit note.","parameters":{"type":"object","properties":{"customerFirstName":{"type":"string"},"customerLastName":{"type":"string"},"customerEmail":{"type":"string"},"customerCountry":{"type":"string"},"issueDate":{"type":"string"},"currency":{"type":"string"},"creditNumber":{"type":"string"},"poNumber":{"type":"string"},"notes":{"type":"string"},"itemDescription":{"type":"string"},"itemQuantity":{"type":"number"},"itemUnitCost":{"type":"string"}},"required":["customerFirstName","issueDate","currency","itemDescription","itemQuantity","itemUnitCost"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"expenses.create","description":"Create a new expense.","parameters":{"type":"object","properties":{"issueDate":{"type":"string"},"currency":{"type":"string"},"contactFirstName":{"type":"string"},"contactLastName":{"type":"string"},"contactEmail":{"type":"string"},"contactCountry":{"type":"string"},"itemDescription":{"type":"string"},"itemQuantity":{"type":"number"},"itemUnitCost":{"type":"string"},"paymentMethod":{"type":"string"},"poNumber":{"type":"string"},"tagList":{"type":"string"}},"required":["issueDate","currency","contactFirstName","contactCountry","itemDescription","itemQuantity","itemUnitCost","paymentMethod"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"quickbooks","displayName":"QuickBooks","description":"Query QuickBooks Online entities with SQL-like queries and create or update customers, invoices, and items.","auth":{"kind":"oauth2","authorizationUrl":"https://appcenter.intuit.com/connect/oauth2","tokenUrl":"https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer","scopes":["com.intuit.quickbooks.accounting"],"clientIdEnv":"QUICKBOOKS_OAUTH_CLIENT_ID","clientSecretEnv":"QUICKBOOKS_OAUTH_CLIENT_SECRET"},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"reports.get","description":"Run a QuickBooks Online report. `reportName` is the QBO report id (ProfitAndLoss, BalanceSheet, TrialBalance, GeneralLedger, CashFlow, AgedReceivables, AgedPayables).","parameters":{"type":"object","properties":{"reportName":{"type":"string","enum":["ProfitAndLoss","BalanceSheet","TrialBalance","GeneralLedger","CashFlow","AgedReceivables","AgedPayables"]},"start_date":{"type":"string","description":"YYYY-MM-DD (inclusive)."},"end_date":{"type":"string","description":"YYYY-MM-DD (inclusive)."},"accounting_method":{"type":"string","enum":["Cash","Accrual"]},"date_macro":{"type":"string","description":"e.g. \"Last Fiscal Year\" — alternative to start/end dates."},"summarize_column_by":{"type":"string","description":"e.g. Month, Quarter, Year, Total."},"minorversion":{"type":"string"}},"required":["reportName"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"read"},{"name":"companyinfo.get","description":"Read the connected QuickBooks company profile (legal name, EIN/company id, fiscal year start, country) for the realm this connection was authorized against.","parameters":{"type":"object","properties":{"minorversion":{"type":"string"}}},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"read"},{"name":"entities.query","description":"Run a QuickBooks Online query (e.g. \"SELECT * FROM Customer WHERE Active = true MAXRESULTS 50\").","parameters":{"type":"object","properties":{"query":{"type":"string"},"minorversion":{"type":"string"}},"required":["query"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"read"},{"name":"customers.get","description":"Read a QuickBooks customer by id.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"minorversion":{"type":"string"}},"required":["customerId"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"read"},{"name":"customers.create","description":"Create a QuickBooks customer.","parameters":{"type":"object","properties":{"DisplayName":{"type":"string"},"GivenName":{"type":"string"},"FamilyName":{"type":"string"},"CompanyName":{"type":"string"},"PrimaryEmailAddr":{"type":"object"},"PrimaryPhone":{"type":"object"},"BillAddr":{"type":"object"},"Notes":{"type":"string"}},"required":["DisplayName"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.update","description":"Sparse-update a QuickBooks customer. Caller must include Id and SyncToken from the prior read.","parameters":{"type":"object","properties":{"Id":{"type":"string"},"SyncToken":{"type":"string"},"sparse":{"type":"boolean","default":true},"DisplayName":{"type":"string"},"GivenName":{"type":"string"},"FamilyName":{"type":"string"},"CompanyName":{"type":"string"},"PrimaryEmailAddr":{"type":"object"},"PrimaryPhone":{"type":"object"},"BillAddr":{"type":"object"},"Notes":{"type":"string"},"Active":{"type":"boolean"}},"required":["Id","SyncToken"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"invoices.get","description":"Read a QuickBooks invoice by id.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"},"minorversion":{"type":"string"}},"required":["invoiceId"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"read"},{"name":"invoices.create","description":"Create a QuickBooks invoice. `Line` and `CustomerRef` are required by the API.","parameters":{"type":"object","properties":{"CustomerRef":{"type":"object"},"Line":{"type":"array","items":{"type":"object"}},"TxnDate":{"type":"string"},"DueDate":{"type":"string"},"CurrencyRef":{"type":"object"},"BillEmail":{"type":"object"},"PrivateNote":{"type":"string"},"CustomerMemo":{"type":"object"}},"required":["CustomerRef","Line"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.update","description":"Sparse-update a QuickBooks invoice. Caller must include Id and SyncToken from the prior read.","parameters":{"type":"object","properties":{"Id":{"type":"string"},"SyncToken":{"type":"string"},"sparse":{"type":"boolean","default":true},"CustomerRef":{"type":"object"},"Line":{"type":"array","items":{"type":"object"}},"DueDate":{"type":"string"},"CustomerMemo":{"type":"object"},"PrivateNote":{"type":"string"}},"required":["Id","SyncToken"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"items.create","description":"Create a QuickBooks item (product or service).","parameters":{"type":"object","properties":{"Name":{"type":"string"},"Type":{"type":"string","enum":["Service","Inventory","NonInventory"]},"IncomeAccountRef":{"type":"object"},"ExpenseAccountRef":{"type":"object"},"UnitPrice":{"type":"number"},"Description":{"type":"string"},"Taxable":{"type":"boolean"}},"required":["Name","Type","IncomeAccountRef"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.delete","description":"Mark a QuickBooks customer inactive. QBO does not support hard deletes — caller must supply Id and SyncToken from the prior read.","parameters":{"type":"object","properties":{"Id":{"type":"string"},"SyncToken":{"type":"string"},"sparse":{"type":"boolean","default":true},"Active":{"type":"boolean","default":false}},"required":["Id","SyncToken"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.delete","description":"Void a QuickBooks invoice (QBO does not hard-delete invoices). Caller must supply Id and SyncToken.","parameters":{"type":"object","properties":{"Id":{"type":"string"},"SyncToken":{"type":"string"}},"required":["Id","SyncToken"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.send","description":"Email a QuickBooks invoice to the customer (optionally override the recipient with `sendTo`).","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"},"sendTo":{"type":"string"}},"required":["invoiceId"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bills.create","description":"Create a QuickBooks vendor bill. `VendorRef` and `Line` are required by the API.","parameters":{"type":"object","properties":{"VendorRef":{"type":"object"},"Line":{"type":"array","items":{"type":"object"}},"TxnDate":{"type":"string"},"DueDate":{"type":"string"},"CurrencyRef":{"type":"object"},"PrivateNote":{"type":"string"},"APAccountRef":{"type":"object"}},"required":["VendorRef","Line"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"vendors.create","description":"Create a QuickBooks vendor.","parameters":{"type":"object","properties":{"DisplayName":{"type":"string"},"GivenName":{"type":"string"},"FamilyName":{"type":"string"},"CompanyName":{"type":"string"},"PrimaryEmailAddr":{"type":"object"},"PrimaryPhone":{"type":"object"},"BillAddr":{"type":"object"},"TaxIdentifier":{"type":"string"},"AcctNum":{"type":"string"}},"required":["DisplayName"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payments.create","description":"Record a QuickBooks payment against a customer (and optionally apply to invoices via `Line[].LinkedTxn`).","parameters":{"type":"object","properties":{"CustomerRef":{"type":"object"},"TotalAmt":{"type":"number"},"TxnDate":{"type":"string"},"PaymentMethodRef":{"type":"object"},"DepositToAccountRef":{"type":"object"},"Line":{"type":"array","items":{"type":"object"}},"PrivateNote":{"type":"string"}},"required":["CustomerRef","TotalAmt"]},"requiredScopes":["com.intuit.quickbooks.accounting"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"quickzu","displayName":"Quickzu","description":"Streamline WhatsApp ordering with Quickzu — manage products, categories, orders, discounts, and business hours.","auth":{"kind":"api-key","hint":"Quickzu API key."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"business.hours.update","description":"Update business hours for a specific day.","parameters":{"type":"object","properties":{"weekday":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"]},"start":{"type":"string","description":"Start time in 24-hour format (HH:MM)."},"end":{"type":"string","description":"End time in 24-hour format (HH:MM)."},"status":{"type":"boolean","description":"Enable or disable the business day."}},"required":["weekday","start","end","status"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"categories.list","description":"List all product categories.","parameters":{"type":"object","properties":{"search":{"type":"string","description":"Search term to filter categories."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"categories.create","description":"Create a new product category.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Category name."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"categories.update","description":"Update an existing category.","parameters":{"type":"object","properties":{"categoryId":{"type":"string"},"name":{"type":"string","description":"Updated category name."}},"required":["categoryId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"categories.delete","description":"Delete a product category.","parameters":{"type":"object","properties":{"categoryId":{"type":"string"}},"required":["categoryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"products.list","description":"List all products with optional pagination and filtering.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Number of live orders to fetch per status."},"page":{"type":"integer","description":"Current page number."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.add","description":"Add a new product to the catalog.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Product name."},"desc":{"type":"string","description":"Product description."},"mrp":{"type":"number","description":"Maximum Retail Price."},"price":{"type":"number","description":"Selling price (must be <= MRP)."},"unit":{"type":"string","enum":["kg","ltr","pcs","dozen","box"],"description":"Unit of measure."},"value_per_unit":{"type":"number","description":"Unit value."},"availability":{"type":"boolean","description":"Product availability status."},"exclude_tax":{"type":"boolean","description":"Exclude tax from price."},"enable_variants":{"type":"boolean","description":"Enable product variants."}},"required":["name","mrp","unit","value_per_unit","availability"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.update","description":"Update an existing product.","parameters":{"type":"object","properties":{"productId":{"type":"string"},"name":{"type":"string"},"desc":{"type":"string"},"mrp":{"type":"number"},"price":{"type":"number"},"unit":{"type":"string"},"value_per_unit":{"type":"number"},"availability":{"type":"boolean"},"exclude_tax":{"type":"boolean"},"enable_variants":{"type":"boolean"}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"products.delete","description":"Delete a product from the catalog.","parameters":{"type":"object","properties":{"productId":{"type":"string"}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"orders.list","description":"List all orders with pagination.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Number of orders per page."},"page":{"type":"integer","description":"Page number."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.live","description":"List live orders with optional pagination.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Number of live orders per status."},"page":{"type":"integer","description":"Page number."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.get","description":"Get details of a specific order.","parameters":{"type":"object","properties":{"orderId":{"type":"string"}},"required":["orderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.update-status","description":"Update the status of an order.","parameters":{"type":"object","properties":{"orderId":{"type":"string"},"status":{"type":"string","description":"New order status."}},"required":["orderId","status"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"orders.cancel","description":"Cancel an open order.","parameters":{"type":"object","properties":{"orderId":{"type":"string"}},"required":["orderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.refund","description":"Refund an order, optionally specifying an amount and reason.","parameters":{"type":"object","properties":{"orderId":{"type":"string"},"amount":{"type":"number","description":"Optional refund amount (defaults to full order total)."},"reason":{"type":"string","description":"Optional refund reason."}},"required":["orderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"discounts.create","description":"Create a product discount.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"Discount title."},"type":{"type":"string","enum":["products","categories"],"description":"What gets discounted."},"selectedFilterValues":{"type":"array","items":{"type":"string"},"description":"Product or category IDs eligible for discount."},"value":{"type":"number","description":"Discount value (percentage or amount)."},"is_enabled":{"type":"boolean","description":"Enable or disable the discount."},"is_visible":{"type":"boolean","description":"Visibility to customers."}},"required":["title","type","value","is_enabled"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"discounts.delete","description":"Delete a product discount.","parameters":{"type":"object","properties":{"discountId":{"type":"string","description":"Discount ID."}},"required":["discountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"promo-codes.delete","description":"Delete a promotional code.","parameters":{"type":"object","properties":{"promoCodeId":{"type":"string","description":"Promo code ID."}},"required":["promoCodeId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"categories.reorder","description":"Reorder the category list.","parameters":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"string"},"description":"Category IDs in their desired display order."}},"required":["categoryIds"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"promo-codes.create","description":"Create a promotional code.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"Promotion title."},"promo_code":{"type":"string","description":"Promo code string."},"value":{"type":"number","description":"Discount value."},"filter_type":{"type":"string","enum":["products","categories"],"description":"What gets discounted."},"selectedFilterValues":{"type":"array","items":{"type":"string"},"description":"Eligible product or category IDs."},"start_date":{"type":"string","description":"Valid from date (YYYY-MM-DD format)."},"end_date":{"type":"string","description":"Valid to date (YYYY-MM-DD format)."},"minimum_cart_value":{"type":"number","description":"Minimum order amount."},"max_users_limit":{"type":"number","description":"Maximum number of uses."},"is_enabled":{"type":"boolean","description":"Enable or disable the code."}},"required":["title","promo_code","value","start_date","end_date"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"rabbitmq","displayName":"RabbitMQ","description":"Inspect queues and exchanges and publish confirmed JSON messages over verified TLS.","auth":{"kind":"api-key","hint":"JSON with a public RabbitMQ host, username, password, virtual host, and optional TLS client credentials."},"defaultConsistencyModel":"advisory","category":"webhook","rateLimit":{"requests":120,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"rabbitmq.queues.inspect","class":"read","description":"Check a queue and return its current message and consumer counts.","parameters":{"type":"object","properties":{"queue":{"type":"string","minLength":1,"maxLength":255,"description":"Existing RabbitMQ queue name."}},"required":["queue"],"additionalProperties":false}},{"name":"rabbitmq.exchanges.inspect","class":"read","description":"Check whether a named exchange exists and is visible to the connection.","parameters":{"type":"object","properties":{"exchange":{"type":"string","minLength":1,"maxLength":255,"description":"Existing RabbitMQ exchange name."}},"required":["exchange"],"additionalProperties":false}},{"name":"send.message.to.queue","class":"mutation","description":"Publish a persistent JSON message directly to an existing queue with broker confirmation.","parameters":{"type":"object","properties":{"queue":{"type":"string","minLength":1,"maxLength":255,"description":"Existing RabbitMQ queue name."},"data":{},"persistent":{"type":"boolean","default":true},"expirationMs":{"type":"integer","minimum":1,"maximum":604800000},"priority":{"type":"integer","minimum":0,"maximum":255}},"required":["queue","data"],"additionalProperties":false},"cas":"none","externalEffect":true},{"name":"send.message.to.exchange","class":"mutation","description":"Publish a persistent JSON message to an existing exchange with broker confirmation.","parameters":{"type":"object","properties":{"exchange":{"type":"string","minLength":1,"maxLength":255,"description":"Existing RabbitMQ exchange name."},"routingKey":{"type":"string","maxLength":255,"default":""},"data":{},"persistent":{"type":"boolean","default":true},"expirationMs":{"type":"integer","minimum":1,"maximum":604800000},"priority":{"type":"integer","minimum":0,"maximum":255}},"required":["exchange","data"],"additionalProperties":false},"cas":"none","externalEffect":true}]},{"kind":"raia-ai","displayName":"Raia AI","description":"Run AI agent workflows with Raia, including prompting agents and uploading agent files.","auth":{"kind":"api-key","hint":"Raia API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"agent.prompt","description":"Run a prompt against an AI agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string"},"prompt":{"type":"string"}},"required":["agentId","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"agent.file.upload","description":"Upload a file to an AI agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string"},"file":{"type":"string"}},"required":["agentId","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"ramp","displayName":"Ramp","description":"Read Ramp cards, users, transactions, reimbursements, vendors, and spend programs.","auth":{"kind":"api-key","hint":"Ramp OAuth access token. Create a free developer app or customer-issued API connection and paste the bearer token."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.list","description":"List Ramp users and their status.","parameters":{"type":"object","properties":{"page_size":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"string","description":"Opaque next-page cursor."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cards.list","description":"List physical and virtual cards.","parameters":{"type":"object","properties":{"page_size":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"string","description":"Opaque next-page cursor."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transactions.list","description":"List card transactions and accounting status.","parameters":{"type":"object","properties":{"page_size":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"string","description":"Opaque next-page cursor."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reimbursements.list","description":"List employee reimbursements.","parameters":{"type":"object","properties":{"page_size":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"string","description":"Opaque next-page cursor."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"vendors.list","description":"List vendors known to Ramp.","parameters":{"type":"object","properties":{"page_size":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"string","description":"Opaque next-page cursor."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"spend-programs.list","description":"List spend programs and controls.","parameters":{"type":"object","properties":{"page_size":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"string","description":"Opaque next-page cursor."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"rapidtext-ai","displayName":"RapidText AI","description":"Generate articles and send prompts using RapidText AI.","auth":{"kind":"api-key","hint":"RapidText AI API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"article.generate","description":"Generate an article using RapidText AI.","parameters":{"type":"object","properties":{"prompt":{"type":"string","description":"The prompt for article generation."},"max_tokens":{"type":"integer","description":"Maximum number of tokens to generate."},"temperature":{"type":"number","description":"Sampling temperature between 0 and 2."},"top_p":{"type":"number","description":"Nucleus sampling parameter."},"frequency_penalty":{"type":"number","description":"Penalty for new tokens based on frequency."},"presence_penalty":{"type":"number","description":"Penalty for new tokens based on presence."}},"required":["prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"prompt.send","description":"Send a prompt to RapidText AI for processing.","parameters":{"type":"object","properties":{"prompt":{"type":"string","description":"The text prompt to process."},"max_tokens":{"type":"integer","description":"Maximum number of tokens to generate."},"temperature":{"type":"number","description":"Sampling temperature between 0 and 2."},"top_p":{"type":"number","description":"Nucleus sampling parameter."},"frequency_penalty":{"type":"number","description":"Penalty for new tokens based on frequency."},"presence_penalty":{"type":"number","description":"Penalty for new tokens based on presence."}},"required":["prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"reachinbox","displayName":"ReachInbox","description":"Manage campaigns, leads, email accounts, and warmup schedules in ReachInbox.","auth":{"kind":"api-key","hint":"ReachInbox API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"campaigns.list","description":"Get campaign analytics and summary information.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.summary","description":"Get overall account summary.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.add","description":"Add leads to a campaign.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"},"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"customVariables":{"type":"object"}},"required":["campaignId","email","firstName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update","description":"Update a lead with custom variables or details.","parameters":{"type":"object","properties":{"leadId":{"type":"string"},"customVariables":{"type":"object"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"leads.remove","description":"Remove an email from a campaign.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"},"email":{"type":"string"}},"required":["campaignId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"blocklist.add","description":"Add emails or domains to the blocklist.","parameters":{"type":"object","properties":{"emails":{"type":"array"},"domains":{"type":"array"},"keywords":{"type":"array"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.start","description":"Start a campaign.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.pause","description":"Pause a campaign.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"warmup.enable","description":"Enable email warmup for account(s).","parameters":{"type":"object","properties":{"accountId":{"type":"string"}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"warmup.pause","description":"Pause email warmup for account(s).","parameters":{"type":"object","properties":{"accountId":{"type":"string"}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"schedule.set","description":"Set a warmup or campaign schedule.","parameters":{"type":"object","properties":{"accountId":{"type":"string"},"scheduleName":{"type":"string"},"startDate":{"type":"string"},"endDate":{"type":"string"},"startTime":{"type":"string"},"endTime":{"type":"string"},"timezone":{"type":"string"},"sunday":{"type":"boolean"},"monday":{"type":"boolean"},"tuesday":{"type":"boolean"},"wednesday":{"type":"boolean"},"thursday":{"type":"boolean"},"friday":{"type":"boolean"},"saturday":{"type":"boolean"}},"required":["accountId","scheduleName","startDate","endDate","startTime","endTime","timezone","sunday","monday","tuesday","wednesday","thursday","friday","saturday"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"email.add","description":"Add a new email account.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.create","description":"Create a new outbound email campaign.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"fromEmail":{"type":"string"},"subject":{"type":"string"},"body":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.delete","description":"Delete a campaign.","parameters":{"type":"object","properties":{"campaignId":{"type":"string"}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"templates.list","description":"List email templates available in the workspace.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"inbox.replies.fetch","description":"Fetch latest replies from the unified inbox (uni-box / master inbox).","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"campaignId":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"recall-ai","displayName":"Recall.ai","description":"Create meeting bots, inspect bot state, and send in-meeting chat messages.","auth":{"kind":"api-key","hint":"Recall.ai API key. Select a regional server on the connection; us-east-1 is the default."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"bots.create","description":"Create a Recall.ai bot that joins the supplied meeting URL.","parameters":{"type":"object","properties":{"meeting_url":{"type":"string","description":"URL of the meeting to join."},"bot_name":{"type":"string","maxLength":100,"description":"Display name shown in the meeting."}},"required":["meeting_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bots.retrieve","description":"Retrieve the status and details of a Recall.ai bot.","parameters":{"type":"object","properties":{"bot_id":{"type":"string","description":"UUID of the bot to retrieve."}},"required":["bot_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.send","description":"Send a chat message from an active Recall.ai bot.","parameters":{"type":"object","properties":{"bot_id":{"type":"string","description":"UUID of the bot sending the message."},"message":{"type":"string","maxLength":4096},"to":{"type":"string","description":"Recipient; defaults to everyone."},"pin":{"type":"boolean","description":"Pin the message when the meeting platform supports it."}},"required":["bot_id","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"recurly","displayName":"Recurly","description":"Manage Recurly billing accounts, plans, subscriptions, invoices, and subscription lifecycle state.","auth":{"kind":"api-key","hint":"Recurly private API key from Developer Settings. Sent as the HTTP Basic username with an empty password."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"sites.list","description":"List sites accessible to the supplied Recurly private API key.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.list","description":"List billing accounts with optional lifecycle and time filters.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200},"cursor":{"type":"string"},"sort":{"type":"string","enum":["asc","desc"]},"begin_time":{"type":"string","description":"ISO 8601 lower timestamp bound."},"end_time":{"type":"string","description":"ISO 8601 upper timestamp bound."},"state":{"type":"string","enum":["active","closed","any"]},"email":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.get","description":"Read one billing account by UUID or code-prefixed identifier.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Account UUID or `code-<account code>`."}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.create","description":"Create a billing account.","parameters":{"type":"object","properties":{"code":{"type":"string"},"email":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"company":{"type":"string"},"preferred_locale":{"type":"string"},"preferred_time_zone":{"type":"string"},"address":{"type":"object"},"custom_fields":{"type":"array","items":{"type":"object"}}},"required":["code","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"accounts.update","description":"Update profile, address, locale, or custom fields on a billing account.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Account UUID or `code-<account code>`."},"email":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"company":{"type":"string"},"preferred_locale":{"type":"string"},"preferred_time_zone":{"type":"string"},"address":{"type":"object"},"custom_fields":{"type":"array","items":{"type":"object"}}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"plans.list","description":"List subscription plans.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200},"cursor":{"type":"string"},"sort":{"type":"string","enum":["asc","desc"]},"begin_time":{"type":"string","description":"ISO 8601 lower timestamp bound."},"end_time":{"type":"string","description":"ISO 8601 upper timestamp bound."},"state":{"type":"string","enum":["active","inactive"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.list","description":"List subscriptions across the site.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200},"cursor":{"type":"string"},"sort":{"type":"string","enum":["asc","desc"]},"begin_time":{"type":"string","description":"ISO 8601 lower timestamp bound."},"end_time":{"type":"string","description":"ISO 8601 upper timestamp bound."},"state":{"type":"string","enum":["active","canceled","expired","failed","future","paused"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.subscriptions.list","description":"List subscriptions belonging to one billing account.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200},"cursor":{"type":"string"},"sort":{"type":"string","enum":["asc","desc"]},"begin_time":{"type":"string","description":"ISO 8601 lower timestamp bound."},"end_time":{"type":"string","description":"ISO 8601 upper timestamp bound."},"accountId":{"type":"string","description":"Account UUID or `code-<account code>`."},"state":{"type":"string","enum":["active","canceled","expired","failed","future","paused"]}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.get","description":"Read one subscription by UUID.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string","description":"Subscription UUID."}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.create","description":"Start a subscription for an existing or inline billing account.","parameters":{"type":"object","properties":{"plan_code":{"type":"string"},"currency":{"type":"string","minLength":3,"maxLength":3},"account":{"type":"object","description":"Existing account reference or inline account object."},"quantity":{"type":"integer","minimum":1},"starts_at":{"type":"string"},"trial_ends_at":{"type":"string"},"collection_method":{"type":"string","enum":["automatic","manual"]},"net_terms":{"type":"integer","minimum":0},"custom_fields":{"type":"array","items":{"type":"object"}}},"required":["plan_code","currency","account"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.cancel","description":"Schedule a subscription to cancel at its renewal date.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string","description":"Subscription UUID."}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.reactivate","description":"Reactivate a subscription that is pending cancellation.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string","description":"Subscription UUID."}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.terminate","description":"Immediately terminate a subscription, with an explicit refund policy.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string","description":"Subscription UUID."},"refund":{"type":"string","enum":["none","partial","full"]}},"required":["subscriptionId","refund"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.list","description":"List invoices with account, state, type, and time filters.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200},"cursor":{"type":"string"},"sort":{"type":"string","enum":["asc","desc"]},"begin_time":{"type":"string","description":"ISO 8601 lower timestamp bound."},"end_time":{"type":"string","description":"ISO 8601 upper timestamp bound."},"accountId":{"type":"string","description":"Optional account UUID or `code-<account code>`."},"state":{"type":"string","enum":["pending","processing","past_due","paid","failed","voided"]},"type":{"type":"string","enum":["charge","credit","non-legacy"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"invoices.get","description":"Read one invoice by UUID or number-prefixed identifier.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string","description":"Invoice UUID or `number-<invoice number>`."}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.invoices.list","description":"List invoices belonging to one billing account.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200},"cursor":{"type":"string"},"sort":{"type":"string","enum":["asc","desc"]},"begin_time":{"type":"string","description":"ISO 8601 lower timestamp bound."},"end_time":{"type":"string","description":"ISO 8601 upper timestamp bound."},"accountId":{"type":"string","description":"Account UUID or `code-<account code>`."},"state":{"type":"string","enum":["pending","processing","past_due","paid","failed","voided"]},"type":{"type":"string","enum":["charge","credit","non-legacy"]}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"reddit","displayName":"Reddit","description":"Interact with Reddit — fetch and submit posts, retrieve comments, create and edit posts/comments.","auth":{"kind":"oauth2","authorizationUrl":"https://www.reddit.com/api/v1/authorize","tokenUrl":"https://www.reddit.com/api/v1/access_token","scopes":["identity","read","submit","edit"],"pkce":"unsupported","tokenClientAuthMethod":"client_secret_basic","extraAuthParams":{"duration":"permanent"},"tokenRequestHeaders":{"User-Agent":"web:tools.tangle.integration-hub:v1.0 (contact: https://tangle.tools)"},"clientIdEnv":"REDDIT_OAUTH_CLIENT_ID","clientSecretEnv":"REDDIT_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"post.retrieve","description":"Retrieve a Reddit post by its fullname, such as t3_abc123.","parameters":{"type":"object","properties":{"postId":{"type":"string","description":"Reddit post fullname, such as t3_abc123."}},"required":["postId"]},"requiredScopes":["read"],"class":"read"},{"name":"post.details","description":"Get detailed metadata for a Reddit post including title, body, and engagement metrics.","parameters":{"type":"object","properties":{"subreddit":{"type":"string"},"postId":{"type":"string"}},"required":["subreddit","postId"]},"requiredScopes":["read"],"class":"read"},{"name":"post.create","description":"Create a new post in a subreddit. Supports self-posts (with title and text body) and link posts (with title and URL).","parameters":{"type":"object","properties":{"subreddit":{"type":"string"},"title":{"type":"string"},"kind":{"type":"string","enum":["self","link"]},"text":{"type":"string"},"url":{"type":"string"},"flair_id":{"type":"string"}},"required":["subreddit","title","kind"]},"requiredScopes":["submit"],"class":"mutation","cas":"none","externalEffect":true},{"name":"comment.create","description":"Create a comment on a Reddit post or reply to another comment.","parameters":{"type":"object","properties":{"parentId":{"type":"string"},"text":{"type":"string"}},"required":["parentId","text"]},"requiredScopes":["submit"],"class":"mutation","cas":"none","externalEffect":true},{"name":"comments.fetch","description":"Fetch all comments on a post, optionally filtered by sort order (best, top, new, controversial, old, qa) and depth.","parameters":{"type":"object","properties":{"subreddit":{"type":"string"},"postId":{"type":"string"},"sort":{"type":"string","enum":["best","top","new","controversial","old","qa"]},"limit":{"type":"integer"}},"required":["subreddit","postId"]},"requiredScopes":["read"],"class":"read"},{"name":"post.edit","description":"Edit the body text of a self-post (title is immutable post-creation).","parameters":{"type":"object","properties":{"thingId":{"type":"string"},"text":{"type":"string"}},"required":["thingId","text"]},"requiredScopes":["edit"],"class":"mutation","cas":"none","externalEffect":true},{"name":"comment.edit","description":"Edit the text of a comment you authored.","parameters":{"type":"object","properties":{"thingId":{"type":"string"},"text":{"type":"string"}},"required":["thingId","text"]},"requiredScopes":["edit"],"class":"mutation","cas":"none","externalEffect":true},{"name":"post.delete","description":"Delete a post you authored (permanent deletion).","parameters":{"type":"object","properties":{"thingId":{"type":"string"}},"required":["thingId"]},"requiredScopes":["edit"],"class":"mutation","cas":"none","externalEffect":true},{"name":"comment.delete","description":"Delete a comment you authored (permanent deletion).","parameters":{"type":"object","properties":{"thingId":{"type":"string"}},"required":["thingId"]},"requiredScopes":["edit"],"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"redis","displayName":"Redis","description":"Inspect and scan Redis keys and perform bounded, approved string compare-and-swap mutations over verified TLS.","auth":{"kind":"api-key","hint":"JSON with a public Redis host, password, optional ACL username/database, and optional TLS CA. Verified TLS is mandatory."},"defaultConsistencyModel":"authoritative","category":"database","rateLimit":{"requests":120,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"redis.keys.scan","class":"read","description":"Read one bounded SCAN page without blocking the server with KEYS.","parameters":{"type":"object","properties":{"cursor":{"type":"string","pattern":"^[0-9]+$","default":"0"},"match":{"type":"string","maxLength":4096,"default":"*"},"count":{"type":"integer","minimum":1,"maximum":1000,"default":100},"type":{"type":"string","enum":["string","list","set","zset","hash","stream"]}},"additionalProperties":false}},{"name":"redis.key.inspect","class":"read","description":"Read a key type and remaining expiry atomically.","parameters":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":1024}},"required":["key"],"additionalProperties":false}},{"name":"redis.string.get","class":"read","description":"Read one bounded string value, type, and remaining expiry atomically.","parameters":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":1024}},"required":["key"],"additionalProperties":false}},{"name":"redis.string.set","class":"mutation","description":"Set a bounded string only when the key is absent, present, or matches an expected value.","parameters":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":1024},"value":{"type":"string","maxLength":1048576},"condition":{"type":"string","enum":["absent","present","matches"]},"expectedValue":{"type":"string","maxLength":1048576},"ttlMs":{"type":"integer","minimum":1,"maximum":2592000000},"keepTtl":{"type":"boolean","default":false}},"required":["key","value","condition"],"additionalProperties":false},"cas":"optimistic-read-verify","externalEffect":true},{"name":"redis.string.delete","class":"mutation","description":"Delete a string key only when its current value exactly matches the caller expectation.","parameters":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":1024},"expectedValue":{"type":"string","maxLength":1048576}},"required":["key","expectedValue"],"additionalProperties":false},"cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"redshift","displayName":"Amazon Redshift","description":"Inspect Redshift schemas and tables and run bounded structured row reads over the verified PostgreSQL wire protocol.","auth":{"kind":"api-key","hint":"JSON with a public Redshift host, database, user, password, optional port, and optional TLS CA. Verified TLS is mandatory."},"defaultConsistencyModel":"authoritative","category":"database","rateLimit":{"requests":120,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"redshift.schemas.list","class":"read","description":"List schemas visible to the connected Amazon Redshift user.","parameters":{"type":"object","properties":{},"additionalProperties":false}},{"name":"redshift.tables.list","class":"read","description":"List tables and views in one schema.","parameters":{"type":"object","properties":{"schema":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Schema name; defaults to public."}},"additionalProperties":false}},{"name":"redshift.tables.describe","class":"read","description":"Read ordered column metadata for one table or view.","parameters":{"type":"object","properties":{"schema":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Schema name; defaults to public."},"table":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Table or view name."}},"required":["table"],"additionalProperties":false}},{"name":"redshift.rows.select","class":"read","description":"Read bounded rows using an identifier-safe query builder with scalar predicates.","parameters":{"type":"object","properties":{"schema":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Schema name; defaults to public."},"table":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Table or view name."},"columns":{"type":"array","minItems":1,"maxItems":64,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Column name."}},"filters":{"type":"array","maxItems":20,"items":{"type":"object","properties":{"column":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Column name."},"operator":{"type":"string","enum":["eq","ne","lt","lte","gt","gte","like","is-null","not-null"]},"value":{"type":["string","number","boolean","null"]}},"required":["column","operator"],"additionalProperties":false}},"orderBy":{"type":"array","maxItems":8,"items":{"type":"object","properties":{"column":{"type":"string","minLength":1,"maxLength":127,"pattern":"^[A-Za-z_][A-Za-z0-9_$]*$","description":"Column name."},"direction":{"type":"string","enum":["asc","desc"],"default":"asc"}},"required":["column"],"additionalProperties":false}},"limit":{"type":"integer","minimum":1,"maximum":10000,"default":100},"offset":{"type":"integer","minimum":0,"maximum":1000000,"default":0}},"required":["table","columns"],"additionalProperties":false}}]},{"kind":"reoon-verifier","displayName":"Reoon Verifier","description":"Email validation service that cleans invalid, temporary, and unsafe email addresses.","auth":{"kind":"api-key","hint":"Reoon API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"verify.email","description":"Verify a single email address.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bulk.email.verification","description":"Start a bulk email verification task.","parameters":{"type":"object","properties":{"taskName":{"type":"string"},"emails":{"type":"array","items":{"type":"string"}}},"required":["taskName","emails"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bulk.verification.result","description":"Get results from a bulk verification task.","parameters":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"reply-io","displayName":"Reply.io","description":"Sales engagement platform for contacts, campaigns, and outbound outreach workflows.","auth":{"kind":"api-key","hint":"Reply.io API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.create","description":"Create a new contact or update an existing contact by email.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Contact email address."},"firstName":{"type":"string","description":"Contact first name."},"lastName":{"type":"string","description":"Contact last name."},"company":{"type":"string","description":"Contact company."},"title":{"type":"string","description":"Contact job title."},"phone":{"type":"string","description":"Contact phone number."},"linkedInProfile":{"type":"string","description":"Contact LinkedIn profile URL."},"notes":{"type":"string","description":"Internal notes about the contact."},"city":{"type":"string","description":"Contact city."},"state":{"type":"string","description":"Contact state or province."},"country":{"type":"string","description":"Contact country."},"timeZoneId":{"type":"string","description":"IANA timezone identifier."}},"required":["email","firstName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.push_to_campaign","description":"Push an existing contact to a campaign.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact ID."},"campaignId":{"type":"string","description":"Campaign ID to push contact into."},"forcePush":{"type":"boolean","description":"Force push even if contact is in another active campaign."}},"required":["contactId","campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.create_and_push","description":"Create a new contact and push directly to a campaign.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Contact email address."},"firstName":{"type":"string","description":"Contact first name."},"lastName":{"type":"string","description":"Contact last name."},"company":{"type":"string","description":"Contact company."},"title":{"type":"string","description":"Contact job title."},"phone":{"type":"string","description":"Contact phone number."},"linkedInProfile":{"type":"string","description":"Contact LinkedIn profile URL."},"notes":{"type":"string","description":"Internal notes about the contact."},"city":{"type":"string","description":"Contact city."},"state":{"type":"string","description":"Contact state or province."},"country":{"type":"string","description":"Contact country."},"timeZoneId":{"type":"string","description":"IANA timezone identifier."},"campaignId":{"type":"string","description":"Campaign ID to push contact into."},"forcePush":{"type":"boolean","description":"Force push even if contact is in another active campaign."}},"required":["email","firstName","campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.get","description":"Retrieve a contact by ID.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact ID."}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.mark_replied","description":"Mark a contact as replied.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact ID."}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.mark_finished","description":"Mark a contact as finished.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact ID."}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.remove_from_campaign","description":"Remove a contact from a specific campaign.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact ID."},"campaignId":{"type":"string","description":"Campaign ID to remove contact from."}},"required":["contactId","campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.remove_from_all_campaigns","description":"Remove a contact from all campaigns.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact ID."}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.delete","description":"Delete a contact permanently.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact ID."}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.list","description":"List campaigns visible to the authenticated account.","parameters":{"type":"object","properties":{"state":{"type":"string","description":"Optional campaign state filter (e.g. active, paused, new)."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.start","description":"Start (or resume) a campaign by id.","parameters":{"type":"object","properties":{"campaignId":{"type":"string","description":"Campaign id to start."}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.pause","description":"Pause a running campaign by id.","parameters":{"type":"object","properties":{"campaignId":{"type":"string","description":"Campaign id to pause."}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"templates.create","description":"Create a reusable email template.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Template name."},"subject":{"type":"string","description":"Email subject."},"body":{"type":"string","description":"Email body (HTML or text)."}},"required":["name","subject","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"retable","displayName":"Retable","description":"Turn your spreadsheets into smart database apps. Create and manage projects, workspaces, and records.","auth":{"kind":"api-key","hint":"Retable API key."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"workspaces.list","description":"List all workspaces.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workspaces.create","description":"Create a new workspace.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"color":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.list","description":"List all projects.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.create","description":"Create a new project.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"color":{"type":"string"},"workspaceId":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"retables.list","description":"List all retables (tables) in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.create","description":"Create a new record in a retable.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"retableId":{"type":"string"},"fields":{"type":"object"}},"required":["projectId","retableId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.get","description":"Get a specific record from a retable.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"retableId":{"type":"string"},"recordId":{"type":"string"}},"required":["projectId","retableId","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.list","description":"List records in a retable.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"retableId":{"type":"string"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["projectId","retableId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.update","description":"Update a record in a retable.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"retableId":{"type":"string"},"recordId":{"type":"string"},"fields":{"type":"object"}},"required":["projectId","retableId","recordId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.delete","description":"Delete a record in a retable.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"retableId":{"type":"string"},"recordId":{"type":"string"}},"required":["projectId","retableId","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.delete","description":"Delete a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workspaces.delete","description":"Delete a workspace.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"}},"required":["workspaceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"retables.delete","description":"Delete a retable (table) in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"retableId":{"type":"string"}},"required":["projectId","retableId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"retell-ai","displayName":"Retell AI","description":"Make phone calls, manage phone numbers, and retrieve call/agent/voice information.","auth":{"kind":"api-key","hint":"Retell AI API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.make","description":"Make an outbound phone call.","parameters":{"type":"object","properties":{"fromNumber":{"type":"string","description":"Phone number to call from in E.164 format."},"toNumber":{"type":"string","description":"Phone number to call in E.164 format."},"agentId":{"type":"string","description":"ID of the agent to use for the call."},"overrideAgentVersion":{"type":"integer","description":"Optional agent version to override."},"metadata":{"type":"object","description":"Optional metadata to attach to the call."},"dynamicVariables":{"type":"object","description":"Optional dynamic variables for the agent."},"customSipHeaders":{"type":"object","description":"Optional custom SIP headers."}},"required":["fromNumber","toNumber","agentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.get","description":"Retrieve details of a phone call.","parameters":{"type":"object","properties":{"callId":{"type":"string","description":"ID of the call to retrieve."}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"phonenumbers.create","description":"Create a new phone number.","parameters":{"type":"object","properties":{"nickname":{"type":"string","description":"Nickname for the phone number."},"inboundAgentVersion":{"type":"integer","description":"Version of inbound agent."},"outboundAgentVersion":{"type":"integer","description":"Version of outbound agent."},"areaCode":{"type":"integer","description":"3-digit US area code."},"countryCode":{"type":"string","description":"Country code for the phone number."},"tollFree":{"type":"boolean","description":"Whether to purchase a toll-free number."},"phoneNumber":{"type":"string","description":"Phone number to purchase in E.164 format."},"inboundWebhookUrl":{"type":"string","description":"Webhook URL for inbound calls."}},"required":["nickname"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"phonenumbers.get","description":"Retrieve details of a phone number.","parameters":{"type":"object","properties":{"phoneNumberId":{"type":"string","description":"ID of the phone number."}},"required":["phoneNumberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"agents.get","description":"Retrieve details of an agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent to retrieve."}},"required":["agentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"voices.get","description":"Retrieve details of a voice.","parameters":{"type":"object","properties":{"voiceId":{"type":"string","description":"ID of the voice to retrieve."}},"required":["voiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"voices.list","description":"List all available voices.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"ringcentral","displayName":"RingCentral","description":"Read RingCentral extensions, call logs, and messages, send SMS, and create webhook subscriptions through the REST v1.0 API.","auth":{"kind":"oauth2","authorizationUrl":"https://platform.ringcentral.com/restapi/oauth/authorize","tokenUrl":"https://platform.ringcentral.com/restapi/oauth/token","scopes":["ReadAccounts","ReadCallLog","ReadMessages","SMS","ReadContacts","SubscriptionWebhook"],"clientIdEnv":"RINGCENTRAL_OAUTH_CLIENT_ID","clientSecretEnv":"RINGCENTRAL_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"extension.get","description":"Get the authenticated user's extension record.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"extensions.list","description":"List extensions on an account. Pass accountId or ~ for the authenticated account.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Internal account id, or ~ for the authenticated account."},"page":{"type":"number","description":"Page number for pagination."},"perPage":{"type":"number","description":"Records per page."},"status":{"type":"string","description":"Filter by extension status (e.g. Enabled, Disabled)."}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"callLog.list","description":"List the authenticated extension's call log. Use view=Detailed for full records.","parameters":{"type":"object","properties":{"dateFrom":{"type":"string","description":"Start of range, ISO-8601 UTC."},"dateTo":{"type":"string","description":"End of range, ISO-8601 UTC."},"view":{"type":"string","description":"Set to 'Detailed' to fetch detailed call records."},"perPage":{"type":"number","description":"Records per page."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.list","description":"List the authenticated extension's message store (SMS, Fax, VoiceMail).","parameters":{"type":"object","properties":{"messageType":{"type":"string","description":"Filter by message type: SMS, Fax, or VoiceMail."},"dateFrom":{"type":"string","description":"Start of range, ISO-8601."},"dateTo":{"type":"string","description":"End of range, ISO-8601."},"perPage":{"type":"number","description":"Records per page (up to 1000)."},"readStatus":{"type":"string","description":"Filter by read status: Read or Unread."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sms.send","description":"Send an SMS from the authenticated extension. from = { phoneNumber }, to = [{ phoneNumber }] (up to 10), text = body.","parameters":{"type":"object","properties":{"from":{"type":"object","description":"Sender: { phoneNumber } — must be a number assigned to the user.","additionalProperties":true},"to":{"type":"array","description":"Recipients: [{ phoneNumber }] — up to 10.","items":{"type":"object","additionalProperties":true}},"text":{"type":"string","description":"SMS message text."}},"required":["from","to","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.create","description":"Create a webhook subscription. eventFilters = array of event URIs, deliveryMode = { transportType: \"WebHook\", address }.","parameters":{"type":"object","properties":{"eventFilters":{"type":"array","description":"Event filter URI strings, e.g. /restapi/v1.0/account/~/extension/~/message-store.","items":{"type":"string"}},"deliveryMode":{"type":"object","description":"Delivery config: { transportType: \"WebHook\", address }.","additionalProperties":true},"expiresIn":{"type":"number","description":"Subscription lifetime in seconds."}},"required":["eventFilters","deliveryMode"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"rippling","displayName":"Rippling","description":"Read Rippling HRIS data (employees, groups, departments, work locations) and update employee records via the Rippling Platform API.","auth":{"kind":"oauth2","authorizationUrl":"https://app.rippling.com/apps/PLATFORM/{appName}/authorize","tokenUrl":"https://api.rippling.com/api/o/token/","scopes":["company:read","employees:read","employees:write","groups:read","departments:read","work_locations:read","teams:read","company_activity:read"],"clientIdEnv":"RIPPLING_OAUTH_CLIENT_ID","clientSecretEnv":"RIPPLING_OAUTH_CLIENT_SECRET","tokenClientAuthMethod":"client_secret_basic","pkce":"unsupported","urlTemplateMetadata":{"appName":{"kind":"path-segment"}}},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"company.get","description":"Read the installing company record (name, primary work location, currency, identifiers).","parameters":{"type":"object","properties":{}},"requiredScopes":["company:read"],"class":"read"},{"name":"me.get","description":"Read the authenticated installer account (used as a health check and to discover the company id).","parameters":{"type":"object","properties":{}},"requiredScopes":["company:read"],"class":"read"},{"name":"employees.list","description":"List employees with optional pagination and status filtering (ACTIVE, TERMINATED, etc.).","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0},"status":{"type":"string","enum":["ACTIVE","TERMINATED","HIRED"]}}},"requiredScopes":["employees:read"],"class":"read"},{"name":"employees.get","description":"Read a single employee record by Rippling employee id.","parameters":{"type":"object","properties":{"employeeId":{"type":"string"}},"required":["employeeId"]},"requiredScopes":["employees:read"],"class":"read"},{"name":"employees.update","description":"Update mutable fields on an employee (work email, personal email, phone, title, department, manager, etc.). Only fields included in the body are changed.","parameters":{"type":"object","properties":{"employeeId":{"type":"string"},"workEmail":{"type":"string"},"personalEmail":{"type":"string"},"phoneNumber":{"type":"string"},"title":{"type":"string"},"department":{"type":"string"},"manager":{"type":"string"},"workLocation":{"type":"string"},"customFields":{"type":"object"}},"required":["employeeId"]},"requiredScopes":["employees:write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"groups.list","description":"List company groups (used by Rippling to model role/permission sets and provisioning targets).","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["groups:read"],"class":"read"},{"name":"groups.get","description":"Read a single group by id, including its current member set.","parameters":{"type":"object","properties":{"groupId":{"type":"string"}},"required":["groupId"]},"requiredScopes":["groups:read"],"class":"read"},{"name":"departments.list","description":"List the company departments (parent of employee.department references).","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["departments:read"],"class":"read"},{"name":"departments.get","description":"Read a single department by id.","parameters":{"type":"object","properties":{"departmentId":{"type":"string"}},"required":["departmentId"]},"requiredScopes":["departments:read"],"class":"read"},{"name":"work_locations.list","description":"List the company work locations (used for employee.workLocation references).","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["work_locations:read"],"class":"read"},{"name":"work_locations.get","description":"Read a single work location by id.","parameters":{"type":"object","properties":{"workLocationId":{"type":"string"}},"required":["workLocationId"]},"requiredScopes":["work_locations:read"],"class":"read"},{"name":"teams.list","description":"List the company teams (reporting/working groups distinct from departments).","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["teams:read"],"class":"read"},{"name":"company_activity.list","description":"List company activity events (hires, terminations, role changes, etc.) optionally bounded by start/end timestamps.","parameters":{"type":"object","properties":{"startDate":{"type":"string","description":"ISO-8601 timestamp lower bound."},"endDate":{"type":"string","description":"ISO-8601 timestamp upper bound."},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["company_activity:read"],"class":"read"}]},{"kind":"robolly","displayName":"Robolly","description":"Generate personalized images, videos, and PDFs using Robolly templates.","auth":{"kind":"api-key","hint":"Robolly API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"images.generate","description":"Generate a personalized image from a template.","parameters":{"type":"object","properties":{"templateId":{"type":"string","description":"The template ID to generate from."},"format":{"type":"string","description":"The output format (e.g., png, jpg, webp)."},"fields":{"type":"object","description":"Template field values to personalize the image."},"modifications":{"type":"object","description":"Additional modifications to apply."}},"required":["templateId","format"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"rss","displayName":"RSS / Atom Feed","description":"Pull entries from any public RSS 2.0 or Atom 1.0 feed. No auth required — the operator pins one feed URL at connect time (`feed.fetch`), and the agent can also resolve ad-hoc feed URLs at request time (`feed.lookup`). The connector parses both formats and emits a normalized entry shape so downstream tools do not have to branch on the feed dialect.","auth":{"kind":"none"},"category":"webhook","defaultConsistencyModel":"cache","capabilities":[{"name":"feed.fetch","class":"read","description":"Fetch and parse the RSS/Atom feed URL pinned in DataSource.metadata.feedUrl. Returns normalized entries newest-first. Forwards the upstream ETag/Last-Modified so downstream conditional reads can avoid re-parsing unchanged feeds.","parameters":{"type":"object","properties":{"limit":{"type":"number","description":"Maximum entries to return, newest first. Defaults to 20, capped at 200."},"since":{"type":"string","description":"ISO-8601 timestamp. When set, entries with `published` (or `updated` for Atom) strictly older than this are dropped."}}}},{"name":"feed.lookup","class":"read","description":"Fetch and parse an arbitrary RSS/Atom feed URL the agent constructs at request time (e.g. search-result feeds, comment streams). Same normalization as `feed.fetch`.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Absolute http(s) URL of the feed to fetch."},"limit":{"type":"number","description":"Maximum entries to return, newest first. Defaults to 20, capped at 200."},"since":{"type":"string","description":"ISO-8601 timestamp. When set, entries with `published` (or `updated` for Atom) strictly older than this are dropped."}},"required":["url"]}}]},{"kind":"runware","displayName":"Runware","description":"Generate images and videos from text prompts or existing images using Runware.AI API.","auth":{"kind":"api-key","hint":"Runware API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"images.generate.from-text","description":"Generate images from a text prompt.","parameters":{"type":"object","properties":{"prompt":{"type":"string","description":"Text description of the image to generate"},"width":{"type":"integer","description":"Width of the generated image"},"height":{"type":"integer","description":"Height of the generated image"},"numImages":{"type":"integer","description":"Number of images to generate"},"seed":{"type":"integer","description":"Seed for reproducibility"}},"required":["prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"images.generate.from-image","description":"Generate images from an existing image.","parameters":{"type":"object","properties":{"imageUrl":{"type":"string","description":"URL of the source image"},"prompt":{"type":"string","description":"Text prompt to guide the generation"},"strength":{"type":"number","description":"Strength of the generation (0-1)"},"numImages":{"type":"integer","description":"Number of images to generate"}},"required":["imageUrl","prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"video.generate.from-text","description":"Generate video from a text prompt.","parameters":{"type":"object","properties":{"prompt":{"type":"string","description":"Text description of the video to generate"},"duration":{"type":"integer","description":"Duration of the video in seconds"},"fps":{"type":"integer","description":"Frames per second"}},"required":["prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"image.remove-background","description":"Remove background from an image.","parameters":{"type":"object","properties":{"imageUrl":{"type":"string","description":"URL of the image to process"}},"required":["imageUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"saastic","displayName":"Saastic","description":"Create and manage customers and charges in Saastic, the SaaS management platform.","auth":{"kind":"api-key","hint":"Saastic API key from https://saastic.com/settings/developers"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"customers.create","description":"Create a new customer in Saastic.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Customer email address"},"first_name":{"type":"string","description":"Customer first name"},"last_name":{"type":"string","description":"Customer last name"},"phone":{"type":"string","description":"Customer phone number"},"signed_up_at":{"type":"string","description":"ISO 8601 date when customer signed up"}},"required":["email","first_name","last_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"charges.create","description":"Create a charge for a customer in Saastic.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Customer email address"},"amount":{"type":"number","description":"Amount in the smallest currency unit"},"currency":{"type":"string","description":"ISO 4217 currency code (e.g., USD, EUR)"},"charged_at":{"type":"string","description":"ISO 8601 date when charge occurred"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.list","description":"List all customers.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of results to return"},"offset":{"type":"integer","description":"Number of results to skip"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.get","description":"Retrieve a customer by email.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Customer email address"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.update","description":"Update an existing customer profile.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Customer email address (identifier)"},"first_name":{"type":"string","description":"Customer first name"},"last_name":{"type":"string","description":"Customer last name"},"phone":{"type":"string","description":"Customer phone number"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.delete","description":"Delete a customer by email.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Customer email address (identifier)"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"charges.refund","description":"Refund an existing charge.","parameters":{"type":"object","properties":{"chargeId":{"type":"string","description":"Charge ID to refund"},"amount":{"type":"number","description":"Optional partial refund amount; omit to refund the full charge."}},"required":["chargeId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.cancel","description":"Cancel an active subscription.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string","description":"Subscription ID to cancel"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"sage-intacct","displayName":"Sage Intacct","description":"Read Sage Intacct vendors, customers, bills, invoices, and general-ledger accounts through the REST API.","auth":{"kind":"api-key","hint":"Sage Intacct REST API OAuth access token, stored as a bearer token."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"general-ledger.accounts.list","description":"List general-ledger accounts.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":2000},"offset":{"type":"integer","minimum":0},"filter":{"type":"string"},"fields":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"vendors.list","description":"List accounts-payable vendors.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":2000},"offset":{"type":"integer","minimum":0},"filter":{"type":"string"},"fields":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bills.list","description":"List accounts-payable bills.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":2000},"offset":{"type":"integer","minimum":0},"filter":{"type":"string"},"fields":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.list","description":"List accounts-receivable customers.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":2000},"offset":{"type":"integer","minimum":0},"filter":{"type":"string"},"fields":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"invoices.list","description":"List accounts-receivable invoices.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":2000},"offset":{"type":"integer","minimum":0},"filter":{"type":"string"},"fields":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"saleor","displayName":"Saleor","description":"Query Saleor GraphQL API, retrieve orders, and add order notes.","auth":{"kind":"api-key","hint":"Saleor API token."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"graphql.query","description":"Execute a raw GraphQL query against Saleor API.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"GraphQL query string"},"variables":{"type":"object","description":"GraphQL query variables"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.get","description":"Retrieve a Saleor order by ID.","parameters":{"type":"object","properties":{"orderId":{"type":"string","description":"Order ID"}},"required":["orderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.addNote","description":"Add a note to a Saleor order.","parameters":{"type":"object","properties":{"orderId":{"type":"string","description":"Order ID"},"message":{"type":"string","description":"Note message"}},"required":["orderId","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.cancel","description":"Cancel a Saleor order.","parameters":{"type":"object","properties":{"orderId":{"type":"string","description":"Order ID"}},"required":["orderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.fulfill","description":"Mark an order line as fulfilled by creating a fulfillment for the given quantities.","parameters":{"type":"object","properties":{"orderId":{"type":"string","description":"Order ID"},"lines":{"type":"array","description":"Order lines to fulfill. Each entry is an OrderFulfillLineInput.","items":{"type":"object","properties":{"orderLineId":{"type":"string"},"stocks":{"type":"array","items":{"type":"object","properties":{"quantity":{"type":"number"},"warehouse":{"type":"string"}},"required":["quantity","warehouse"]}}},"required":["orderLineId","stocks"]}},"notifyCustomer":{"type":"boolean","description":"Whether to notify the customer. Defaults to true caller-side."}},"required":["orderId","lines","notifyCustomer"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.refund","description":"Refund a Saleor order by creating an order refund.","parameters":{"type":"object","properties":{"orderId":{"type":"string","description":"Order ID"},"amount":{"type":"number","description":"Refund amount in the order currency."}},"required":["orderId","amount"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.update","description":"Update order metadata or status (billing/shipping address, user email, language).","parameters":{"type":"object","properties":{"orderId":{"type":"string","description":"Order ID"},"input":{"type":"object","description":"OrderUpdateInput fields (e.g. billingAddress, shippingAddress, userEmail, languageCode)."}},"required":["orderId","input"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"salesforce","displayName":"Salesforce","description":"Query Salesforce records with SOQL and create or update sObjects.","auth":{"kind":"oauth2","authorizationUrl":"https://login.salesforce.com/services/oauth2/authorize","tokenUrl":"https://login.salesforce.com/services/oauth2/token","scopes":["api","refresh_token"],"clientIdEnv":"SALESFORCE_OAUTH_CLIENT_ID","clientSecretEnv":"SALESFORCE_OAUTH_CLIENT_SECRET","tokenMetadata":{"instanceUrl":{"field":"instance_url","required":true}}},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.query","description":"Run a SOQL query.","parameters":{"type":"object","properties":{"q":{"type":"string"}},"required":["q"]},"requiredScopes":["api"],"class":"read"},{"name":"records.get","description":"Read a Salesforce sObject record.","parameters":{"type":"object","properties":{"objectName":{"type":"string"},"recordId":{"type":"string"}},"required":["objectName","recordId"]},"requiredScopes":["api"],"class":"read"},{"name":"records.create","description":"Create a Salesforce sObject record.","parameters":{"type":"object","properties":{"objectName":{"type":"string"},"fields":{"type":"object"}},"required":["objectName","fields"]},"requiredScopes":["api"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Update a Salesforce sObject record.","parameters":{"type":"object","properties":{"objectName":{"type":"string"},"recordId":{"type":"string"},"fields":{"type":"object"}},"required":["objectName","recordId","fields"]},"requiredScopes":["api"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"records.delete","description":"Delete a Salesforce sObject record by id.","parameters":{"type":"object","properties":{"objectName":{"type":"string"},"recordId":{"type":"string"}},"required":["objectName","recordId"]},"requiredScopes":["api"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.upsert","description":"Upsert a Salesforce sObject record using an external id field. The caller passes the external id field name and the external id value; the body is the record fields.","parameters":{"type":"object","properties":{"objectName":{"type":"string"},"externalIdField":{"type":"string","description":"API name of the external-id field (e.g. ExternalId__c)."},"externalId":{"type":"string","description":"External id value used to match an existing record."},"fields":{"type":"object","description":"Record fields to set on insert/update."}},"required":["objectName","externalIdField","externalId","fields"]},"requiredScopes":["api"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.composite","description":"Execute a Salesforce composite request (multiple subrequests in one transaction). The caller passes the full composite envelope `{ allOrNone, compositeRequest: [...] }`.","parameters":{"type":"object","properties":{"allOrNone":{"type":"boolean","description":"Roll back all subrequests on any failure when true."},"compositeRequest":{"type":"array","description":"Ordered list of Salesforce composite subrequests.","items":{"type":"object","additionalProperties":true}}},"required":["compositeRequest"]},"requiredScopes":["api"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.upload","description":"Upload a ContentVersion file. `fields` is the Salesforce ContentVersion record body using PascalCase field names — `Title`, `PathOnClient`, `VersionData` (base64), and optionally `FirstPublishLocationId` to attach the resulting ContentDocument to a record.","parameters":{"type":"object","properties":{"fields":{"type":"object","description":"ContentVersion record fields. Required: Title, PathOnClient, VersionData (base64). Optional: FirstPublishLocationId.","additionalProperties":true}},"required":["fields"]},"requiredScopes":["api"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"saleshandy","displayName":"Saleshandy","description":"Cold email outreach platform: manage prospects, build sequences, add prospects to sequence steps, and control sequence status.","auth":{"kind":"api-key","hint":"Generate an API key in company Settings -> API Settings. Sent as the x-api-key header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"sequences.list","description":"List sequences and their steps.","parameters":{"type":"object","properties":{"sequenceName":{"type":"string","description":"Filter by sequence name."},"page":{"type":"integer","description":"Page number."},"pageSize":{"type":"integer","description":"Results per page."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"prospects.list","description":"List all prospects with pagination and search.","parameters":{"type":"object","properties":{"search":{"type":"string","description":"Search term."},"page":{"type":"integer","description":"Page number."},"pageSize":{"type":"integer","description":"Results per page."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sequence.import_prospects","description":"Import prospects (keyed by field name) into a sequence at a given step.","parameters":{"type":"object","properties":{"prospectList":{"type":"array","description":"Array of prospect objects keyed by field name (e.g. Email, First Name).","items":{"type":"object"}},"stepId":{"type":"integer","description":"Sequence step ID to add prospects to."},"conflictAction":{"type":"string","description":"How to handle duplicates (e.g. skip, update)."},"verifyProspects":{"type":"boolean","description":"Verify emails on import."},"tags":{"type":"array","items":{"type":"string"},"description":"Tags to apply."}},"required":["prospectList","stepId","conflictAction"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sequence.set_status","description":"Activate or pause one or more sequences.","parameters":{"type":"object","properties":{"sequenceIds":{"type":"array","items":{"type":"string"},"description":"Sequence IDs to update."},"status":{"type":"string","description":"Target status (e.g. ACTIVE, PAUSED)."}},"required":["sequenceIds","status"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"salesloft","displayName":"Salesloft","description":"Manage Salesloft people and accounts and enroll people into cadences through the REST API v2.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.salesloft.com/oauth/authorize","tokenUrl":"https://accounts.salesloft.com/oauth/token","scopes":[],"clientIdEnv":"SALESLOFT_OAUTH_CLIENT_ID","clientSecretEnv":"SALESLOFT_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"me.get","description":"Return the authenticated user and team — the cheapest grant-validity probe.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"people.list","description":"List people (contacts). Paginate with page/per_page.","parameters":{"type":"object","properties":{"page":{"type":"number","description":"Page number (1-based)."},"per_page":{"type":"number","description":"Records per page (max 100)."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"people.create","description":"Create a person. Provide email_address, OR phone paired with last_name. first_name/last_name optional otherwise.","parameters":{"type":"object","properties":{"email_address":{"type":"string","description":"Email address; required unless phone+last_name are provided."},"first_name":{"type":"string","description":"Person's first name."},"last_name":{"type":"string","description":"Person's last name; required when phone is provided instead of email_address."},"phone":{"type":"string","description":"Phone number; required (with last_name) when email_address is absent."}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"accounts.create","description":"Create an account (company). name is required; domain must be unique on the team.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Account/company name."},"domain":{"type":"string","description":"Website domain; must be unique on the team."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cadences.list","description":"List cadences. Paginate with page/per_page.","parameters":{"type":"object","properties":{"page":{"type":"number","description":"Page number (1-based)."},"per_page":{"type":"number","description":"Records per page (max 100)."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cadence_memberships.create","description":"Add a person to a cadence. Provide person_id and cadence_id; user_id defaults to the authenticated user.","parameters":{"type":"object","properties":{"person_id":{"type":"number","description":"Id of the person to enroll (must be visible to the authenticated user)."},"cadence_id":{"type":"number","description":"Id of the cadence to enroll the person into."},"user_id":{"type":"number","description":"Owner of the membership; defaults to the authenticated user."}},"required":["person_id","cadence_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"sanity","displayName":"Sanity","description":"Query Sanity datasets with GROQ, fetch documents by ID, and create, patch, or delete documents through the Content Lake HTTP API.","auth":{"kind":"oauth2","authorizationUrl":"https://api.sanity.io/v1/oauth/authorize","tokenUrl":"https://api.sanity.io/v1/oauth/token","scopes":["read","write"],"clientIdEnv":"SANITY_OAUTH_CLIENT_ID","clientSecretEnv":"SANITY_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"documents.query","description":"Run a GROQ query against a Sanity dataset. `params` is a flat record of GROQ parameters; each value is JSON-encoded and sent as a `$<name>` query parameter.","parameters":{"type":"object","properties":{"dataset":{"type":"string","description":"Sanity dataset name, e.g. \"production\"."},"apiVersion":{"type":"string","description":"Sanity API version, dated yyyy-mm-dd with a leading \"v\" (defaults to v2025-02-19).","default":"v2025-02-19"},"query":{"type":"string","description":"GROQ query string."},"params":{"type":"object","description":"GROQ parameter bindings. Each entry becomes a $name=<json> query parameter.","additionalProperties":true}},"required":["dataset","query"]},"requiredScopes":["read"],"class":"read"},{"name":"documents.get","description":"Fetch a single Sanity document by ID from a dataset.","parameters":{"type":"object","properties":{"dataset":{"type":"string","description":"Sanity dataset name, e.g. \"production\"."},"apiVersion":{"type":"string","description":"Sanity API version, dated yyyy-mm-dd with a leading \"v\" (defaults to v2025-02-19).","default":"v2025-02-19"},"documentId":{"type":"string","description":"Sanity document _id."}},"required":["dataset","documentId"]},"requiredScopes":["read"],"class":"read"},{"name":"documents.create","description":"Create a Sanity document. `document` must include `_type` and may include `_id`. The connector wraps it in a single-mutation transaction and threads the invocation idempotency key as `transactionId` so retries collapse.","parameters":{"type":"object","properties":{"dataset":{"type":"string","description":"Sanity dataset name, e.g. \"production\"."},"apiVersion":{"type":"string","description":"Sanity API version, dated yyyy-mm-dd with a leading \"v\" (defaults to v2025-02-19).","default":"v2025-02-19"},"document":{"type":"object","description":"Document body. Must include `_type`; `_id` is optional (auto-assigned otherwise).","additionalProperties":true}},"required":["dataset","document"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.patch","description":"Patch a Sanity document. `patch` is the Sanity patch envelope (e.g. `{ set: { title: \"x\" } }`). `ifRevisionId` must be the document's current `_rev`; mismatched revisions return 409.","parameters":{"type":"object","properties":{"dataset":{"type":"string","description":"Sanity dataset name, e.g. \"production\"."},"apiVersion":{"type":"string","description":"Sanity API version, dated yyyy-mm-dd with a leading \"v\" (defaults to v2025-02-19).","default":"v2025-02-19"},"documentId":{"type":"string"},"patch":{"type":"object","description":"Sanity patch operations (`set`, `setIfMissing`, `unset`, `inc`, `dec`, `insert`, `diffMatchPatch`).","additionalProperties":true},"ifRevisionId":{"type":"string","description":"Current `_rev` of the document, returned from a prior read; mismatched revisions return 409."}},"required":["dataset","documentId","patch"]},"requiredScopes":["write"],"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"documents.delete","description":"Delete a Sanity document by ID. Wrapped as a single-mutation transaction so retries collapse.","parameters":{"type":"object","properties":{"dataset":{"type":"string","description":"Sanity dataset name, e.g. \"production\"."},"apiVersion":{"type":"string","description":"Sanity API version, dated yyyy-mm-dd with a leading \"v\" (defaults to v2025-02-19).","default":"v2025-02-19"},"documentId":{"type":"string"}},"required":["dataset","documentId"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.createOrReplace","description":"Create a Sanity document, or replace it wholesale if a document with the same `_id` already exists. The caller passes the full document body including `_id` and `_type`.","parameters":{"type":"object","properties":{"dataset":{"type":"string","description":"Sanity dataset name, e.g. \"production\"."},"apiVersion":{"type":"string","description":"Sanity API version, dated yyyy-mm-dd with a leading \"v\" (defaults to v2025-02-19).","default":"v2025-02-19"},"document":{"type":"object","description":"Document body. Must include `_id` and `_type`.","additionalProperties":true}},"required":["dataset","document"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.publish","description":"Publish a Sanity draft document. Issues a `sanity.action.document.publish` action against the dataset; `draftId` is typically `drafts.<publishedId>`.","parameters":{"type":"object","properties":{"dataset":{"type":"string","description":"Sanity dataset name, e.g. \"production\"."},"apiVersion":{"type":"string","description":"Sanity API version, dated yyyy-mm-dd with a leading \"v\" (defaults to v2025-02-19).","default":"v2025-02-19"},"draftId":{"type":"string","description":"Draft document _id, usually `drafts.<publishedId>`."},"publishedId":{"type":"string","description":"Published document _id (without the `drafts.` prefix)."}},"required":["dataset","draftId","publishedId"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.delete-batch","description":"Delete multiple documents in a single Sanity transaction using a GROQ delete-by-query (`*[_id in $ids]`). All deletes commit or roll back together.","parameters":{"type":"object","properties":{"dataset":{"type":"string","description":"Sanity dataset name, e.g. \"production\"."},"apiVersion":{"type":"string","description":"Sanity API version, dated yyyy-mm-dd with a leading \"v\" (defaults to v2025-02-19).","default":"v2025-02-19"},"documentIds":{"type":"array","description":"IDs of the documents to delete in a single transaction.","items":{"type":"string"}}},"required":["dataset","documentIds"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"sardis","displayName":"Sardis","description":"Policy-controlled payments for AI agents.","auth":{"kind":"api-key","hint":"Sardis API key for your agent."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"payment.send","description":"Send a payment with policy validation.","parameters":{"type":"object","properties":{"to":{"type":"string"},"amount":{"type":"number"},"memo":{"type":"string"},"agentId":{"type":"string"},"policyText":{"type":"string"}},"required":["to","amount","agentId","policyText"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"balance.check","description":"Check agent balance.","parameters":{"type":"object","properties":{"agentId":{"type":"string"}},"required":["agentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"policy.check","description":"Check if a payment complies with spending policy.","parameters":{"type":"object","properties":{"agentId":{"type":"string"},"amount":{"type":"number"},"merchant":{"type":"string"}},"required":["agentId","amount","merchant"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"policy.set","description":"Set spending policy for an agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string"},"policyText":{"type":"string"},"limit":{"type":"number"}},"required":["agentId","policyText"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactions.list","description":"List transactions for an agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string"},"limit":{"type":"integer"}},"required":["agentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transactions.get","description":"Fetch a single transaction by id.","parameters":{"type":"object","properties":{"transactionId":{"type":"string"}},"required":["transactionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"payment.refund","description":"Refund or reverse a previously-sent payment. Pass an optional `reason` inside `args` — when present it is forwarded to Sardis.","parameters":{"type":"object","properties":{"transactionId":{"type":"string","description":"Id of the payment transaction to refund."},"reason":{"type":"string"}},"required":["transactionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"policy.delete","description":"Delete the spending policy associated with an agent.","parameters":{"type":"object","properties":{"agentId":{"type":"string"}},"required":["agentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"balance.update","description":"Adjust the on-chain balance for an agent (e.g. top-up or debit). `amount` is signed — positive credits the balance, negative debits it.","parameters":{"type":"object","properties":{"agentId":{"type":"string"},"amount":{"type":"number"},"reason":{"type":"string"}},"required":["agentId","amount"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"savvycal","displayName":"SavvyCal","description":"Manage SavvyCal scheduling links, bookings, availability, and workflows.","auth":{"kind":"oauth2","authorizationUrl":"https://savvycal.com/oauth/authorize","tokenUrl":"https://savvycal.com/oauth/token","scopes":[],"sendScopeParam":false,"clientIdEnv":"SAVVYCAL_OAUTH_CLIENT_ID","clientSecretEnv":"SAVVYCAL_OAUTH_CLIENT_SECRET"},"category":"calendar","defaultConsistencyModel":"authoritative","capabilities":[{"name":"user.current","description":"Read the authenticated SavvyCal user.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"events.list","description":"List scheduled events with cursor, state, period, date, and attendance filters.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"after":{"type":"string"},"before":{"type":"string"},"state":{"type":"string","enum":["all","confirmed","canceled","awaiting_reschedule","awaiting_checkout","checkout_expired","awaiting_approval","declined","tentative"]},"period":{"type":"string","enum":["past","upcoming","fixed","all"]},"from":{"type":"string"},"until":{"type":"string"},"direction":{"type":"string","enum":["asc","desc"]},"attendance":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"events.get","description":"Read one scheduled event by ID or UUID.","parameters":{"type":"object","properties":{"eventId":{"type":"string"}},"required":["eventId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"events.create","description":"Book an available slot through a scheduling link.","parameters":{"type":"object","properties":{"linkId":{"type":"string"},"display_name":{"type":"string"},"email":{"type":"string"},"start_at":{"type":"string"},"end_at":{"type":"string"},"time_zone":{"type":"string"},"phone_number":{"type":"string"},"fields":{"type":"array","items":{"type":"object"}},"metadata":{"type":"object"}},"required":["linkId","display_name","email","start_at","end_at","time_zone"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.cancel","description":"Cancel an event with an optional reason.","parameters":{"type":"object","properties":{"eventId":{"type":"string"},"cancel_reason":{"type":"string"}},"required":["eventId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"links.list","description":"List scheduling links with cursor and state filters.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"after":{"type":"string"},"before":{"type":"string"},"state":{"type":"string","enum":["active","disabled"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"links.get","description":"Read one scheduling link.","parameters":{"type":"object","properties":{"linkId":{"type":"string"}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"links.slots","description":"Read available slots for a scheduling link over at most 31 days.","parameters":{"type":"object","properties":{"linkId":{"type":"string"},"from":{"type":"string"},"until":{"type":"string"}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workflows.list","description":"List workflows with cursor pagination.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"after":{"type":"string"},"before":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workflows.rules","description":"List rules for one workflow.","parameters":{"type":"object","properties":{"workflowId":{"type":"string"}},"required":["workflowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"links.create","description":"Create a personal recurring or single-use scheduling link.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"private_name":{"type":"string"},"type":{"type":"string","enum":["recurring","single"]}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"links.update","description":"Update a scheduling link name, description, private name, or type.","parameters":{"type":"object","properties":{"linkId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"private_name":{"type":"string"},"type":{"type":"string","enum":["recurring","single"]}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"links.delete","description":"Delete a scheduling link.","parameters":{"type":"object","properties":{"linkId":{"type":"string"}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"links.duplicate","description":"Create a copy of a scheduling link.","parameters":{"type":"object","properties":{"linkId":{"type":"string"}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"links.toggle","description":"Toggle a scheduling link between active and disabled.","parameters":{"type":"object","properties":{"linkId":{"type":"string"}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"scim","displayName":"SCIM","description":"Provision users, groups, and group memberships against any public SCIM 2.0 service provider.","auth":{"kind":"api-key","hint":"SCIM bearer token. Set baseUrl to the provider SCIM 2.0 root, for example https://tenant.example.com/scim/v2."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.list","description":"List or filter SCIM users with standard pagination and attribute selection.","parameters":{"type":"object","properties":{"filter":{"type":"string"},"startIndex":{"type":"integer","minimum":1},"count":{"type":"integer","minimum":1,"maximum":1000},"attributes":{"type":"string"},"excludedAttributes":{"type":"string"},"sortBy":{"type":"string"},"sortOrder":{"type":"string","enum":["ascending","descending"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.get","description":"Read one SCIM user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"SCIM user resource id."}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.create","description":"Create a SCIM user from a complete provider-compatible resource.","parameters":{"type":"object","properties":{"user":{"type":"object"}},"required":["user"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.replace","description":"Replace a SCIM user resource.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"SCIM user resource id."},"user":{"type":"object"}},"required":["userId","user"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"users.update","description":"Apply SCIM PatchOp operations to a user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"SCIM user resource id."},"operations":{"type":"array","items":{"type":"object"}}},"required":["userId","operations"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"users.deactivate","description":"Deactivate a SCIM user by setting active=false.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"SCIM user resource id."}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"groups.list","description":"List or filter SCIM groups.","parameters":{"type":"object","properties":{"filter":{"type":"string"},"startIndex":{"type":"integer","minimum":1},"count":{"type":"integer","minimum":1,"maximum":1000},"attributes":{"type":"string"},"excludedAttributes":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.get","description":"Read one SCIM group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"SCIM group resource id."}},"required":["groupId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"groups.create","description":"Create a SCIM group from a complete provider-compatible resource.","parameters":{"type":"object","properties":{"group":{"type":"object"}},"required":["group"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"groups.update","description":"Apply SCIM PatchOp operations to a group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"SCIM group resource id."},"operations":{"type":"array","items":{"type":"object"}}},"required":["groupId","operations"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"groups.users.add","description":"Add a user reference to a SCIM group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"SCIM group resource id."},"userId":{"type":"string","description":"SCIM user resource id."}},"required":["groupId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"groups.users.remove","description":"Remove a user reference from a SCIM group.","parameters":{"type":"object","properties":{"groupId":{"type":"string","description":"SCIM group resource id."},"userId":{"type":"string","description":"SCIM user resource id."}},"required":["groupId","userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true}]},{"kind":"scrapegraphai","displayName":"ScrapeGraphAI","description":"AI-powered web scraping and content extraction.","auth":{"kind":"api-key","hint":"ScrapeGraphAI API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"scraper.smart","description":"Intelligently scrape a website using AI to extract the data you need.","parameters":{"type":"object","properties":{"website_url":{"type":"string","description":"The URL of the website to scrape."},"user_prompt":{"type":"string","description":"Natural language description of what to extract."},"output_schema":{"type":"object","description":"Optional schema to structure the output."}},"required":["website_url","user_prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scraper.local","description":"Scrape content using local processing without external API calls.","parameters":{"type":"object","properties":{"website_html":{"type":"string","description":"The HTML content to process (max 2MB)."},"user_prompt":{"type":"string","description":"Natural language description of what to extract."},"output_schema":{"type":"object","description":"Optional schema to structure the output."}},"required":["website_html","user_prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"markdown.convert","description":"Convert a webpage to Markdown format.","parameters":{"type":"object","properties":{"website_url":{"type":"string","description":"The URL of the website to convert to Markdown."}},"required":["website_url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"scrapeless","displayName":"Scrapeless","description":"Scrapeless is an all-in-one and highly scalable web scraping toolkit for enterprises and developers.","auth":{"kind":"api-key","hint":"Scrapeless API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"search.google","description":"Execute a Google search query with advanced parameters.","parameters":{"type":"object","properties":{"q":{"type":"string","description":"Search query (supports inurl:, site:, intitle:, as_dt, as_eq)"},"hl":{"type":"string","description":"Language code for search results (optional)"},"gl":{"type":"string","description":"Country code for search results (optional)"},"limit":{"type":"integer","description":"Maximum number of results (optional)"}},"required":["q"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scrape.universal","description":"Perform universal scraping on any website with optional JavaScript rendering.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"The URL to scrape"},"jsRender":{"type":"boolean","description":"Enable JavaScript rendering (optional)"},"headless":{"type":"boolean","description":"Use headless mode (optional)"},"jsInstructions":{"type":"object","description":"JavaScript execution instructions (optional)"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"crawl.website","description":"Crawl a website and extract data from multiple subpages.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"The URL to crawl"},"limit":{"type":"integer","description":"Maximum number of subpages to crawl"},"block":{"type":"object","description":"Block rules for crawling (optional)"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"trends.google","description":"Fetch Google Trends data for specified time period and regions.","parameters":{"type":"object","properties":{"q":{"type":"string","description":"Trends search query"},"date":{"type":"string","description":"Date range for trends"},"dataType":{"type":"string","description":"Type of trends data (e.g., searches, news, images)"},"tz":{"type":"string","description":"Time zone offset (optional)"},"country":{"type":"string","description":"Country code (optional)"}},"required":["q","date","dataType"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"seamless-ai","displayName":"Seamless.ai","description":"Search and enrich B2B contact and company data, including verified emails, phone numbers, and job-change signals, for go-to-market prospecting.","auth":{"kind":"api-key","hint":"API key from Settings -> API Key (Create New Connection). Sent as the Token header."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.search","description":"Search for contacts by company, location, department, job title, seniority, and technologies. Returns search result ids used for research/enrichment.","parameters":{"type":"object","properties":{"jobTitle":{"type":"array","items":{"type":"string"}},"seniority":{"type":"array","items":{"type":"string"}},"companyDomain":{"type":"array","items":{"type":"string"}},"industry":{"type":"array","items":{"type":"string"}},"limit":{"type":"integer"},"nextToken":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.search","description":"Search for companies by name, domain, location, industry, size, revenue, and technologies. Returns search result ids used for research/enrichment.","parameters":{"type":"object","properties":{"companyName":{"type":"array","items":{"type":"string"}},"companyDomain":{"type":"array","items":{"type":"string"}},"industry":{"type":"array","items":{"type":"string"}},"companySize":{"type":"array","items":{"type":"string"}},"technologies":{"type":"array","items":{"type":"string"}},"limit":{"type":"integer"},"nextToken":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.research","description":"Research (enrich) contacts asynchronously by searchResultIds from a contact search, or by explicit contact identifiers, to reveal full profile, email, and phone.","parameters":{"type":"object","properties":{"searchResultIds":{"type":"array","items":{"type":"string"}},"contacts":{"type":"array","items":{"type":"object"}},"isJobChange":{"type":"boolean"},"skipDeduplicationCheck":{"type":"boolean"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"companies.research","description":"Research (enrich) companies asynchronously by searchResultIds from a company search, or by direct company identifiers.","parameters":{"type":"object","properties":{"searchResultIds":{"type":"array","items":{"type":"string"}},"companies":{"type":"array","items":{"type":"object"}},"skipDeduplicationCheck":{"type":"boolean"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"contacts.research.poll","description":"Poll for the results of a previously submitted contact research (enrichment) request by request id.","parameters":{"type":"object","properties":{"requestIds":{"type":"array","items":{"type":"string"}}},"required":["requestIds"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"seek-table","displayName":"SeekTable","description":"Generate and automate reports from SeekTable.","auth":{"kind":"api-key","hint":"SeekTable API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"csv.upload","description":"Upload a CSV file to SeekTable.","parameters":{"type":"object","properties":{"fileName":{"type":"string"},"fileContent":{"type":"string"},"format":{"type":"string"}},"required":["fileName","fileContent"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"report.share.email","description":"Share a SeekTable report via email.","parameters":{"type":"object","properties":{"reportId":{"type":"string"},"to":{"type":"string"},"subject":{"type":"string"},"message":{"type":"string"},"includeReportHtml":{"type":"boolean"},"attachExport":{"type":"string"},"reportParameters":{"type":"object"}},"required":["reportId","to","subject"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"segment","displayName":"Segment","description":"Manage Segment workspace sources, destinations, tracking plans, and audiences via the Public API (Bearer).","auth":{"kind":"api-key","hint":"Segment Public API personal access token (app.segment.com → Settings → Workspace Settings → Access Management → Tokens)."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"sources.search","description":"List the sources configured in the workspace.","parameters":{"type":"object","properties":{"pagination":{"type":"object","description":"Pagination cursor returned by the previous response.","properties":{"count":{"type":"integer","minimum":1,"maximum":200},"cursor":{"type":"string"}}}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sources.get","description":"Read a single source by id.","parameters":{"type":"object","properties":{"sourceId":{"type":"string"}},"required":["sourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sources.create","description":"Create a new source in the workspace.","parameters":{"type":"object","properties":{"slug":{"type":"string","description":"URL-safe slug used in tracking calls."},"name":{"type":"string"},"enabled":{"type":"boolean"},"metadataId":{"type":"string","description":"Source-type metadata id (e.g. catalog item for \"javascript\", \"python\", \"http-api\")."},"settings":{"type":"object","description":"Source-type-specific settings."}},"required":["slug","metadataId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sources.update","description":"Update an existing source (name, enabled state, settings).","parameters":{"type":"object","properties":{"sourceId":{"type":"string"},"name":{"type":"string"},"enabled":{"type":"boolean"},"settings":{"type":"object"}},"required":["sourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sources.delete","description":"Delete a source from the workspace.","parameters":{"type":"object","properties":{"sourceId":{"type":"string"}},"required":["sourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"destinations.search","description":"List destinations configured across the workspace.","parameters":{"type":"object","properties":{"pagination":{"type":"object","properties":{"count":{"type":"integer","minimum":1,"maximum":200},"cursor":{"type":"string"}}}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"destinations.get","description":"Read a single destination by id.","parameters":{"type":"object","properties":{"destinationId":{"type":"string"}},"required":["destinationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"destinations.create","description":"Create a new destination tied to a source.","parameters":{"type":"object","properties":{"sourceId":{"type":"string"},"metadataId":{"type":"string","description":"Destination-type metadata id from the catalog."},"enabled":{"type":"boolean"},"name":{"type":"string"},"settings":{"type":"object","description":"Destination-type-specific settings (API keys, mappings, etc.)."}},"required":["sourceId","metadataId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"destinations.update","description":"Update an existing destination configuration.","parameters":{"type":"object","properties":{"destinationId":{"type":"string"},"enabled":{"type":"boolean"},"name":{"type":"string"},"settings":{"type":"object"}},"required":["destinationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"destinations.delete","description":"Remove a destination from the workspace.","parameters":{"type":"object","properties":{"destinationId":{"type":"string"}},"required":["destinationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tracking-plans.search","description":"List tracking plans defined in the workspace.","parameters":{"type":"object","properties":{"pagination":{"type":"object","properties":{"count":{"type":"integer","minimum":1,"maximum":200},"cursor":{"type":"string"}}}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tracking-plans.get","description":"Read a single tracking plan by id, including its event rules.","parameters":{"type":"object","properties":{"trackingPlanId":{"type":"string"}},"required":["trackingPlanId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tracking-plans.create","description":"Create a new tracking plan.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["LIVE","TEMPLATE"],"description":"LIVE plans are enforced; TEMPLATE plans are reusable shells."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tracking-plans.update","description":"Update the metadata of an existing tracking plan.","parameters":{"type":"object","properties":{"trackingPlanId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}},"required":["trackingPlanId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tracking-plans.delete","description":"Delete a tracking plan.","parameters":{"type":"object","properties":{"trackingPlanId":{"type":"string"}},"required":["trackingPlanId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"audiences.search","description":"List Engage / Personas audiences within a Unify space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string","description":"Unify (Personas) space id."},"pagination":{"type":"object","properties":{"count":{"type":"integer","minimum":1,"maximum":200},"cursor":{"type":"string"}}}},"required":["spaceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"audiences.get","description":"Read a single audience definition within a Unify space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"audienceId":{"type":"string"}},"required":["spaceId","audienceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"audiences.create","description":"Create a new audience inside a Unify space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"definition":{"type":"object","description":"Audience query expressed in Segment FQL (Filter Query Language).","properties":{"query":{"type":"string"},"type":{"type":"string","enum":["USERS","ACCOUNTS"]}},"required":["query","type"]}},"required":["spaceId","name","definition"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"audiences.update","description":"Update an existing audience definition or metadata within a Unify space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"audienceId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"definition":{"type":"object","description":"Updated audience query expressed in Segment FQL.","properties":{"query":{"type":"string"},"type":{"type":"string","enum":["USERS","ACCOUNTS"]}}}},"required":["spaceId","audienceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"audiences.delete","description":"Delete an audience from a Unify space.","parameters":{"type":"object","properties":{"spaceId":{"type":"string"},"audienceId":{"type":"string"}},"required":["spaceId","audienceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tracking-plans.connect","description":"Connect (attach) a tracking plan to a source so the plan is enforced for that source.","parameters":{"type":"object","properties":{"trackingPlanId":{"type":"string"},"sourceId":{"type":"string"}},"required":["trackingPlanId","sourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"warehouses.create","description":"Create a destination warehouse (e.g. Snowflake, BigQuery, Redshift) wired to the workspace.","parameters":{"type":"object","properties":{"metadataId":{"type":"string","description":"Warehouse-type metadata id from the catalog."},"name":{"type":"string"},"enabled":{"type":"boolean"},"settings":{"type":"object","description":"Warehouse-specific connection settings (credentials, region, schema)."}},"required":["metadataId","settings"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"semrush","displayName":"Semrush","description":"Competitive SEO market intelligence: backlink profile (overview, links, referring domains/IPs, anchors, pages, authority-score trend) and keyword metrics via the Semrush v4 REST API.","auth":{"kind":"api-key","hint":"Semrush API key from Subscription info → API units. Sent as the `Authorization: Apikey <key>` header."},"category":"market-intelligence","defaultConsistencyModel":"cache","capabilities":[{"name":"backlinks.overview","description":"Aggregated backlink metrics for a target: total backlinks, referring domains, authority score, follow/nofollow split, referring IPs.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Target host, subdomain, folder, or page, e.g. semrush.com."},"scope":{"type":"string","description":"Which part of the URL to analyze: ROOT_DOMAIN | SUBDOMAIN | SUBFOLDER | PAGE."},"fields":{"type":"string","description":"Comma-separated subset of response fields (all by default)."}},"required":["url","scope"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"backlinks.summary","description":"Monthly historical trend of authority score, backlinks count, and referring domains. date_from/date_to are YYYY-MM.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Target host/subdomain/folder/page."},"scope":{"type":"string","description":"ROOT_DOMAIN | SUBDOMAIN | SUBFOLDER | PAGE."},"date_from":{"type":"string","description":"Start month, YYYY-MM."},"date_to":{"type":"string","description":"End month, YYYY-MM."},"fields":{"type":"string"},"limit":{"type":"integer"}},"required":["url","scope"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"backlinks.links","description":"Paginated list of individual backlinks: anchor text, source/target URLs, domain & page authority, follow/nofollow, first/last seen.","parameters":{"type":"object","properties":{"url":{"type":"string"},"scope":{"type":"string","description":"ROOT_DOMAIN | SUBDOMAIN | SUBFOLDER | PAGE."},"fields":{"type":"string"},"order_by":{"type":"string","description":"Field to sort by."},"direction":{"type":"string","description":"ASC | DESC."},"limit":{"type":"integer"},"offset":{"type":"integer"},"filter":{"type":"string","description":"Field-operator-value filter expression, e.g. is_follow=1."}},"required":["url","scope"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"backlinks.ref_domains","description":"Referring domains with per-domain backlink counts, domain authority score, country, IP, and follow/new/lost status.","parameters":{"type":"object","properties":{"url":{"type":"string"},"scope":{"type":"string","description":"ROOT_DOMAIN | SUBDOMAIN | SUBFOLDER | PAGE."},"fields":{"type":"string"},"order_by":{"type":"string"},"direction":{"type":"string"},"limit":{"type":"integer"},"offset":{"type":"integer"},"filter":{"type":"string"}},"required":["url","scope"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"backlinks.ref_ips","description":"Referring IP addresses with backlink count, referring-domain count, and country.","parameters":{"type":"object","properties":{"url":{"type":"string"},"scope":{"type":"string","description":"ROOT_DOMAIN | SUBDOMAIN | SUBFOLDER | PAGE."},"fields":{"type":"string"},"order_by":{"type":"string"},"direction":{"type":"string"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["url","scope"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"backlinks.anchors","description":"Backlink anchor texts with per-anchor backlink count, referring domains, and domain/page authority scores.","parameters":{"type":"object","properties":{"url":{"type":"string"},"scope":{"type":"string","description":"ROOT_DOMAIN | SUBDOMAIN | SUBFOLDER | PAGE."},"fields":{"type":"string"},"order_by":{"type":"string"},"direction":{"type":"string"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["url","scope"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"backlinks.pages","description":"Pages on the target domain that receive backlinks, with per-page backlink and referring-domain counts.","parameters":{"type":"object","properties":{"url":{"type":"string"},"scope":{"type":"string","description":"ROOT_DOMAIN | SUBDOMAIN | SUBFOLDER | PAGE."},"fields":{"type":"string"},"order_by":{"type":"string"},"direction":{"type":"string"},"limit":{"type":"integer"},"offset":{"type":"integer"},"filter":{"type":"string"}},"required":["url","scope"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"backlinks.score_profile","description":"Authority Score distribution of a target’s backlink profile — the breakdown of backlink quality scores.","parameters":{"type":"object","properties":{"url":{"type":"string"},"scope":{"type":"string","description":"ROOT_DOMAIN | SUBDOMAIN | SUBFOLDER | PAGE."},"fields":{"type":"string"}},"required":["url","scope"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"backlinks.comparison","description":"Compare the backlink profiles of up to 10 targets side by side. `urls` is comma-separated; scope here supports ROOT_DOMAIN | SUBDOMAIN | PAGE only (no SUBFOLDER).","parameters":{"type":"object","properties":{"urls":{"type":"string","description":"Comma-separated list of up to 10 target URLs."},"scope":{"type":"string","description":"ROOT_DOMAIN | SUBDOMAIN | PAGE."},"fields":{"type":"string"}},"required":["urls","scope"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"keyword.metrics","description":"Keyword metrics for a single keyword (Semrush v4 keyword surface): search volume, CPC, keyword difficulty, competition, trend, SERP features, and search intent.","parameters":{"type":"object","properties":{"keyword":{"type":"string","description":"The keyword phrase to look up."},"country":{"type":"string","description":"Database/country code, e.g. us, uk, de."},"month":{"type":"string","description":"Optional month for the metric snapshot, YYYY-MM."}},"required":["keyword","country"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"sendgrid","displayName":"SendGrid","description":"Send transactional email and manage marketing contacts/lists through the SendGrid v3 API.","auth":{"kind":"api-key","hint":"SendGrid API key with at least Mail Send + Marketing scopes (Settings → API Keys)."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"mail.send","description":"Send a transactional email via /v3/mail/send.","parameters":{"type":"object","properties":{"personalizations":{"type":"array","items":{"type":"object","properties":{"to":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"}},"required":["email"]}},"cc":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"}},"required":["email"]}},"bcc":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"}},"required":["email"]}},"subject":{"type":"string"},"dynamic_template_data":{"type":"object"}},"required":["to"]}},"from":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"}},"required":["email"]},"reply_to":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"}},"required":["email"]},"subject":{"type":"string"},"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"template_id":{"type":"string"},"categories":{"type":"array","items":{"type":"string"}},"send_at":{"type":"integer"}},"required":["personalizations","from"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.search","description":"Search marketing contacts using SGQL.","parameters":{"type":"object","properties":{"query":{"type":"string"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.get","description":"Read a single marketing contact by ID.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.upsert","description":"Add or update marketing contacts (upsert by email).","parameters":{"type":"object","properties":{"list_ids":{"type":"array","items":{"type":"string"}},"contacts":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"custom_fields":{"type":"object"}},"required":["email"]}}},"required":["contacts"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.search","description":"List marketing lists.","parameters":{"type":"object","properties":{"page_size":{"type":"integer","minimum":1,"maximum":1000},"page_token":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.create","description":"Create a marketing list.","parameters":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.delete","description":"Delete one or more marketing contacts by ID.","parameters":{"type":"object","properties":{"ids":{"type":"string","description":"Comma-separated list of contact IDs to delete."},"delete_all_contacts":{"type":"string","description":"Set to \"true\" to delete every contact on the account."}}},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.delete","description":"Delete a marketing list. Optionally delete the contacts on it.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"delete_contacts":{"type":"boolean"}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.addContacts","description":"Add contacts to a marketing list by upserting them with the given list_ids.","parameters":{"type":"object","properties":{"listId":{"type":"string"},"contacts":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"custom_fields":{"type":"object"}},"required":["email"]}}},"required":["listId","contacts"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.removeContacts","description":"Remove contacts from a marketing list (does not delete the contacts).","parameters":{"type":"object","properties":{"listId":{"type":"string"},"contact_ids":{"type":"string","description":"Comma-separated list of contact IDs to remove from the list."}},"required":["listId","contact_ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"suppressions.create","description":"Add one or more email addresses to a suppression group.","parameters":{"type":"object","properties":{"groupId":{"type":"string"},"recipient_emails":{"type":"array","items":{"type":"string"}}},"required":["groupId","recipient_emails"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"sendinblue","displayName":"Sendinblue","description":"Create or update contacts in Sendinblue with attributes, list assignments, and blacklist management.","auth":{"kind":"api-key","hint":"Sendinblue API key (from Account → SMTP & API → API keys)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.createOrUpdate","description":"Create a new contact or update an existing contact.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the contact. Required for creating or updating a contact."},"extId":{"type":"string","description":"External ID to associate with the contact."},"attributes":{"type":"object","description":"Contact attributes as key-value pairs (e.g., firstName, lastName, phone, custom fields)."},"emailBlacklisted":{"type":"boolean","description":"Set to true to blacklist the contact for email communications."},"smsBlacklisted":{"type":"boolean","description":"Set to true to blacklist the contact for SMS communications."},"listIds":{"type":"array","items":{"type":"integer"},"description":"Array of list IDs to add the contact to."},"smtpBlacklistSender":{"type":"array","items":{"type":"string"},"description":"Array of sender email addresses to blacklist for SMTP (transactional email)."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.get","description":"Get a single contact by email address.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the contact to retrieve."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.delete","description":"Delete a contact by email address.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the contact to delete."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.get","description":"Get all lists in the Sendinblue account.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Number of lists to retrieve."},"offset":{"type":"integer","description":"Offset for pagination."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.create","description":"Create a new contact list.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Name of the list to create."},"folderId":{"type":"integer","description":"ID of the parent folder to place the list under."}},"required":["name","folderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.delete","description":"Delete a contact list by ID.","parameters":{"type":"object","properties":{"listId":{"type":"integer","description":"ID of the list to delete."}},"required":["listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.addContacts","description":"Add existing contacts (by email) to a list.","parameters":{"type":"object","properties":{"listId":{"type":"integer"},"emails":{"type":"array","items":{"type":"string"},"description":"Email addresses of contacts to add."}},"required":["listId","emails"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.send","description":"Trigger sending of an email campaign immediately.","parameters":{"type":"object","properties":{"campaignId":{"type":"integer","description":"ID of the campaign to send."}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transactional.send","description":"Send a transactional email via the SMTP API.","parameters":{"type":"object","properties":{"sender":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"}},"required":["email"]},"to":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"}},"required":["email"]}},"subject":{"type":"string"},"htmlContent":{"type":"string"},"textContent":{"type":"string"},"templateId":{"type":"integer"},"params":{"type":"object"},"replyTo":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"}}},"cc":{"type":"array"},"bcc":{"type":"array"},"attachment":{"type":"array"},"headers":{"type":"object"},"tags":{"type":"array","items":{"type":"string"}}},"required":["sender","to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"sendpulse","displayName":"SendPulse","description":"Manage SendPulse subscribers, contacts, and subscriber variables through the REST API.","auth":{"kind":"oauth2","authorizationUrl":"https://login.sendpulse.com/oauth/authorize","tokenUrl":"https://api.sendpulse.com/oauth/access_token","scopes":[],"clientIdEnv":"SENDPULSE_CLIENT_ID","clientSecretEnv":"SENDPULSE_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"subscriber.add","description":"Add a new subscriber to an addressbook.","parameters":{"type":"object","properties":{"addressbookId":{"type":"string"},"email":{"type":"string"},"variables":{"type":"object"},"tags":{"type":"array","items":{"type":"string"}}},"required":["addressbookId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriber.update","description":"Update an existing subscriber in an addressbook.","parameters":{"type":"object","properties":{"addressbookId":{"type":"string"},"email":{"type":"string"},"variables":{"type":"object"},"tags":{"type":"array","items":{"type":"string"}}},"required":["addressbookId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"subscriber.delete","description":"Delete a contact from an addressbook permanently.","parameters":{"type":"object","properties":{"addressbookId":{"type":"string"},"email":{"type":"string"}},"required":["addressbookId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"subscriber.unsubscribe","description":"Unsubscribe one or more email addresses from an addressbook.","parameters":{"type":"object","properties":{"addressbookId":{"type":"string"},"emails":{"type":"array","items":{"type":"string"},"maxItems":100}},"required":["addressbookId","emails"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"subscriber.variable.update","description":"Update a variable for a specific subscriber.","parameters":{"type":"object","properties":{"addressbookId":{"type":"string"},"email":{"type":"string"},"variableName":{"type":"string"},"variableValue":{"type":"string"}},"required":["addressbookId","email","variableName","variableValue"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"addressbooks.list","description":"List all addressbooks on the account.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriber.get","description":"Retrieve a single subscriber from an addressbook by email.","parameters":{"type":"object","properties":{"addressbookId":{"type":"string"},"email":{"type":"string"}},"required":["addressbookId","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"addressbooks.create","description":"Create a new addressbook (contact list).","parameters":{"type":"object","properties":{"bookName":{"type":"string","description":"Display name for the new addressbook."}},"required":["bookName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"addressbooks.delete","description":"Delete an addressbook by ID.","parameters":{"type":"object","properties":{"addressbookId":{"type":"string","description":"ID of the addressbook to delete."}},"required":["addressbookId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.create","description":"Create a new email campaign (sent immediately or scheduled via send_date).","parameters":{"type":"object","properties":{"sender_name":{"type":"string"},"sender_email":{"type":"string"},"subject":{"type":"string"},"body":{"type":"string","description":"Base64-encoded HTML body of the campaign."},"list_id":{"type":"string","description":"ID of the addressbook to send to."},"name":{"type":"string"},"template_id":{"type":"string"},"type":{"type":"string","description":"Optional campaign type (e.g., \"regular\")."},"send_date":{"type":"string","description":"Optional scheduled send date in YYYY-MM-DD HH:mm:ss format."},"attachments":{"type":"object"}},"required":["sender_name","sender_email","subject","body","list_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.cancel","description":"Cancel a scheduled campaign before it is sent.","parameters":{"type":"object","properties":{"campaignId":{"type":"string","description":"ID of the scheduled campaign to cancel."}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"senja","displayName":"Senja","description":"Manage testimonials, list and retrieve testimonial data from Senja.","auth":{"kind":"api-key","hint":"Senja REST API key from Automate > REST API."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"testimonials.list","description":"List testimonials with optional filtering and pagination.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of testimonials to return (1–1000)."},"page":{"type":"integer","description":"Page number for pagination. Start at 1."},"sort":{"type":"string","description":"Field used to sort the results."},"order":{"type":"string","description":"Sort direction (asc or desc)."},"lang":{"type":"string","description":"Filter by language using an ISO 639 code."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"testimonials.get","description":"Get a specific testimonial by ID.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"The unique ID of the testimonial."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"testimonials.create","description":"Create a new testimonial.","parameters":{"type":"object","properties":{"type":{"type":"string","description":"Testimonial type (text, video, etc)."},"customer_name":{"type":"string","description":"Full name of the person giving the testimonial."},"title":{"type":"string","description":"A short headline for the testimonial."},"text":{"type":"string","description":"The body of the testimonial."},"rating":{"type":"integer","description":"Star rating from 1 to 5."},"approved":{"type":"boolean","description":"Mark as approved immediately."},"date":{"type":"string","description":"Date the testimonial was given."},"url":{"type":"string","description":"Link to the original testimonial."},"video_url":{"type":"string","description":"URL of the video testimonial."},"customer_email":{"type":"string","description":"Email address of the customer."},"customer_company":{"type":"string","description":"Company or organisation the customer belongs to."},"customer_tagline":{"type":"string","description":"Short role or tagline for the customer."},"customer_username":{"type":"string","description":"Social media handle or username."},"customer_url":{"type":"string","description":"Link to the customer profile."},"customer_avatar":{"type":"string","description":"Direct URL to the customer avatar."},"customer_company_logo":{"type":"string","description":"Direct URL to the company logo."},"integration":{"type":"string","description":"The platform where the testimonial originally came from."},"tags":{"type":"object","description":"Tags to attach to this testimonial."},"thumbnail_url":{"type":"string","description":"URL of the thumbnail image."},"form_id":{"type":"string","description":"ID of the Senja form to associate with."}},"required":["type","customer_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"testimonials.update","description":"Edit fields on an existing testimonial. Only provided fields are updated.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"The unique ID of the testimonial to update."},"title":{"type":"string","description":"A short headline for the testimonial."},"text":{"type":"string","description":"The body of the testimonial."},"rating":{"type":"integer","description":"Star rating from 1 to 5."},"approved":{"type":"boolean","description":"Mark as approved."},"customer_name":{"type":"string","description":"Full name of the person giving the testimonial."},"customer_email":{"type":"string","description":"Email address of the customer."},"customer_company":{"type":"string","description":"Company or organisation the customer belongs to."},"customer_tagline":{"type":"string","description":"Short role or tagline for the customer."},"customer_url":{"type":"string","description":"Link to the customer profile."},"customer_avatar":{"type":"string","description":"Direct URL to the customer avatar."},"customer_company_logo":{"type":"string","description":"Direct URL to the company logo."},"tags":{"type":"object","description":"Tags to attach to this testimonial."},"url":{"type":"string","description":"Link to the original testimonial."},"video_url":{"type":"string","description":"URL of the video testimonial."},"thumbnail_url":{"type":"string","description":"URL of the thumbnail image."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"testimonials.delete","description":"Delete a testimonial by ID.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"The unique ID of the testimonial to delete."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.create","description":"Create a tag that can be used to organize testimonials.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Name of the tag."},"color":{"type":"string","description":"Optional color for the tag (hex or named)."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.list","description":"List testimonial collections (widgets) on the workspace.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of collections to return."},"page":{"type":"integer","description":"Page number for pagination. Start at 1."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"sentry","displayName":"Sentry","description":"Triage Sentry issues, inspect events, list projects, and cut releases against a connected Sentry organization.","auth":{"kind":"oauth2","authorizationUrl":"https://sentry.io/oauth/authorize/","tokenUrl":"https://sentry.io/oauth/token/","scopes":["org:read","project:read","project:write","project:releases","team:read","event:read","event:write","event:admin","member:read"],"clientIdEnv":"SENTRY_OAUTH_CLIENT_ID","clientSecretEnv":"SENTRY_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"organizations.list","description":"List Sentry organizations the authenticated identity belongs to.","parameters":{"type":"object","properties":{"cursor":{"type":"string","description":"Pagination cursor returned by a prior call."}}},"requiredScopes":["org:read"],"class":"read"},{"name":"projects.list","description":"List projects inside a Sentry organization.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string","description":"Organization slug, e.g. \"acme\"."},"cursor":{"type":"string"}},"required":["organizationSlug"]},"requiredScopes":["project:read"],"class":"read"},{"name":"projects.get","description":"Read a single project by organization slug and project slug.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"projectSlug":{"type":"string"}},"required":["organizationSlug","projectSlug"]},"requiredScopes":["project:read"],"class":"read"},{"name":"teams.list","description":"List teams inside a Sentry organization.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"cursor":{"type":"string"}},"required":["organizationSlug"]},"requiredScopes":["team:read"],"class":"read"},{"name":"issues.search","description":"Run an organization-wide issue search. Use Sentry search syntax in `query`, e.g. `is:unresolved level:error project:web`.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"query":{"type":"string","description":"Sentry search query string (https://docs.sentry.io/concepts/search/)."},"statsPeriod":{"type":"string","description":"Relative time window, e.g. \"24h\", \"14d\", \"90d\". Mutually exclusive with start/end."},"start":{"type":"string","description":"ISO-8601 start of an absolute window."},"end":{"type":"string","description":"ISO-8601 end of an absolute window."},"environment":{"type":"string"},"project":{"type":"string","description":"Project id; pass multiple as a comma-separated list."},"sort":{"type":"string","enum":["date","new","priority","freq","user"]},"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"}},"required":["organizationSlug"]},"requiredScopes":["event:read"],"class":"read"},{"name":"issues.get","description":"Read a single Sentry issue by numeric issue id.","parameters":{"type":"object","properties":{"issueId":{"type":"string","description":"Numeric issue id (group id), e.g. \"1234567890\"."}},"required":["issueId"]},"requiredScopes":["event:read"],"class":"read"},{"name":"issues.update","description":"Mutate triage state on a Sentry issue: resolve / unresolve / ignore / assign / star / mark seen.","parameters":{"type":"object","properties":{"issueId":{"type":"string"},"fields":{"type":"object","description":"Issue update payload. Supports `status` (\"resolved\" | \"resolvedInNextRelease\" | \"unresolved\" | \"ignored\"), `statusDetails`, `assignedTo` (username, team:slug, or null), `hasSeen`, `isBookmarked`, `isSubscribed`, `isPublic`.","properties":{"status":{"type":"string","enum":["resolved","resolvedInNextRelease","unresolved","ignored"]},"statusDetails":{"type":"object"},"assignedTo":{"type":["string","null"]},"hasSeen":{"type":"boolean"},"isBookmarked":{"type":"boolean"},"isSubscribed":{"type":"boolean"},"isPublic":{"type":"boolean"}}}},"required":["issueId","fields"]},"requiredScopes":["event:write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"issues.delete","description":"Permanently delete a Sentry issue (group). Use with caution.","parameters":{"type":"object","properties":{"issueId":{"type":"string"}},"required":["issueId"]},"requiredScopes":["event:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.events.list","description":"List recent events attached to a Sentry issue (group).","parameters":{"type":"object","properties":{"issueId":{"type":"string"},"environment":{"type":"string"},"cursor":{"type":"string"}},"required":["issueId"]},"requiredScopes":["event:read"],"class":"read"},{"name":"issues.events.latest","description":"Return the latest event for a Sentry issue (group), including stack trace and tags.","parameters":{"type":"object","properties":{"issueId":{"type":"string"}},"required":["issueId"]},"requiredScopes":["event:read"],"class":"read"},{"name":"issues.comments.list","description":"List comments (notes) on a Sentry issue.","parameters":{"type":"object","properties":{"issueId":{"type":"string"},"cursor":{"type":"string"}},"required":["issueId"]},"requiredScopes":["event:read"],"class":"read"},{"name":"issues.comments.create","description":"Post a note (comment) on a Sentry issue.","parameters":{"type":"object","properties":{"issueId":{"type":"string"},"text":{"type":"string","description":"Markdown body of the note."},"mentions":{"type":"array","description":"Optional list of @-mentions: usernames or team:slug entries.","items":{"type":"string"}}},"required":["issueId","text"]},"requiredScopes":["event:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.get","description":"Read a single event by project and event id, including full stack trace, tags, and context.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"projectSlug":{"type":"string"},"eventId":{"type":"string","description":"32-char Sentry event id (hex)."}},"required":["organizationSlug","projectSlug","eventId"]},"requiredScopes":["event:read"],"class":"read"},{"name":"releases.list","description":"List releases for a Sentry organization.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"query":{"type":"string","description":"Filter by release version substring."},"project":{"type":"string","description":"Project id; comma-separated to scope to specific projects."},"cursor":{"type":"string"}},"required":["organizationSlug"]},"requiredScopes":["project:releases"],"class":"read"},{"name":"releases.get","description":"Read a single release by version.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"version":{"type":"string"}},"required":["organizationSlug","version"]},"requiredScopes":["project:releases"],"class":"read"},{"name":"releases.create","description":"Create a Sentry release. `projects` is required and lists project slugs the release applies to; `refs` and `commits` are optional commit-tracking inputs.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"fields":{"type":"object","properties":{"version":{"type":"string"},"projects":{"type":"array","items":{"type":"string"}},"ref":{"type":"string"},"url":{"type":"string"},"dateReleased":{"type":"string","description":"ISO-8601 timestamp."},"refs":{"type":"array","items":{"type":"object","properties":{"repository":{"type":"string"},"commit":{"type":"string"},"previousCommit":{"type":"string"}},"required":["repository","commit"]}},"commits":{"type":"array","items":{"type":"object"}}},"required":["version","projects"]}},"required":["organizationSlug","fields"]},"requiredScopes":["project:releases"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"releases.update","description":"Update fields on a Sentry release (e.g. dateReleased, ref, url).","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"version":{"type":"string"},"fields":{"type":"object","properties":{"ref":{"type":"string"},"url":{"type":"string"},"dateReleased":{"type":"string"},"commits":{"type":"array","items":{"type":"object"}},"refs":{"type":"array","items":{"type":"object"}}}}},"required":["organizationSlug","version","fields"]},"requiredScopes":["project:releases"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"releases.delete","description":"Delete a Sentry release. Fails if the release still has associated events.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"version":{"type":"string"}},"required":["organizationSlug","version"]},"requiredScopes":["project:releases"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.resolve","description":"Resolve a Sentry issue. For conditional resolution (\"inNextRelease\", \"inRelease\", \"inCommit\"), use `issues.update` and pass `statusDetails` explicitly.","parameters":{"type":"object","properties":{"issueId":{"type":"string"}},"required":["issueId"]},"requiredScopes":["event:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.ignore","description":"Ignore a Sentry issue. For duration- or count-based ignore (`ignoreDuration`, `ignoreCount`, `ignoreUserCount`, `ignoreWindow`, `ignoreUserWindow`), use `issues.update` with `statusDetails` instead.","parameters":{"type":"object","properties":{"issueId":{"type":"string"}},"required":["issueId"]},"requiredScopes":["event:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"issues.assign","description":"Assign a Sentry issue to a user or team. `assignedTo` accepts a username for users or `team:<slug>` for teams. To unassign, call `issues.update` with `assignedTo: null`.","parameters":{"type":"object","properties":{"issueId":{"type":"string"},"assignedTo":{"type":"string","description":"Username or \"team:<slug>\". Use issues.update to unassign."}},"required":["issueId","assignedTo"]},"requiredScopes":["event:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"alerts.list","description":"List alert rules (issue alerts) configured on a Sentry project.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"projectSlug":{"type":"string"},"cursor":{"type":"string"}},"required":["organizationSlug","projectSlug"]},"requiredScopes":["project:read"],"class":"read"},{"name":"alerts.create","description":"Create a new issue alert rule on a Sentry project. `fields` must include `name`, `conditions`, `actions`, `actionMatch`, and `frequency` per the Sentry alert rule schema.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"projectSlug":{"type":"string"},"fields":{"type":"object","properties":{"name":{"type":"string"},"conditions":{"type":"array","items":{"type":"object"}},"filters":{"type":"array","items":{"type":"object"}},"actions":{"type":"array","items":{"type":"object"}},"actionMatch":{"type":"string","enum":["all","any","none"]},"filterMatch":{"type":"string","enum":["all","any","none"]},"frequency":{"type":"integer","description":"Cooldown in minutes between alert firings."},"environment":{"type":"string"},"owner":{"type":"string","description":"Owner actor id, e.g. \"user:<id>\" or \"team:<id>\"."}},"required":["name","conditions","actions","actionMatch","frequency"]}},"required":["organizationSlug","projectSlug","fields"]},"requiredScopes":["project:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"releases.deploys.create","description":"Record a deploy of a Sentry release into an environment.","parameters":{"type":"object","properties":{"organizationSlug":{"type":"string"},"version":{"type":"string"},"fields":{"type":"object","properties":{"environment":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"dateStarted":{"type":"string"},"dateFinished":{"type":"string"},"projects":{"type":"array","items":{"type":"string"}}},"required":["environment"]}},"required":["organizationSlug","version","fields"]},"requiredScopes":["project:releases"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"serper","displayName":"Serper","description":"Run fast Google searches (web, news, images, places, and scholar) and get structured SERP results as JSON.","auth":{"kind":"api-key","hint":"API key from your serper.dev dashboard. Sent in the X-API-KEY request header."},"category":"market-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"search.web","description":"Run a Google web search and return organic results, knowledge graph, answer box, and related searches.","parameters":{"type":"object","properties":{"q":{"type":"string","description":"The search query."},"gl":{"type":"string","description":"Two-letter country code for geo-targeting, e.g. us."},"hl":{"type":"string","description":"Two-letter language code, e.g. en."},"num":{"type":"integer","description":"Number of results to return."},"page":{"type":"integer","description":"Results page number."}},"required":["q"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.news","description":"Run a Google News search and return structured news results.","parameters":{"type":"object","properties":{"q":{"type":"string","description":"The news search query."},"gl":{"type":"string","description":"Two-letter country code."},"hl":{"type":"string","description":"Two-letter language code."}},"required":["q"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.places","description":"Run a Google Maps/Places search and return structured place results.","parameters":{"type":"object","properties":{"q":{"type":"string","description":"The places search query."},"gl":{"type":"string","description":"Two-letter country code."}},"required":["q"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.scholar","description":"Run a Google Scholar search and return structured academic results.","parameters":{"type":"object","properties":{"q":{"type":"string","description":"The scholar search query."}},"required":["q"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search.images","description":"Run a Google Images search and return structured image results.","parameters":{"type":"object","properties":{"q":{"type":"string","description":"The image search query."},"gl":{"type":"string","description":"Two-letter country code."}},"required":["q"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"serpstat","displayName":"Serpstat","description":"Search keyword analysis and SEO research with Serpstat API.","auth":{"kind":"api-key","hint":"Serpstat API key."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"keywords.get","description":"Get keyword research data and analytics.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query to find keywords for"},"se":{"type":"string","description":"Search engine (g_us, g_au, g_uk, g_de, etc.)"},"minusKeywords":{"type":"object","description":"Keywords to exclude from results"},"withIntents":{"type":"boolean","description":"Include keyword intent data"},"sortField":{"type":"string","description":"Field to sort results by"},"sortOrder":{"type":"string","enum":["asc","desc"],"description":"Sort direction"},"size":{"type":"integer","description":"Number of results (max 100)"},"page":{"type":"integer","description":"Page number for pagination"},"filters":{"type":"object","description":"Additional filters"}},"required":["query","se"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"keywords.suggestions","description":"Get keyword suggestions for a search term.","parameters":{"type":"object","properties":{"keyword":{"type":"string","description":"The keyword to get suggestions for"},"se":{"type":"string","description":"Search engine (g_us, g_au, g_uk, etc.)"},"sortField":{"type":"string","description":"Field to sort suggestions by"},"sortOrder":{"type":"string","enum":["asc","desc"],"description":"Sort direction"},"size":{"type":"integer","description":"Number of results"},"page":{"type":"integer","description":"Page number for pagination"}},"required":["keyword","se"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"service-now","displayName":"ServiceNow","description":"Create, update, and query records in ServiceNow. Manage incidents, changes, service requests, and attachments.","auth":{"kind":"api-key","hint":"ServiceNow instance URL, username, and password."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.create","description":"Create a new record in a ServiceNow table.","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Table name (e.g., incident, change_request)"},"fields":{"type":"object","description":"Field names and values for the new record"}},"required":["table","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.get","description":"Retrieve a single record from a ServiceNow table by sys_id.","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Table name"},"sysSysId":{"type":"string","description":"Record sys_id"}},"required":["table","sysSysId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.update","description":"Update a record in a ServiceNow table.","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Table name"},"sysSysId":{"type":"string","description":"Record sys_id"},"fields":{"type":"object","description":"Fields to update"}},"required":["table","sysSysId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"records.find","description":"Find records matching a query in a ServiceNow table.","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Table name"},"query":{"type":"string","description":"Encoded query (e.g., active=true^state=1)"},"limit":{"type":"integer","description":"Maximum records to return"}},"required":["table"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.delete","description":"Delete a record from a ServiceNow table.","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Table name"},"sysSysId":{"type":"string","description":"Record sys_id"}},"required":["table","sysSysId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"records.count","description":"Count records matching a query in a ServiceNow table.","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Table name"},"query":{"type":"string","description":"Encoded query to filter records"}},"required":["table"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"attachments.add","description":"Attach a file to a ServiceNow record.","parameters":{"type":"object","properties":{"recordSysSysId":{"type":"string","description":"Record sys_id to attach to"},"fileName":{"type":"string","description":"Name for the attachment"},"fileBase64":{"type":"string","description":"Base64 encoded file content"}},"required":["recordSysSysId","fileName","fileBase64"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"attachments.find","description":"Find attachments for a ServiceNow record.","parameters":{"type":"object","properties":{"recordSysSysId":{"type":"string","description":"Record sys_id"},"limit":{"type":"integer","description":"Maximum attachments to return"}},"required":["recordSysSysId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"attachments.delete","description":"Delete an attachment from ServiceNow.","parameters":{"type":"object","properties":{"attachmentSysSysId":{"type":"string","description":"Attachment sys_id"}},"required":["attachmentSysSysId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"comments.add","description":"Add a comment to a ServiceNow record.","parameters":{"type":"object","properties":{"recordSysSysId":{"type":"string","description":"Record sys_id"},"comment":{"type":"string","description":"Comment text"},"commentType":{"type":"string","description":"Type: general or worknote"}},"required":["recordSysSysId","comment"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"incidents.resolve","description":"Resolve or close a ServiceNow incident.","parameters":{"type":"object","properties":{"incidentSysSysId":{"type":"string","description":"Incident sys_id"},"resolution":{"type":"string","description":"resolved or closed"},"closeCode":{"type":"string","description":"Close code"},"closeNotes":{"type":"string","description":"Resolution notes"}},"required":["incidentSysSysId","closeCode","closeNotes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"incidents.close","description":"Close (not just resolve) a ServiceNow incident. Sets incident_state to Closed (7) with the supplied close code and notes.","parameters":{"type":"object","properties":{"incidentSysSysId":{"type":"string","description":"Incident sys_id"},"closeCode":{"type":"string","description":"Close code (e.g. \"Solved (Permanently)\")."},"closeNotes":{"type":"string","description":"Closure notes / root cause summary."}},"required":["incidentSysSysId","closeCode","closeNotes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"incidents.assign","description":"Assign a ServiceNow incident to a user and/or assignment group. Pass `assignedTo` (user sys_id) and/or `assignmentGroup` (group sys_id); at least one is required at runtime.","parameters":{"type":"object","properties":{"incidentSysSysId":{"type":"string","description":"Incident sys_id"},"assignedTo":{"type":"string","description":"User sys_id to assign the incident to."},"assignmentGroup":{"type":"string","description":"Assignment group sys_id."}},"required":["incidentSysSysId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"changes.create","description":"Create a change request (change_request table) in ServiceNow.","parameters":{"type":"object","properties":{"fields":{"type":"object","description":"Change request fields. Common values: `short_description`, `description`, `type` (\"standard\"|\"normal\"|\"emergency\"), `risk`, `impact`, `priority`, `assignment_group`."}},"required":["fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.create","description":"Create a task record on a ServiceNow task table. Pass `table` to target a concrete task subtype (e.g. `sc_task`, `incident_task`, `change_task`, or the base `task` table).","parameters":{"type":"object","properties":{"table":{"type":"string","description":"Task table name (e.g. `sc_task`, `incident_task`, `change_task`, `task`)."},"fields":{"type":"object","description":"Task fields. Common values: `short_description`, `description`, `assigned_to`, `assignment_group`, `parent`."}},"required":["table","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"sftp","displayName":"SFTP","description":"List, inspect, download, upload, move, and delete files over host-key-verified SFTP.","auth":{"kind":"api-key","hint":"JSON with host, username, SHA-256 hostFingerprint, and password or privateKey; optional port, passphrase, and rootPath."},"defaultConsistencyModel":"advisory","category":"storage","rateLimit":{"requests":120,"windowMs":60000,"scope":"data-source"},"capabilities":[{"name":"sftp.list","class":"read","description":"List a directory within the connection root.","parameters":{"type":"object","properties":{"path":{"type":"string","default":"/"},"limit":{"type":"integer","minimum":1,"maximum":1000,"default":1000}},"additionalProperties":false}},{"name":"sftp.stat","class":"read","description":"Read file or directory metadata within the connection root.","parameters":{"type":"object","properties":{"path":{"type":"string","minLength":1}},"required":["path"],"additionalProperties":false}},{"name":"sftp.download","class":"read","description":"Download a file no larger than 10485760 bytes as base64.","parameters":{"type":"object","properties":{"path":{"type":"string","minLength":1}},"required":["path"],"additionalProperties":false}},{"name":"sftp.upload","class":"mutation","description":"Upload a base64 file no larger than 10485760 bytes within the connection root.","parameters":{"type":"object","properties":{"path":{"type":"string","minLength":1},"fileBase64":{"type":"string"},"overwrite":{"type":"boolean","default":false}},"required":["path","fileBase64"],"additionalProperties":false},"cas":"none","externalEffect":true},{"name":"sftp.mkdir","class":"mutation","description":"Create a directory within the connection root.","parameters":{"type":"object","properties":{"path":{"type":"string","minLength":1},"recursive":{"type":"boolean","default":true}},"required":["path"],"additionalProperties":false},"cas":"none","externalEffect":true},{"name":"sftp.rename","class":"mutation","description":"Move or rename a file without overwriting the destination.","parameters":{"type":"object","properties":{"sourcePath":{"type":"string","minLength":1},"destinationPath":{"type":"string","minLength":1}},"required":["sourcePath","destinationPath"],"additionalProperties":false},"cas":"none","externalEffect":true},{"name":"sftp.delete","class":"mutation","description":"Delete a file within the connection root. Repeated deletion is safe.","parameters":{"type":"object","properties":{"path":{"type":"string","minLength":1}},"required":["path"],"additionalProperties":false},"cas":"none","externalEffect":true}]},{"kind":"sharepoint","displayName":"SharePoint","description":"Let your agent discover SharePoint sites, list/search their document libraries, read small file contents, upload files, and create folders. Etag-CAS available on every DriveItem for follow-up patch/delete flows.","auth":{"kind":"oauth2","authorizationUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["https://graph.microsoft.com/Sites.ReadWrite.All","https://graph.microsoft.com/Files.ReadWrite.All","offline_access"],"clientIdEnv":"MS_OAUTH_CLIENT_ID","clientSecretEnv":"MS_OAUTH_CLIENT_SECRET"},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"search_sites","class":"read","description":"Search SharePoint sites visible to the connected user. Returns id, name, and webUrl per match.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Free-text query (site title / description)."},"top":{"type":"integer","minimum":1,"maximum":50,"default":20}},"required":["query"]}},{"name":"list_drive_items","class":"read","description":"List children of a SharePoint site's default document library, optionally scoped to a subfolder by itemId.","parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id (composite \"host,site-id,web-id\")."},"folderId":{"type":"string","description":"Optional DriveItem id of a folder; omit to list the root."},"top":{"type":"integer","minimum":1,"maximum":200,"default":50}},"required":["siteId"]}},{"name":"search_drive","class":"read","description":"Server-side content + filename search across a site's default document library.","parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"query":{"type":"string","description":"Search string passed to Graph search(q)."},"top":{"type":"integer","minimum":1,"maximum":50,"default":20}},"required":["siteId","query"]}},{"name":"get_item_content","class":"read","description":"Download a small text file from a SharePoint drive (cap 4 MiB). Returns decoded UTF-8 content, or { binary: true, downloadUrl } for binary / oversize files.","parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"itemId":{"type":"string","description":"DriveItem id of the file."}},"required":["siteId","itemId"]}},{"name":"upload_file","class":"mutation","description":"Upload a small file (<= 4 MiB) into a SharePoint document library. Returns the new DriveItem id + etag for downstream CAS.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"parentFolderId":{"type":"string","description":"Parent folder DriveItem id (use 'root' for the drive root)."},"filename":{"type":"string","description":"Target filename, e.g. report.csv."},"content":{"type":"string","description":"UTF-8 file body."},"contentType":{"type":"string","description":"MIME type, defaults to 'text/plain'."}},"required":["siteId","parentFolderId","filename","content"]}},{"name":"create_folder","class":"mutation","description":"Create a folder under a parent DriveItem. Fails (conflict) if a folder of the same name already exists — Graph enforces sibling-name uniqueness server-side, which gives us idempotent retries by (parentFolderId, name).","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"parentFolderId":{"type":"string","description":"Parent folder DriveItem id (use 'root' for the drive root)."},"name":{"type":"string","description":"New folder name."}},"required":["siteId","parentFolderId","name"]}},{"name":"files.delete","class":"mutation","description":"Delete a file or folder DriveItem. Graph returns 204 on success. (siteId, itemId) is the natural idempotency tuple — a re-delete of a missing item surfaces as 404 mapped to a tombstone result.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"itemId":{"type":"string","description":"DriveItem id of the file or folder to delete."}},"required":["siteId","itemId"]}},{"name":"files.move","class":"mutation","description":"Move a file or folder DriveItem to a new parent (and optionally rename it). PATCH on the DriveItem with parentReference + optional name.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"itemId":{"type":"string","description":"DriveItem id of the file or folder to move."},"newParentFolderId":{"type":"string","description":"Destination parent folder DriveItem id (use 'root' for the drive root)."},"newName":{"type":"string","description":"Optional new filename for the moved item."}},"required":["siteId","itemId","newParentFolderId"]}},{"name":"permissions.grant","class":"mutation","description":"Grant a user (by email) access to a DriveItem at the requested role ('read' or 'write'). Uses the Graph invite action so the grant is created or upserted by recipient.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"itemId":{"type":"string","description":"DriveItem id being shared."},"email":{"type":"string","description":"Recipient email address."},"role":{"type":"string","description":"Permission role ('read' or 'write'). Defaults to 'read'."},"sendInvitation":{"type":"boolean","description":"Whether Graph should email the invite. Defaults to false."},"message":{"type":"string","description":"Optional invitation message body."}},"required":["siteId","itemId","email"]}},{"name":"permissions.revoke","class":"mutation","description":"Revoke a specific permission on a DriveItem. Graph returns 204 on success. (siteId, itemId, permissionId) is the natural idempotency tuple.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"itemId":{"type":"string","description":"DriveItem id whose permission is being revoked."},"permissionId":{"type":"string","description":"Permission id from list_permissions / grant response."}},"required":["siteId","itemId","permissionId"]}},{"name":"lists.items.create","class":"mutation","description":"Create a list item in a SharePoint list. Caller provides the field bag (column key → value). Graph rejects duplicates by list-defined unique columns server-side; MutationGuard handles dedup-on-retry by key.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"listId":{"type":"string","description":"SharePoint list id (or list display name resolved by the caller)."},"fields":{"type":"object","description":"Map of column internal-name → value. Must include all required columns the list defines.","additionalProperties":true}},"required":["siteId","listId","fields"]}},{"name":"get_site_info","class":"read","description":"Read the metadata for a SharePoint site by site id (id, name, displayName, webUrl, description).","parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id (composite \"host,site-id,web-id\")."}},"required":["siteId"]}},{"name":"lists.items.find","class":"read","description":"List items in a SharePoint list, optionally filtered with $filter and shaped with $expand (e.g. fields($select=...)).","parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"listId":{"type":"string","description":"SharePoint list id (or list display name resolved by the caller)."},"filter":{"type":"string","description":"Optional OData $filter expression."},"expand":{"type":"string","description":"Optional OData $expand, e.g. fields($select=Title,Status)."},"top":{"type":"integer","minimum":1,"maximum":200,"default":50}},"required":["siteId","listId"]}},{"name":"copy_item","class":"mutation","description":"Copy a file or folder DriveItem. Graph copy is asynchronous — it returns 202 Accepted with a Location monitor URL rather than the new DriveItem. Supply either a cross-drive parentReference (driveId + id) or a same-site target parent id via targetParentId; optionally rename via name.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"itemId":{"type":"string","description":"DriveItem id of the file or folder to copy."},"parentReference":{"type":"object","description":"Cross-drive destination reference (driveId + id). Provide this OR targetParentId.","additionalProperties":true},"targetParentId":{"type":"string","description":"Same-site destination parent folder DriveItem id. Provide this OR parentReference."},"name":{"type":"string","description":"Optional new name for the copied item."}},"required":["siteId","itemId"]}},{"name":"lists.create","class":"mutation","description":"Create a SharePoint list on the site. displayName is required; columns and list (e.g. { template }) are optional.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"displayName":{"type":"string","description":"Display name of the new list."},"columns":{"type":"array","description":"Optional column definitions for the list.","items":{"type":"object","additionalProperties":true}},"list":{"type":"object","description":"Optional list facet, e.g. { template: \"genericList\" }.","additionalProperties":true}},"required":["siteId","displayName"]}},{"name":"lists.items.update","class":"mutation","description":"Patch the fields on an existing list item. Supports etag-CAS via If-Match — pass the item's etag to guard against concurrent writes; a mismatch surfaces as ResourceContention.","cas":"etag-if-match","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"listId":{"type":"string","description":"SharePoint list id."},"itemId":{"type":"string","description":"List item id to update."},"fields":{"type":"object","description":"Map of column internal-name → new value.","additionalProperties":true}},"required":["siteId","listId","itemId","fields"]}},{"name":"lists.items.delete","class":"mutation","description":"Delete a list item by id. Graph returns 204 on success. (siteId, listId, itemId) is the natural idempotency tuple — a re-delete of a missing item surfaces as 404 mapped to a tombstone result.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"listId":{"type":"string","description":"SharePoint list id."},"itemId":{"type":"string","description":"List item id to delete."}},"required":["siteId","listId","itemId"]}},{"name":"pages.publish","class":"mutation","description":"Publish a SharePoint site page by page id.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Graph site id."},"pageId":{"type":"string","description":"Site page id to publish."}},"required":["siteId","pageId"]}}]},{"kind":"shippo","displayName":"Shippo","description":"Multi-carrier shipping platform for real-time rates, labels, and tracking.","auth":{"kind":"api-key","hint":"Shippo API key."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"orders.create","description":"Create a new order in Shippo.","parameters":{"type":"object","properties":{"orderId":{"type":"string","description":"Custom order number"},"orderStatus":{"type":"string","description":"Order status (e.g., awaiting_shipment, shipped, cancelled)"},"placedAt":{"type":"string","description":"ISO 8601 timestamp when order was placed"},"totalPrice":{"type":"string","description":"Total price including shipping and tax"},"subtotalPrice":{"type":"string","description":"Price before shipping and tax"},"totalTax":{"type":"string","description":"Total tax amount"},"currency":{"type":"string","description":"Currency code (USD, EUR, etc.)"},"fromName":{"type":"string","description":"Sender name"},"fromCompany":{"type":"string","description":"Sender company"},"fromStreet1":{"type":"string","description":"Sender street address line 1"},"fromCity":{"type":"string","description":"Sender city"},"fromState":{"type":"string","description":"Sender state/province"},"fromZip":{"type":"string","description":"Sender postal code"},"fromCountry":{"type":"string","description":"Sender country code"},"toName":{"type":"string","description":"Recipient name"},"toCompany":{"type":"string","description":"Recipient company"},"toStreet1":{"type":"string","description":"Recipient street address line 1"},"toCity":{"type":"string","description":"Recipient city"},"toState":{"type":"string","description":"Recipient state/province"},"toZip":{"type":"string","description":"Recipient postal code"},"toCountry":{"type":"string","description":"Recipient country code"}},"required":["orderId","orderStatus","placedAt","totalPrice","currency","toName","toCountry"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.find","description":"Find an order by order number or ID.","parameters":{"type":"object","properties":{"orderIdOrNumber":{"type":"string","description":"Order ID or order number"}},"required":["orderIdOrNumber"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"shippinglabels.find","description":"Find a shipping label by transaction ID.","parameters":{"type":"object","properties":{"transactionId":{"type":"string","description":"Transaction ID of the shipping label"}},"required":["transactionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"transactions.create","description":"Purchase a shipping label by transacting against a previously quoted rate. Returns transaction object_id, status, tracking_number, tracking_url_provider, and label_url.","parameters":{"type":"object","properties":{"rate":{"type":"string","description":"Rate object_id returned from a previous shipment quote."},"label_file_type":{"type":"string","description":"Output format for the label file (PDF, PNG, PNG_2.3x7.5, ZPLII, etc.). Optional; defaults to the account-level setting."},"async":{"type":"boolean","description":"When true the carrier purchase is queued and the transaction polls to SUCCESS asynchronously. Defaults to false (synchronous).","default":false}},"required":["rate"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tracks.get","description":"Get current tracking status and history for a tracking number on a specific carrier. Returns tracking_status, tracking_history, and eta.","parameters":{"type":"object","properties":{"carrier":{"type":"string","description":"Carrier token (e.g. usps, ups, fedex, dhl_express)."},"tracking_number":{"type":"string","description":"Carrier-issued tracking number."}},"required":["carrier","tracking_number"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"shopify","displayName":"Shopify","description":"Manage Shopify Admin resources — products, orders, customers, and inventory levels — for a connected store.","auth":{"kind":"oauth2","authorizationUrl":"https://{shop}.myshopify.com/admin/oauth/authorize","tokenUrl":"https://{shop}.myshopify.com/admin/oauth/access_token","scopes":["read_products","write_products","read_orders","write_orders","read_customers","write_customers","read_inventory","write_inventory"],"clientIdEnv":"SHOPIFY_OAUTH_CLIENT_ID","clientSecretEnv":"SHOPIFY_OAUTH_CLIENT_SECRET"},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"products.search","description":"List catalog products with optional title/vendor/status filters and cursor pagination.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"Exact product title match."},"vendor":{"type":"string"},"product_type":{"type":"string"},"status":{"type":"string","enum":["active","archived","draft"]},"collection_id":{"type":"integer"},"ids":{"type":"string","description":"Comma-separated product ids."},"limit":{"type":"integer","minimum":1,"maximum":250},"page_info":{"type":"string","description":"Cursor returned by the previous page Link header."},"fields":{"type":"string","description":"Comma-separated field projection, e.g. id,title,handle."}}},"requiredScopes":["read_products"],"class":"read"},{"name":"products.get","description":"Read a single catalog product by id.","parameters":{"type":"object","properties":{"productId":{"type":"integer"},"fields":{"type":"string","description":"Comma-separated field projection."}},"required":["productId"]},"requiredScopes":["read_products"],"class":"read"},{"name":"products.create","description":"Create a catalog product. Shopify wraps the payload in a top-level \"product\" key.","parameters":{"type":"object","properties":{"product":{"type":"object","description":"Shopify product payload (title, body_html, vendor, product_type, tags, status, variants, images)."}},"required":["product"]},"requiredScopes":["write_products"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.update","description":"Update a catalog product. Only the supplied fields under \"product\" are modified.","parameters":{"type":"object","properties":{"productId":{"type":"integer"},"product":{"type":"object","description":"Partial product payload to merge."}},"required":["productId","product"]},"requiredScopes":["write_products"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"products.delete","description":"Delete a catalog product.","parameters":{"type":"object","properties":{"productId":{"type":"integer"}},"required":["productId"]},"requiredScopes":["write_products"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"orders.search","description":"List orders with optional status / financial_status / fulfillment_status / date filters.","parameters":{"type":"object","properties":{"status":{"type":"string","enum":["open","closed","cancelled","any"]},"financial_status":{"type":"string","enum":["authorized","pending","paid","partially_paid","refunded","voided","partially_refunded","any","unpaid"]},"fulfillment_status":{"type":"string","enum":["shipped","partial","unshipped","any","unfulfilled"]},"created_at_min":{"type":"string","description":"ISO 8601 timestamp."},"created_at_max":{"type":"string","description":"ISO 8601 timestamp."},"updated_at_min":{"type":"string","description":"ISO 8601 timestamp."},"ids":{"type":"string","description":"Comma-separated order ids."},"limit":{"type":"integer","minimum":1,"maximum":250},"page_info":{"type":"string","description":"Cursor returned by the previous page Link header."},"fields":{"type":"string","description":"Comma-separated field projection."}}},"requiredScopes":["read_orders"],"class":"read"},{"name":"orders.get","description":"Read a single order by id.","parameters":{"type":"object","properties":{"orderId":{"type":"integer"},"fields":{"type":"string","description":"Comma-separated field projection."}},"required":["orderId"]},"requiredScopes":["read_orders"],"class":"read"},{"name":"orders.update","description":"Update an existing order (note, tags, email, metafields, etc.).","parameters":{"type":"object","properties":{"orderId":{"type":"integer"},"order":{"type":"object","description":"Partial order payload, e.g. { note: \"...\", tags: \"vip,priority\" }."}},"required":["orderId","order"]},"requiredScopes":["write_orders"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"orders.cancel","description":"Cancel an open order. Optionally restock and refund.","parameters":{"type":"object","properties":{"orderId":{"type":"integer"},"reason":{"type":"string","enum":["customer","fraud","inventory","declined","other"]},"email":{"type":"boolean","description":"Send a cancellation email to the customer."},"refund":{"type":"boolean","description":"Issue a refund for the captured amount."},"restock":{"type":"boolean","description":"Restock the cancelled items."}},"required":["orderId"]},"requiredScopes":["write_orders"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"customers.search","description":"Search customers by query string (Shopify query syntax: email:..., tag:..., last_name:...).","parameters":{"type":"object","properties":{"query":{"type":"string","description":"Shopify customer search query, e.g. \"email:jane@example.com\"."},"limit":{"type":"integer","minimum":1,"maximum":250},"page_info":{"type":"string"},"fields":{"type":"string"}},"required":["query"]},"requiredScopes":["read_customers"],"class":"read"},{"name":"customers.get","description":"Read a single customer by id.","parameters":{"type":"object","properties":{"customerId":{"type":"integer"},"fields":{"type":"string"}},"required":["customerId"]},"requiredScopes":["read_customers"],"class":"read"},{"name":"customers.create","description":"Create a customer. Required: first_name or last_name or email or phone.","parameters":{"type":"object","properties":{"customer":{"type":"object","description":"Shopify customer payload (first_name, last_name, email, phone, tags, addresses, accepts_marketing)."}},"required":["customer"]},"requiredScopes":["write_customers"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.update","description":"Update a customer. Only the supplied fields under \"customer\" are modified.","parameters":{"type":"object","properties":{"customerId":{"type":"integer"},"customer":{"type":"object","description":"Partial customer payload to merge."}},"required":["customerId","customer"]},"requiredScopes":["write_customers"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"inventory_levels.list","description":"List inventory levels for given inventory_item_ids or location_ids.","parameters":{"type":"object","properties":{"inventory_item_ids":{"type":"string","description":"Comma-separated inventory_item ids."},"location_ids":{"type":"string","description":"Comma-separated location ids."},"limit":{"type":"integer","minimum":1,"maximum":250}}},"requiredScopes":["read_inventory"],"class":"read"},{"name":"inventory_levels.set","description":"Set the available quantity at a location to an absolute value.","parameters":{"type":"object","properties":{"location_id":{"type":"integer"},"inventory_item_id":{"type":"integer"},"available":{"type":"integer"},"disconnect_if_necessary":{"type":"boolean","description":"Allow disconnecting other fulfillment services that block the update."}},"required":["location_id","inventory_item_id","available"]},"requiredScopes":["write_inventory"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"inventory_levels.adjust","description":"Adjust the available quantity at a location by a relative delta.","parameters":{"type":"object","properties":{"location_id":{"type":"integer"},"inventory_item_id":{"type":"integer"},"available_adjustment":{"type":"integer","description":"Positive or negative delta applied to current available."}},"required":["location_id","inventory_item_id","available_adjustment"]},"requiredScopes":["write_inventory"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"refunds.create","description":"Issue a refund against an existing order. `refund_line_items` controls which line items are refunded and whether stock is returned; `transactions` issues the gateway refund(s).","parameters":{"type":"object","properties":{"order_id":{"type":"integer","description":"Order to refund."},"refund_line_items":{"type":"array","description":"Line items to refund. Omit to refund only via `transactions`.","items":{"type":"object","properties":{"line_item_id":{"type":"integer"},"quantity":{"type":"integer"},"restock_type":{"type":"string","enum":["no_restock","cancel","return","legacy_restock"]}},"required":["line_item_id","quantity"]}},"transactions":{"type":"array","description":"Refund transactions. `parent_id` is the captured transaction being refunded.","items":{"type":"object","properties":{"parent_id":{"type":"integer"},"amount":{"type":"string","description":"Decimal amount as a string, e.g. \"12.34\"."},"kind":{"type":"string","enum":["refund"],"default":"refund"},"gateway":{"type":"string"}},"required":["parent_id","amount","kind"]}},"notify":{"type":"boolean","description":"Send the customer the refund-notification email."}},"required":["order_id"]},"requiredScopes":["write_orders"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"fulfillments.create","description":"Create a fulfillment that ships one or more fulfillment orders. `line_items_by_fulfillment_order` selects which fulfillment orders (and optionally which line items within them) are shipped; `tracking_info` attaches a carrier tracking record.","parameters":{"type":"object","properties":{"line_items_by_fulfillment_order":{"type":"array","description":"Fulfillment orders to ship. At minimum each entry needs `fulfillment_order_id`; omit `fulfillment_order_line_items` to ship the entire fulfillment order.","items":{"type":"object","properties":{"fulfillment_order_id":{"type":"integer"}},"required":["fulfillment_order_id"]}},"tracking_info":{"type":"object","description":"Carrier tracking record applied to the fulfillment.","properties":{"number":{"type":"string"},"url":{"type":"string"},"company":{"type":"string"}}},"notify_customer":{"type":"boolean","description":"Send the customer the shipping-confirmation email."}},"required":["line_items_by_fulfillment_order"]},"requiredScopes":["write_orders"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"draft_orders.create","description":"Create a draft order. Useful for agent-driven quoting, custom invoices, and assisted-sale flows where the order is staged before the customer commits.","parameters":{"type":"object","properties":{"line_items":{"type":"array","description":"Draft-order line items. `variant_id` identifies the product variant; `quantity` is the number of units.","items":{"type":"object","properties":{"variant_id":{"type":"integer"},"quantity":{"type":"integer"}},"required":["variant_id","quantity"]}},"customer":{"type":"object","description":"Existing customer to attach by id.","properties":{"id":{"type":"integer"}}}},"required":["line_items"]},"requiredScopes":["write_orders"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"short-io","displayName":"Short.io","description":"Create, update, and manage short links with analytics and country-based targeting.","auth":{"kind":"api-key","hint":"Short.io API key."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"links.create","description":"Create a short link.","parameters":{"type":"object","properties":{"originalURL":{"type":"string","description":"The destination URL."},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code."},"title":{"type":"string","description":"Link title."},"cloaking":{"type":"boolean","description":"Enable cloaking."},"password":{"type":"string","description":"Password protection."},"redirectType":{"type":"string","description":"HTTP redirect status code."},"path":{"type":"string","description":"Custom short path."}},"required":["originalURL"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"links.update","description":"Update a short link.","parameters":{"type":"object","properties":{"linkId":{"type":"string","description":"The ID of the short link."},"originalURL":{"type":"string","description":"The destination URL."},"title":{"type":"string","description":"Link title."},"archived":{"type":"boolean","description":"Archive the link."}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"links.delete","description":"Delete a short link.","parameters":{"type":"object","properties":{"linkId":{"type":"string","description":"The ID of the short link."}},"required":["linkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"links.get","description":"Get a short link by path.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name."},"path":{"type":"string","description":"Short link path."}},"required":["domain","path"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"links.list","description":"List short links.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Max results (1-150, default 50)."},"pageToken":{"type":"string","description":"Pagination token."},"beforeDate":{"type":"string","description":"Filter by creation date (before)."},"afterDate":{"type":"string","description":"Filter by creation date (after)."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"links.clicks","description":"Get click statistics for a link.","parameters":{"type":"object","properties":{"linkId":{"type":"string","description":"The ID of the short link."},"period":{"type":"string","description":"Time period (e.g., today, last7days, last30days)."},"tz":{"type":"string","description":"Timezone for statistics."}},"required":["linkId","period"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"targeting.create","description":"Create a country targeting rule.","parameters":{"type":"object","properties":{"linkId":{"type":"string","description":"The ID of the short link."},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code."},"originalURL":{"type":"string","description":"Country-specific redirect URL."}},"required":["linkId","country","originalURL"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"domains.list","description":"List custom domains on the Short.io account.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"domains.create","description":"Create a custom domain on the Short.io account.","parameters":{"type":"object","properties":{"hostname":{"type":"string","description":"Domain hostname (e.g., short.example.com)."},"hideReferer":{"type":"boolean","description":"Hide the referer header on redirect."},"httpsLinks":{"type":"boolean","description":"Enforce HTTPS-only redirects."}},"required":["hostname"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"links.import","description":"Bulk-import short links. `links` is an array of {originalURL, …} entries.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Target Short.io domain hostname."},"links":{"type":"array","description":"Array of link objects to import (each requires originalURL).","items":{"type":"object"}}},"required":["domain","links"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"targeting.delete","description":"Delete a country targeting rule by rule id.","parameters":{"type":"object","properties":{"linkId":{"type":"string","description":"The ID of the short link."},"ruleId":{"type":"string","description":"The ID of the country-targeting rule."}},"required":["linkId","ruleId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"sign-now","displayName":"SignNow","description":"Upload documents, send invites for signing, and track document status.","auth":{"kind":"api-key","hint":"SignNow OAuth2 access token."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"documents.upload","description":"Upload a document to SignNow.","parameters":{"type":"object","properties":{"filename":{"type":"string"},"filePath":{"type":"string"}},"required":["filename","filePath"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.get","description":"Retrieve document details and status.","parameters":{"type":"object","properties":{"documentId":{"type":"string"}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"invites.send","description":"Send a signing invite to a recipient for a document.","parameters":{"type":"object","properties":{"documentId":{"type":"string"},"to":{"type":"string"},"signingOrder":{"type":"integer"}},"required":["documentId","to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invites.cancel","description":"Cancel a signing invite.","parameters":{"type":"object","properties":{"documentId":{"type":"string"},"inviteId":{"type":"string"}},"required":["documentId","inviteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"templates.get","description":"List or retrieve document templates.","parameters":{"type":"object","properties":{"templateId":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"templates.createDocumentFromTemplate","description":"Create a document from a template.","parameters":{"type":"object","properties":{"templateId":{"type":"string"},"documentName":{"type":"string"}},"required":["templateId","documentName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.delete","description":"Delete a document by id.","parameters":{"type":"object","properties":{"documentId":{"type":"string"}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invites.resend","description":"Resend a pending signing invite to the recipient.","parameters":{"type":"object","properties":{"documentId":{"type":"string"},"inviteId":{"type":"string"}},"required":["documentId","inviteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.download","description":"Download the (signed) document file. Returns the SignNow file response payload (signed PDF metadata + url).","parameters":{"type":"object","properties":{"documentId":{"type":"string"},"type":{"type":"string","description":"Download variant ('collapsed' for the signed PDF, 'zip' for the package)."}},"required":["documentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"templates.create","description":"Create a reusable template from an existing document. Returns the new template id.","parameters":{"type":"object","properties":{"documentId":{"type":"string","description":"Source document id to clone into a template."},"templateName":{"type":"string","description":"Display name for the new template."}},"required":["documentId","templateName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"signrequest","displayName":"Signrequest","description":"Send signature requests and manage signature workflows.","auth":{"kind":"api-key","hint":"Signrequest API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"requests.send","description":"Send a signature request.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"Title of the signature request"},"subject":{"type":"string","description":"Email subject line"},"message":{"type":"string","description":"Email message body"},"signers":{"type":"object","description":"Array of signer objects with email and name"},"files":{"type":"object","description":"Array of file objects to sign"}},"required":["title","signers","files"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"requests.list","description":"List signature requests.","parameters":{"type":"object","properties":{"status":{"type":"string","description":"Filter by status (draft, sent, viewed, signed, cancelled, completed)"},"limit":{"type":"integer","description":"Maximum number of results"},"offset":{"type":"integer","description":"Pagination offset"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"requests.get","description":"Get a signature request by ID.","parameters":{"type":"object","properties":{"requestId":{"type":"string","description":"The signature request ID"}},"required":["requestId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"requests.cancel","description":"Cancel a signature request.","parameters":{"type":"object","properties":{"requestId":{"type":"string","description":"The signature request ID"}},"required":["requestId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"teams.get","description":"Get current team information.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"requests.remind","description":"Send a reminder email to pending signers on a signature request.","parameters":{"type":"object","properties":{"requestId":{"type":"string","description":"The signature request ID"}},"required":["requestId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"requests.delete","description":"Delete a signature request.","parameters":{"type":"object","properties":{"requestId":{"type":"string","description":"The signature request ID"}},"required":["requestId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"documents.upload","description":"Upload a new document to sign. Provide either file_from_url or file_from_content.","parameters":{"type":"object","properties":{"file_from_url":{"type":"string","description":"Public URL to fetch the document from."},"file_from_content":{"type":"string","description":"Base64-encoded document content."},"file_from_content_name":{"type":"string","description":"Filename for base64-uploaded content."},"name":{"type":"string","description":"Display name of the document."},"external_id":{"type":"string","description":"External identifier for the document."},"template":{"type":"string","description":"Template URL to clone from."},"auto_delete_days":{"type":"integer","description":"Delete the document after N days."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"templates.list","description":"List available document templates.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of results"},"offset":{"type":"integer","description":"Pagination offset"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"signwell","displayName":"SignWell","description":"Create and send documents for electronic signature, and list or retrieve documents.","auth":{"kind":"api-key","hint":"API key from Settings -> API (Create API Key). Sent in the X-Api-Key header."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"documents.list","description":"List documents in the account.","parameters":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.get","description":"Retrieve a single document by its id.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"account.get","description":"Retrieve the account information associated with the API key.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"documents.create","description":"Create and optionally send a new document for signing. Set draft to true to create without sending.","parameters":{"type":"object","properties":{"files":{"type":"array","items":{"type":"object"}},"recipients":{"type":"array","items":{"type":"object"}},"name":{"type":"string"},"subject":{"type":"string"},"message":{"type":"string"},"draft":{"type":"boolean"},"test_mode":{"type":"boolean"},"embedded_signing":{"type":"boolean"}},"required":["files","recipients"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"similarweb","displayName":"Similarweb","description":"Market intelligence on any website: estimated traffic and engagement, global/country/category rank, traffic sources, geography, similar sites, audience interests, and search keywords via the Similarweb Digital Marketing Intelligence API.","auth":{"kind":"api-key","hint":"Similarweb API key from Account → API Management. Sent as the `api_key` query parameter on every request."},"category":"market-intelligence","defaultConsistencyModel":"cache","capabilities":[{"name":"rank.global","description":"Similarweb Global Rank for a domain (estimated monthly unique visitors and pageviews, desktop + mobile). Lower is more popular.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"start_date":{"type":"string","description":"Inclusive start month, YYYY-MM."},"end_date":{"type":"string","description":"Inclusive end month, YYYY-MM."},"main_domain_only":{"type":"boolean","description":"Exclude subdomains (default false)."}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rank.country","description":"Monthly rank of a domain within a single country.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"country":{"type":"string","description":"Lowercase ISO 3166-1 alpha-2 code, e.g. us."},"start_date":{"type":"string","description":"Inclusive start month, YYYY-MM."},"end_date":{"type":"string","description":"Inclusive end month, YYYY-MM."},"main_domain_only":{"type":"boolean"}},"required":["domain","country"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rank.category","description":"Industry/category rank for a domain relative to its category globally (latest value; no date range).","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"total-traffic.visits","description":"Estimated total visits (desktop + mobile combined) for a domain over a date range.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"country":{"type":"string","description":"Lowercase ISO alpha-2 code or \"world\"."},"granularity":{"type":"string","description":"daily | weekly | monthly."},"start_date":{"type":"string","description":"Inclusive start month, YYYY-MM."},"end_date":{"type":"string","description":"Inclusive end month, YYYY-MM."},"main_domain_only":{"type":"boolean"},"show_verified":{"type":"boolean","description":"Surface shared Google Analytics data when available."}},"required":["domain","country","granularity"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"total-traffic.pages-per-visit","description":"Average pages per visit (desktop + mobile combined).","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"country":{"type":"string","description":"Lowercase ISO alpha-2 code or \"world\"."},"granularity":{"type":"string","description":"daily | weekly | monthly."},"start_date":{"type":"string","description":"YYYY-MM."},"end_date":{"type":"string","description":"YYYY-MM."},"main_domain_only":{"type":"boolean"}},"required":["domain","country","granularity"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"total-traffic.average-visit-duration","description":"Average visit duration in seconds (desktop + mobile combined).","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"country":{"type":"string","description":"Lowercase ISO alpha-2 code or \"world\"."},"granularity":{"type":"string","description":"daily | weekly | monthly."},"start_date":{"type":"string","description":"YYYY-MM."},"end_date":{"type":"string","description":"YYYY-MM."},"main_domain_only":{"type":"boolean"}},"required":["domain","country","granularity"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"total-traffic.bounce-rate","description":"Bounce rate (desktop + mobile combined) over a date range.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"country":{"type":"string","description":"Lowercase ISO alpha-2 code or \"world\"."},"granularity":{"type":"string","description":"daily | weekly | monthly."},"start_date":{"type":"string","description":"YYYY-MM."},"end_date":{"type":"string","description":"YYYY-MM."},"main_domain_only":{"type":"boolean"}},"required":["domain","country","granularity"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"desktop-traffic.visits","description":"Estimated desktop-only visits for a domain. Supports a US state filter when country=us.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"country":{"type":"string","description":"Lowercase ISO alpha-2 code or \"world\"."},"granularity":{"type":"string","description":"daily | weekly | monthly."},"start_date":{"type":"string","description":"YYYY-MM."},"end_date":{"type":"string","description":"YYYY-MM."},"state":{"type":"string","description":"US state filter, valid only when country=us."},"main_domain_only":{"type":"boolean"}},"required":["domain","country","granularity"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"traffic-sources.overview-share","description":"Share of visits by marketing channel (direct, search, social, referrals, mail, display, paid) over time.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"country":{"type":"string","description":"Lowercase ISO alpha-2 code or \"world\"."},"granularity":{"type":"string","description":"daily | weekly | monthly."},"start_date":{"type":"string","description":"YYYY-MM."},"end_date":{"type":"string","description":"YYYY-MM."},"main_domain_only":{"type":"boolean"}},"required":["domain","country","granularity"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"traffic-sources.referrals","description":"Top referring websites sending traffic to a domain: traffic share per referrer and total referral visits.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"country":{"type":"string","description":"Lowercase ISO alpha-2 code or \"world\"."},"start_date":{"type":"string","description":"YYYY-MM."},"end_date":{"type":"string","description":"YYYY-MM."},"main_domain_only":{"type":"boolean"},"limit":{"type":"integer","description":"Max rows (default 100)."},"offset":{"type":"integer"}},"required":["domain","country"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"traffic-sources.social","description":"Leading social networks sending traffic to a domain: traffic share per network and social visits.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"country":{"type":"string","description":"Lowercase ISO alpha-2 code or \"world\"."},"start_date":{"type":"string","description":"YYYY-MM."},"end_date":{"type":"string","description":"YYYY-MM."},"main_domain_only":{"type":"boolean"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["domain","country"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"geo.traffic-by-country","description":"Distribution of a domain’s traffic across countries: per-country traffic share, visits, pages/visit, average duration, bounce rate, and rank.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"start_date":{"type":"string","description":"YYYY-MM."},"end_date":{"type":"string","description":"YYYY-MM."},"main_domain_only":{"type":"boolean"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"audience.similar-sites","description":"Up to 40 websites most similar to a domain, with a similarity score per site. No date or country params.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"limit":{"type":"integer","description":"Max similar sites (max 40)."}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"audience.also-visited","description":"Other websites visited by the same audience (desktop + mobile): affinity score and audience overlap. Useful for competitive/adjacency analysis.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"country":{"type":"string","description":"Lowercase ISO alpha-2 code or \"world\"."},"start_date":{"type":"string","description":"YYYY-MM."},"end_date":{"type":"string","description":"YYYY-MM."},"main_domain_only":{"type":"boolean"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["domain","country","start_date","end_date"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"keywords.website-keywords","description":"Search keywords driving clicks to a domain (Similarweb Search 3.0). Filter by traffic_source (Organic/Paid/All) and web_source (Desktop/MobileWeb/Total). The domain is passed as the `URL` query parameter.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com (sent as the URL query param)."},"country":{"type":"string","description":"Lowercase ISO alpha-2 code or \"world\"."},"start_date":{"type":"string","description":"YYYY-MM (defaults to ~last 28 days if omitted)."},"end_date":{"type":"string","description":"YYYY-MM."},"traffic_source":{"type":"string","description":"Organic | Paid | All."},"web_source":{"type":"string","description":"Desktop | MobileWeb | Total."},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["domain","country"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lead-enrichment","description":"Firmographics plus website traffic and engagement for a domain in one call (Similarweb Lead Enrichment). Up to 12 months of history; set show_verified to surface shared Google Analytics data.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Bare host, e.g. cnn.com."},"country":{"type":"string","description":"Lowercase ISO alpha-2 code or \"world\"."},"start_date":{"type":"string","description":"YYYY-MM."},"end_date":{"type":"string","description":"YYYY-MM."},"main_domain_only":{"type":"boolean"},"show_verified":{"type":"boolean"}},"required":["domain","country","start_date","end_date"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"simpliroute","displayName":"SimpliRoute","description":"Manage delivery operations: clients, vehicles, visits, routes, and optimization planning.","auth":{"kind":"api-key","hint":"SimpliRoute API key."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.getMe","description":"Get current account information.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"clients.list","description":"List all clients.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"clients.create","description":"Create one or more clients.","parameters":{"type":"object","properties":{"clients":{"type":"array","items":{"type":"object"}}},"required":["clients"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"clients.bulkDelete","description":"Bulk delete multiple clients.","parameters":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"integer"}}},"required":["ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"clientProperties.create","description":"Create a custom client property.","parameters":{"type":"object","properties":{"label":{"type":"string"},"type":{"type":"string","enum":["str","int","float","bool"]}},"required":["label","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"vehicles.list","description":"List all vehicles.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"vehicles.get","description":"Get a vehicle by ID.","parameters":{"type":"object","properties":{"vehicleId":{"type":"integer"}},"required":["vehicleId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"vehicles.create","description":"Create a vehicle.","parameters":{"type":"object","properties":{"capacity":{"type":"number"},"defaultDriver":{"type":["string","null"]},"skills":{"type":["array","null"],"items":{"type":"integer"}}},"required":["capacity"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"vehicles.delete","description":"Delete a vehicle.","parameters":{"type":"object","properties":{"vehicleId":{"type":"integer"}},"required":["vehicleId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"visits.list","description":"List all visits.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"visits.get","description":"Get a visit by ID.","parameters":{"type":"object","properties":{"visitId":{"type":"integer"}},"required":["visitId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"visits.getDetail","description":"Get detailed visit information.","parameters":{"type":"object","properties":{"visitId":{"type":"integer"}},"required":["visitId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"visits.create","description":"Create one or more visits.","parameters":{"type":"object","properties":{"visits":{"type":"array","items":{"type":"object"}}},"required":["visits"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"visits.update","description":"Update a visit.","parameters":{"type":"object","properties":{"visitId":{"type":"integer"},"fields":{"type":"object"}},"required":["visitId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"visits.updatePartial","description":"Partially update a visit.","parameters":{"type":"object","properties":{"visitId":{"type":"integer"},"fields":{"type":"object"}},"required":["visitId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"visits.delete","description":"Delete a visit.","parameters":{"type":"object","properties":{"visitId":{"type":"integer"}},"required":["visitId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"visits.addItems","description":"Add items to a visit.","parameters":{"type":"object","properties":{"visitId":{"type":"integer"},"items":{"type":"array","items":{"type":"object"}}},"required":["visitId","items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"routes.list","description":"List all routes.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"routes.get","description":"Get a route by ID.","parameters":{"type":"object","properties":{"routeId":{"type":"string"}},"required":["routeId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"routes.create","description":"Create a delivery route.","parameters":{"type":"object","properties":{"name":{"type":"string"},"plannedDate":{"type":"string"},"vehicle":{"type":"integer"},"driver":{"type":"integer"},"plan":{"type":"string"}},"required":["name","plannedDate","vehicle","driver","plan"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"routes.delete","description":"Delete a route.","parameters":{"type":"object","properties":{"routeId":{"type":"string"}},"required":["routeId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"plans.list","description":"List all delivery plans.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"plans.create","description":"Create a delivery plan.","parameters":{"type":"object","properties":{"name":{"type":"string"},"startDate":{"type":"string"},"endDate":{"type":"string"}},"required":["name","startDate","endDate"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"plans.getVehicles","description":"Get vehicles assigned to a plan.","parameters":{"type":"object","properties":{"planId":{"type":"string"}},"required":["planId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.list","description":"List all users.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.get","description":"Get a user by ID.","parameters":{"type":"object","properties":{"userId":{"type":"integer"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.create","description":"Create one or more users.","parameters":{"type":"object","properties":{"users":{"type":"array","items":{"type":"object"}}},"required":["users"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.update","description":"Update a user.","parameters":{"type":"object","properties":{"userId":{"type":"integer"},"fields":{"type":"object"}},"required":["userId","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"drivers.list","description":"List all drivers.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"fleets.list","description":"List all fleets.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"skills.list","description":"List all available skills.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tags.list","description":"List all available tags.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"zones.list","description":"List all zones.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"observations.list","description":"List observations.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sellers.list","description":"List all sellers.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"simplybookme","displayName":"SimplyBook.me","description":"Manage bookings, clients, and services in SimplyBook.me.","auth":{"kind":"api-key","hint":"SimplyBook.me company login, user login, and password"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"bookings.create","description":"Create a new booking.","parameters":{"type":"object","properties":{"clientName":{"type":"string"},"startDate":{"type":"string"},"startTime":{"type":"string"},"endDate":{"type":"string"},"endTime":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"comment":{"type":"string"}},"required":["clientName","startDate","startTime","endDate","endTime"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bookings.find","description":"Find bookings by criteria.","parameters":{"type":"object","properties":{"dateFrom":{"type":"string"},"dateTo":{"type":"string"},"code":{"type":"string"},"clientId":{"type":"integer"},"serviceId":{"type":"integer"},"providerId":{"type":"integer"},"status":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bookings.cancel","description":"Cancel an existing booking.","parameters":{"type":"object","properties":{"bookingId":{"type":"integer"}},"required":["bookingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"bookings.addComment","description":"Add a comment to a booking.","parameters":{"type":"object","properties":{"bookingId":{"type":"integer"},"comment":{"type":"string"}},"required":["bookingId","comment"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"clients.create","description":"Create a new client.","parameters":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"zip":{"type":"string"},"countryId":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"clients.find","description":"Find clients by search criteria.","parameters":{"type":"object","properties":{"search":{"type":"string"},"limit":{"type":"integer"},"page":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"clients.delete","description":"Delete a client.","parameters":{"type":"object","properties":{"clientId":{"type":"integer"}},"required":["clientId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"clients.update","description":"Update a client record.","parameters":{"type":"object","properties":{"clientId":{"type":"integer"},"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"zip":{"type":"string"},"countryId":{"type":"string"}},"required":["clientId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"services.list","description":"List bookable services.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"page":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"providers.list","description":"List service providers.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"page":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bookings.confirm","description":"Confirm a tentative booking.","parameters":{"type":"object","properties":{"bookingId":{"type":"integer"}},"required":["bookingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.find","description":"Find invoices by criteria.","parameters":{"type":"object","properties":{"datetimeFrom":{"type":"string"},"datetimeTo":{"type":"string"},"status":{"type":"string"},"limit":{"type":"integer"},"page":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"notes.create","description":"Create a note or block time.","parameters":{"type":"object","properties":{"startDateTime":{"type":"string"},"endDateTime":{"type":"string"},"note":{"type":"string"},"mode":{"type":"string"},"timeBlocked":{"type":"boolean"}},"required":["startDateTime","endDateTime","note"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"skyprep","displayName":"SkyPrep","description":"SkyPrep is a powerful Learning Management System (LMS) designed to help businesses and organizations deliver effective training and educational content to their employees and users.","auth":{"kind":"api-key","hint":"SkyPrep API key from your account settings."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.enroll.into.course","description":"Enroll a user into a course.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"The ID of the user to enroll"},"courseId":{"type":"string","description":"The ID of the course to enroll into"},"expirationDate":{"type":"string","description":"Optional enrollment expiration date"}},"required":["userId","courseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.enroll.into.group","description":"Enroll a user into a user group.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"The ID of the user to enroll"},"groupId":{"type":"string","description":"The ID of the user group to enroll into"},"expirationDate":{"type":"string","description":"Optional enrollment expiration date"}},"required":["userId","groupId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.update","description":"Update user profile information.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"The ID of the user to update"},"firstName":{"type":"string","description":"The first name of the user"},"lastName":{"type":"string","description":"The last name of the user"},"email":{"type":"string","description":"The email address of the user"},"role":{"type":"string","description":"The role of the user"},"title":{"type":"string","description":"The title/position of the user"},"cellPhone":{"type":"string","description":"The cell phone number of the user"},"workPhone":{"type":"string","description":"The work phone number of the user"},"address":{"type":"string","description":"The address of the user"},"cardNo":{"type":"string","description":"The unique user identifier (student #, badge #)"},"emailNotifications":{"type":"boolean","description":"Whether the user receives email notifications"},"smsNotifications":{"type":"boolean","description":"Whether the user receives SMS notifications"},"accessStartDate":{"type":"string","description":"The date when the user can start accessing content"},"accessEndDate":{"type":"string","description":"The date when the user can no longer access content"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"users.unenroll","description":"Unenroll a user from a course.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"The ID of the user to unenroll"},"courseId":{"type":"string","description":"The ID of the course to unenroll from"}},"required":["userId","courseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.create","description":"Create a user.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"The email address of the new user"},"firstName":{"type":"string","description":"The first name of the new user"},"lastName":{"type":"string","description":"The last name of the new user"},"role":{"type":"string","description":"The role of the new user"},"password":{"type":"string","description":"Optional initial password for the user"},"title":{"type":"string","description":"The title/position of the user"},"cellPhone":{"type":"string","description":"The cell phone number of the user"},"workPhone":{"type":"string","description":"The work phone number of the user"},"address":{"type":"string","description":"The address of the user"},"cardNo":{"type":"string","description":"The unique user identifier (student #, badge #)"}},"required":["email","firstName","lastName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.delete","description":"Delete a user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"The ID of the user to delete"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"groups.list","description":"List groups.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of groups to return"},"page":{"type":"integer","description":"Page number for paginated results"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"slack","displayName":"Slack","description":"Post messages from the agent into Slack, look up users by email, and list channels. Advisory surface — Slack posts are informational, not transactional.","auth":{"kind":"oauth2","authorizationUrl":"https://slack.com/oauth/v2/authorize","tokenUrl":"https://slack.com/api/oauth.v2.access","scopes":["chat:write","app_mentions:read","users:read","users:read.email","channels:read","reactions:write","files:read","files:write"],"clientIdEnv":"SLACK_OAUTH_CLIENT_ID","clientSecretEnv":"SLACK_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"advisory","capabilities":[{"name":"post_message","class":"mutation","description":"Post a message from the bot to a channel or user DM. Append-only — no CAS.","cas":"none","externalEffect":true,"requiredScopes":["chat:write"],"parameters":{"type":"object","properties":{"channel":{"type":"string","description":"Channel id (C…) or user id (U…) for DM."},"text":{"type":"string"},"blocks":{"type":"array","description":"Optional Slack Block Kit blocks."}},"required":["channel"]}},{"name":"post_in_thread","class":"mutation","description":"Post a message into an existing thread. Same as post_message but `thread_ts` is required so the message is threaded under the parent message rather than posted top-level.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["chat:write"],"parameters":{"type":"object","properties":{"channel":{"type":"string","description":"Channel id where the parent message lives."},"thread_ts":{"type":"string","description":"Parent message ts (e.g. \"1700000000.000200\")."},"text":{"type":"string"},"blocks":{"type":"array","description":"Optional Slack Block Kit blocks."}},"required":["channel","thread_ts"]}},{"name":"update_message","class":"mutation","description":"Edit a previously-posted message identified by (channel, ts). Provide `text` or `blocks`.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["chat:write"],"parameters":{"type":"object","properties":{"channel":{"type":"string"},"ts":{"type":"string","description":"ts of the message to update."},"text":{"type":"string"},"blocks":{"type":"array","description":"Optional Slack Block Kit blocks."}},"required":["channel","ts"]}},{"name":"delete_message","class":"mutation","description":"Delete a message identified by (channel, ts).","cas":"native-idempotency","externalEffect":true,"requiredScopes":["chat:write"],"parameters":{"type":"object","properties":{"channel":{"type":"string"},"ts":{"type":"string","description":"ts of the message to delete."}},"required":["channel","ts"]}},{"name":"add_reaction","class":"mutation","description":"Add an emoji reaction to a message. `name` is the emoji name without colons (e.g. \"thumbsup\").","cas":"native-idempotency","externalEffect":true,"requiredScopes":["reactions:write"],"parameters":{"type":"object","properties":{"channel":{"type":"string"},"timestamp":{"type":"string","description":"ts of the target message."},"name":{"type":"string","description":"Emoji name without surrounding colons."}},"required":["channel","timestamp","name"]}},{"name":"upload_file","class":"mutation","description":"Upload a file to one or more channels via Slack's v2 two-step external-upload flow (files.getUploadURLExternal → PUT to returned URL → files.completeUploadExternal). `content` is base64-encoded bytes.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["files:write"],"parameters":{"type":"object","properties":{"channels":{"type":"array","items":{"type":"string"},"description":"Channel ids to share the uploaded file into."},"filename":{"type":"string"},"content":{"type":"string","description":"Base64-encoded file bytes."},"title":{"type":"string"},"initial_comment":{"type":"string","description":"Optional message posted alongside the file."}},"required":["channels","filename","content"]}},{"name":"lookup_user","class":"read","description":"Look up a Slack workspace user by email.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]}},{"name":"list_channels","class":"read","description":"List channels visible to the bot. `types` defaults to public_channel,private_channel.","parameters":{"type":"object","properties":{"types":{"type":"string","description":"Comma-separated channel types."},"limit":{"type":"integer","minimum":1,"maximum":1000,"default":200}}}},{"name":"download_file","class":"read","description":"Download a Slack file by id. Returns up to 4 MiB of bytes as base64 so callers never have to handle Slack private URLs or bot tokens.","requiredScopes":["files:read"],"parameters":{"type":"object","properties":{"file_id":{"type":"string","description":"Slack file id (F…).","maxLength":300}},"required":["file_id"]}}]},{"kind":"smartlead","displayName":"SmartLead","description":"Manage cold email campaigns with multi-account rotation, email warmup, and advanced analytics.","auth":{"kind":"api-key","hint":"SmartLead API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"campaigns.create","description":"Create a new cold email campaign.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Campaign name"},"campaign_id":{"type":"number","description":"Campaign ID"},"client_id":{"type":"number","description":"Client ID for agency accounts (optional)"},"track_open":{"type":"boolean","description":"Enable email open tracking"},"track_click":{"type":"boolean","description":"Enable link click tracking"},"send_as_plain_text":{"type":"boolean","description":"Send as plain text for better deliverability"},"enable_ai_esp_matching":{"type":"boolean","description":"Use AI to match leads with email accounts"},"follow_up_percentage":{"type":"number","description":"Percentage of leads to follow up (0-100)"},"unsubscribe_text":{"type":"string","description":"Custom unsubscribe text"}},"required":["name","campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.add","description":"Add leads to a campaign.","parameters":{"type":"object","properties":{"campaign_id":{"type":"number","description":"Campaign ID to add leads to"},"lead_list":{"type":"array","description":"Array of lead objects with email and other fields"},"ignore_global_block_list":{"type":"boolean","description":"Skip global block list validation"},"ignore_unsubscribe_list":{"type":"boolean","description":"Include previously unsubscribed leads"},"ignore_duplicate_leads_in_other_campaign":{"type":"boolean","description":"Allow same lead in multiple campaigns"},"ignore_community_bounce_list":{"type":"boolean","description":"Skip community bounce list check"}},"required":["campaign_id","lead_list"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"campaigns.statistics","description":"Get campaign statistics and performance metrics.","parameters":{"type":"object","properties":{"campaign_id":{"type":"number","description":"Campaign ID"}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.update","description":"Update campaign settings.","parameters":{"type":"object","properties":{"campaign_id":{"type":"number","description":"Campaign ID"},"track_open":{"type":"boolean","description":"Enable email open tracking"},"track_click":{"type":"boolean","description":"Enable link click tracking"},"stop_lead_settings":{"type":"string","description":"When to stop emailing a lead"},"unsubscribe_text":{"type":"string","description":"Custom unsubscribe text"},"enable_ai_esp_matching":{"type":"boolean","description":"Use AI to match leads with email accounts"},"send_as_plain_text":{"type":"boolean","description":"Send as plain text"},"follow_up_percentage":{"type":"number","description":"Follow up percentage (0-100)"}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"etag-if-match","externalEffect":true},{"name":"campaigns.start","description":"Start (or resume) a campaign.","parameters":{"type":"object","properties":{"campaign_id":{"type":"number","description":"Campaign ID"}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.pause","description":"Pause a campaign.","parameters":{"type":"object","properties":{"campaign_id":{"type":"number","description":"Campaign ID"}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.delete","description":"Delete a campaign.","parameters":{"type":"object","properties":{"campaign_id":{"type":"number","description":"Campaign ID"}},"required":["campaign_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update","description":"Update fields on a lead.","parameters":{"type":"object","properties":{"lead_id":{"type":"number","description":"Lead ID"},"first_name":{"type":"string","description":"Lead first name"},"last_name":{"type":"string","description":"Lead last name"},"email":{"type":"string","description":"Lead email address"},"phone_number":{"type":"string","description":"Lead phone number"},"company_name":{"type":"string","description":"Lead company name"},"website":{"type":"string","description":"Lead website"},"location":{"type":"string","description":"Lead location"},"custom_fields":{"type":"object","description":"Custom field key/value pairs"}},"required":["lead_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.remove","description":"Remove a lead from a campaign.","parameters":{"type":"object","properties":{"campaign_id":{"type":"number","description":"Campaign ID"},"lead_id":{"type":"number","description":"Lead ID"}},"required":["campaign_id","lead_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"smartsheet","displayName":"Smartsheet","description":"Manage Smartsheet sheets and rows: find sheets/rows, add/update rows, attach files.","auth":{"kind":"api-key","hint":"Smartsheet API token."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"sheets.search","description":"Find a sheet by name.","parameters":{"type":"object","properties":{"sheetName":{"type":"string"}},"required":["sheetName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rows.search","description":"Find rows by query in a sheet.","parameters":{"type":"object","properties":{"sheetId":{"type":"string"},"query":{"type":"string"}},"required":["sheetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rows.create","description":"Add a row to a sheet.","parameters":{"type":"object","properties":{"sheetId":{"type":"string"},"cells":{"type":"array"},"position":{"type":"string"}},"required":["sheetId","cells"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rows.update","description":"Update a row in a sheet.","parameters":{"type":"object","properties":{"sheetId":{"type":"string"},"rowId":{"type":"string"},"cells":{"type":"array"}},"required":["sheetId","rowId","cells"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"attachments.create","description":"Attach a file to a row.","parameters":{"type":"object","properties":{"sheetId":{"type":"string"},"rowId":{"type":"string"},"fileUrl":{"type":"string"},"fileName":{"type":"string"}},"required":["sheetId","rowId","fileUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"attachments.search","description":"Find attachments on a row.","parameters":{"type":"object","properties":{"sheetId":{"type":"string"},"rowId":{"type":"string"}},"required":["sheetId","rowId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"sheets.create","description":"Create a new sheet.","parameters":{"type":"object","properties":{"name":{"type":"string"},"columns":{"type":"array"}},"required":["name","columns"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rows.delete","description":"Delete rows by ID.","parameters":{"type":"object","properties":{"sheetId":{"type":"string"},"ids":{"type":"string","description":"Comma-separated row IDs"}},"required":["sheetId","ids"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"attachments.delete","description":"Delete an attachment.","parameters":{"type":"object","properties":{"sheetId":{"type":"string"},"attachmentId":{"type":"string"}},"required":["sheetId","attachmentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"shares.create","description":"Share a sheet with a user or group.","parameters":{"type":"object","properties":{"sheetId":{"type":"string"},"email":{"type":"string"},"accessLevel":{"type":"string","description":"VIEWER, EDITOR, EDITOR_SHARE, ADMIN, OWNER"}},"required":["sheetId","email","accessLevel"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Add a comment to a row or sheet (via a discussion).","parameters":{"type":"object","properties":{"sheetId":{"type":"string"},"rowId":{"type":"string"},"text":{"type":"string"}},"required":["sheetId","rowId","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"smartsuite","displayName":"SmartSuite","description":"Collaborative work management platform combining databases with spreadsheets.","auth":{"kind":"api-key","hint":"SmartSuite API key and Account ID."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.find","description":"Find records matching search criteria.","parameters":{"type":"object","properties":{"table":{"type":"string"},"searchField":{"type":"string"},"searchValue":{"type":"string"},"limit":{"type":"integer"}},"required":["table","searchField","searchValue"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.get","description":"Get a specific record by ID.","parameters":{"type":"object","properties":{"table":{"type":"string"},"recordId":{"type":"string"}},"required":["table","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.create","description":"Create a new record.","parameters":{"type":"object","properties":{"table":{"type":"string"},"data":{"type":"object"}},"required":["table","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Update an existing record.","parameters":{"type":"object","properties":{"table":{"type":"string"},"recordId":{"type":"string"},"data":{"type":"object"}},"required":["table","recordId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.delete","description":"Delete a record.","parameters":{"type":"object","properties":{"table":{"type":"string"},"recordId":{"type":"string"}},"required":["table","recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.upload","description":"Upload a file.","parameters":{"type":"object","properties":{"table":{"type":"string"},"recordId":{"type":"string"},"field":{"type":"string"},"file":{"type":"string"}},"required":["table","recordId","field","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tables.list","description":"List tables in the workspace/solution.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"fields.list","description":"List fields on a table.","parameters":{"type":"object","properties":{"table":{"type":"string"}},"required":["table"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.bulk-create","description":"Bulk-create multiple records in a table.","parameters":{"type":"object","properties":{"table":{"type":"string"},"items":{"type":"array","description":"Array of record objects to create"}},"required":["table","items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Add a comment to a record.","parameters":{"type":"object","properties":{"table":{"type":"string"},"recordId":{"type":"string"},"message":{"type":"string"}},"required":["table","recordId","message"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"smoove","displayName":"Smoove","description":"Manage email lists and subscribers in Smoove.","auth":{"kind":"api-key","hint":"Smoove API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"lists.get","description":"Retrieve all email lists.","parameters":{"type":"object","properties":{"skip":{"type":"integer","description":"Number of records to skip"},"take":{"type":"integer","description":"Maximum number of records to return"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.add","description":"Add or update a subscriber in a list.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the subscriber"},"firstName":{"type":"string","description":"First name of the subscriber"},"lastName":{"type":"string","description":"Last name of the subscriber"},"phone":{"type":"string","description":"Phone number of the subscriber"},"company":{"type":"string","description":"Company name"},"customFields":{"type":"object","description":"Custom fields data"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.find","description":"Search for a subscriber by email or ID.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address to search"},"id":{"type":"string","description":"Contact ID to search"},"skip":{"type":"integer","description":"Number of records to skip"},"take":{"type":"integer","description":"Maximum number of records to return"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.unsubscribe","description":"Unsubscribe a contact from a list.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Contact ID to unsubscribe"},"reason":{"type":"string","description":"Reason for unsubscribing"}},"required":["id","reason"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.create","description":"Create a new email list.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Name of the list"},"publicName":{"type":"string","description":"Public-facing name of the list"},"publicDescription":{"type":"string","description":"Public description of the list"},"isPublic":{"type":"boolean","description":"Make this list publicly visible"},"allowsUsersToSubscribe":{"type":"boolean","description":"Allow users to subscribe themselves"},"allowsUsersToUnsubscribe":{"type":"boolean","description":"Allow users to unsubscribe themselves"}},"required":["name","isPublic","allowsUsersToSubscribe","allowsUsersToUnsubscribe"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.update","description":"Update subscriber fields.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Contact ID"},"data":{"type":"object","description":"Subscriber fields to update"}},"required":["id","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.delete","description":"Delete a subscriber.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Contact ID to delete"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.delete","description":"Delete a list.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"List ID to delete"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.send","description":"Send or trigger a campaign.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Campaign ID to send"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"smsmode","displayName":"SMS Mode","description":"Send and manage SMS messages through the SMS Mode messaging platform.","auth":{"kind":"api-key","hint":"SMS Mode API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"messages.send","description":"Send an SMS message to a recipient.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Recipient phone number"},"text":{"type":"string","description":"Message content"}},"required":["to","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"snov-io","displayName":"Snov.io","description":"Find and verify B2B email addresses by domain or by name, and enrich profiles from an email address.","auth":{"kind":"api-key","hint":"Exchange your API User ID and Secret (account Settings -> API) for an access token via POST /v1/oauth/access_token, then paste the access token here. Sent as the Authorization: Bearer header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"domain_search.start","description":"Start an asynchronous search for email addresses belonging to a company domain. Returns a task to poll for results.","parameters":{"type":"object","properties":{"domain":{"type":"string","description":"Company domain to search."}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"email_finder.start","description":"Start finding email addresses for one or more people by first name, last name, and company domain. Returns a task to poll; consumes credits when emails are found.","parameters":{"type":"object","properties":{"rows":{"type":"array","description":"Array of objects each with first_name, last_name, and domain.","items":{"type":"object"}}},"required":["rows"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"email_verification.start","description":"Start verification of up to 10 email addresses. Returns a task to poll for deliverability results. Consumes credits.","parameters":{"type":"object","properties":{"emails":{"type":"array","description":"Array of email addresses to verify (max 10).","items":{"type":"string"}}},"required":["emails"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"profile.get_by_email","description":"Enrich a social/professional profile from an email address. Consumes a credit.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"domain_emails_count.get","description":"Get the count of email addresses available for a domain (free, does not consume credits).","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"snowflake","displayName":"Snowflake","description":"Execute and monitor SQL statements through a connected Snowflake account SQL API.","auth":{"kind":"oauth2","authorizationUrl":"{accountUrl}/oauth/authorize","tokenUrl":"{accountUrl}/oauth/token-request","scopes":["refresh_token"],"clientIdEnv":"SNOWFLAKE_OAUTH_CLIENT_ID","clientSecretEnv":"SNOWFLAKE_OAUTH_CLIENT_SECRET","tokenClientAuthMethod":"client_secret_post","pkce":"supported","urlTemplateMetadata":{"accountUrl":{"kind":"base-url","allowedBaseUrlSuffixes":[".snowflakecomputing.com"]}}},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"queries.run","description":"Execute one SQL statement. Every statement requires approval because Snowflake SQL can mutate account data and configuration.","parameters":{"type":"object","properties":{"statement":{"type":"string","description":"One Snowflake SQL statement."},"timeout":{"type":"integer","minimum":1,"description":"Maximum execution time in seconds."},"database":{"type":"string"},"schema":{"type":"string"},"warehouse":{"type":"string"},"role":{"type":"string"},"bindings":{"type":"object","description":"Snowflake SQL API bind variables keyed by one-based position."},"async":{"type":"boolean","description":"Return a statement handle without waiting for completion."}},"required":["statement"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"queries.runMultiple","description":"Execute a semicolon-delimited SQL string as multiple statements. Snowflake does not support bind variables for this operation.","parameters":{"type":"object","properties":{"statement":{"type":"string","description":"Semicolon-delimited Snowflake SQL statements."},"multiStatementCount":{"type":"string","pattern":"^[1-9][0-9]*$","description":"Number of statements in the SQL string."},"timeout":{"type":"integer","minimum":1},"database":{"type":"string"},"schema":{"type":"string"},"warehouse":{"type":"string"},"role":{"type":"string"},"async":{"type":"boolean"}},"required":["statement","multiStatementCount"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"statements.get","description":"Check a statement and retrieve one result partition.","parameters":{"type":"object","properties":{"statementHandle":{"type":"string"},"partition":{"type":"integer","minimum":0}},"required":["statementHandle"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"statements.cancel","description":"Cancel a running SQL statement by its Snowflake handle.","parameters":{"type":"object","properties":{"statementHandle":{"type":"string"}},"required":["statementHandle"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"socialkit","displayName":"Socialkit","description":"Fetch YouTube video details, transcripts, summaries, and comments.","auth":{"kind":"api-key","hint":"Socialkit API key."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"youtube.details","description":"Get YouTube video details including title, description, duration, and metadata.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"YouTube video URL"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"youtube.transcript","description":"Get the transcript of a YouTube video.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"YouTube video URL"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"youtube.summary","description":"Get an AI-generated summary of a YouTube video.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"YouTube video URL"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"youtube.comments","description":"Fetch comments from a YouTube video with optional filtering and sorting.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"YouTube video URL"},"limit":{"type":"integer","description":"Number of comments to retrieve (max 100, default 10)"},"sortBy":{"type":"string","description":"Sort order: relevance or time"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"square","displayName":"Square","description":"Query customers, payments, and invoices. Create or update Square objects.","auth":{"kind":"oauth2","authorizationUrl":"https://connect.squareup.com/oauth2/authorize","tokenUrl":"https://connect.squareup.com/oauth2/token","scopes":["CUSTOMERS_READ","CUSTOMERS_WRITE","PAYMENTS_READ","PAYMENTS_WRITE","INVOICES_READ","INVOICES_WRITE","ITEMS_WRITE"],"clientIdEnv":"SQUARE_OAUTH_CLIENT_ID","clientSecretEnv":"SQUARE_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"customers.list","description":"List customers.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"cursor":{"type":"string"}},"required":[]},"requiredScopes":["CUSTOMERS_READ"],"class":"read"},{"name":"customers.get","description":"Retrieve a customer by ID.","parameters":{"type":"object","properties":{"customerId":{"type":"string"}},"required":["customerId"]},"requiredScopes":["CUSTOMERS_READ"],"class":"read"},{"name":"customers.create","description":"Create a new customer.","parameters":{"type":"object","properties":{"givenName":{"type":"string"},"familyName":{"type":"string"},"emailAddress":{"type":"string"},"phoneNumber":{"type":"string"}},"required":["givenName"]},"requiredScopes":["CUSTOMERS_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.update","description":"Update a customer.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"givenName":{"type":"string"},"familyName":{"type":"string"},"emailAddress":{"type":"string"}},"required":["customerId"]},"requiredScopes":["CUSTOMERS_WRITE"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"payments.list","description":"List payments.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"cursor":{"type":"string"},"beginTime":{"type":"string"},"endTime":{"type":"string"}},"required":[]},"requiredScopes":["PAYMENTS_READ"],"class":"read"},{"name":"payments.get","description":"Retrieve a payment by ID.","parameters":{"type":"object","properties":{"paymentId":{"type":"string"}},"required":["paymentId"]},"requiredScopes":["PAYMENTS_READ"],"class":"read"},{"name":"invoices.list","description":"List invoices.","parameters":{"type":"object","properties":{"limit":{"type":"integer"},"cursor":{"type":"string"}},"required":[]},"requiredScopes":["INVOICES_READ"],"class":"read"},{"name":"invoices.get","description":"Retrieve an invoice by ID.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"}},"required":["invoiceId"]},"requiredScopes":["INVOICES_READ"],"class":"read"},{"name":"invoices.create","description":"Create an invoice.","parameters":{"type":"object","properties":{"invoice":{"type":"object"}},"required":["invoice"]},"requiredScopes":["INVOICES_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.update","description":"Update an invoice.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"},"invoice":{"type":"object"}},"required":["invoiceId","invoice"]},"requiredScopes":["INVOICES_WRITE"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"customers.delete","description":"Delete a customer.","parameters":{"type":"object","properties":{"customerId":{"type":"string"}},"required":["customerId"]},"requiredScopes":["CUSTOMERS_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.delete","description":"Delete or cancel an invoice. Square requires the current invoice version to delete drafts.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"},"version":{"type":"integer"}},"required":["invoiceId"]},"requiredScopes":["INVOICES_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.publish","description":"Publish (send) an invoice.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"},"version":{"type":"integer","description":"Current invoice version (required by Square)."},"idempotency_key":{"type":"string"}},"required":["invoiceId","version"]},"requiredScopes":["INVOICES_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payments.refund","description":"Refund a payment.","parameters":{"type":"object","properties":{"idempotency_key":{"type":"string"},"payment_id":{"type":"string"},"amount_money":{"type":"object","description":"Square money object: { amount: number, currency: string }."},"reason":{"type":"string"}},"required":["idempotency_key","payment_id","amount_money"]},"requiredScopes":["PAYMENTS_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"catalog.upsertItem","description":"Upsert a catalog item or product.","parameters":{"type":"object","properties":{"idempotency_key":{"type":"string"},"object":{"type":"object","description":"Square CatalogObject envelope. Use a negative id (e.g. \"#item\") to create."}},"required":["idempotency_key","object"]},"requiredScopes":["ITEMS_WRITE"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"stripe","displayName":"Stripe","description":"Manage Stripe customers, invoices, subscriptions, and payments.","auth":{"kind":"api-key","hint":"Stripe Secret API Key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"customers.create","description":"Create a new Stripe customer.","parameters":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"phone":{"type":"string"},"metadata":{"type":"object"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.retrieve","description":"Retrieve a Stripe customer by ID.","parameters":{"type":"object","properties":{"customerId":{"type":"string"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.search","description":"Search Stripe customers.","parameters":{"type":"object","properties":{"query":{"type":"string"},"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.update","description":"Update a Stripe customer.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"phone":{"type":"string"},"metadata":{"type":"object"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"invoices.create","description":"Create a Stripe invoice.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"description":{"type":"string"},"currency":{"type":"string"},"metadata":{"type":"object"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.retrieve","description":"Retrieve a Stripe invoice by ID.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"invoices.find","description":"Find Stripe invoices.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.create","description":"Create a Stripe subscription.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"items":{"type":"object"},"trialPeriodDays":{"type":"integer"},"defaultPaymentMethod":{"type":"string"},"metadata":{"type":"object"}},"required":["customerId","items"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.retrieve","description":"Retrieve a Stripe subscription by ID.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.search","description":"Search Stripe subscriptions.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"status":{"type":"string"},"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.cancel","description":"Cancel a Stripe subscription.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string"},"cancelAtPeriodEnd":{"type":"boolean"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"payment-intents.create","description":"Create a Stripe payment intent.","parameters":{"type":"object","properties":{"amount":{"type":"integer"},"currency":{"type":"string"},"customerId":{"type":"string"},"paymentMethod":{"type":"string"},"confirm":{"type":"boolean"},"returnUrl":{"type":"string"},"metadata":{"type":"object"}},"required":["amount","currency"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payment-intents.retrieve","description":"Retrieve a Stripe payment intent by ID.","parameters":{"type":"object","properties":{"paymentIntentId":{"type":"string"}},"required":["paymentIntentId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.create","description":"Create a Stripe product.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"active":{"type":"boolean"},"metadata":{"type":"object"},"url":{"type":"string"},"images":{"type":"array"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"prices.create","description":"Create a Stripe price.","parameters":{"type":"object","properties":{"productId":{"type":"string"},"unitAmount":{"type":"integer"},"currency":{"type":"string"},"recurring":{"type":"object"},"metadata":{"type":"object"}},"required":["productId","currency"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"refunds.create","description":"Create a Stripe refund.","parameters":{"type":"object","properties":{"chargeId":{"type":"string"},"amount":{"type":"integer"},"reason":{"type":"string"},"metadata":{"type":"object"}},"required":["chargeId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payment-links.create","description":"Create a Stripe payment link.","parameters":{"type":"object","properties":{"lineItems":{"type":"array"},"afterCompletionType":{"type":"string"},"afterCompletionRedirectUrl":{"type":"string"},"allowPromotionCodes":{"type":"boolean"},"billingAddressCollection":{"type":"string"},"metadata":{"type":"object"}},"required":["lineItems"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payment-links.deactivate","description":"Deactivate a Stripe payment link.","parameters":{"type":"object","properties":{"paymentLinkId":{"type":"string"}},"required":["paymentLinkId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"customers.delete","description":"Delete a Stripe customer.","parameters":{"type":"object","properties":{"customerId":{"type":"string"}},"required":["customerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.send","description":"Finalize and send a Stripe invoice to the customer.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.void","description":"Void a finalized Stripe invoice.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.update","description":"Update a Stripe product.","parameters":{"type":"object","properties":{"productId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"active":{"type":"boolean"},"metadata":{"type":"object"},"url":{"type":"string"},"images":{"type":"array"}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"charges.capture","description":"Capture a previously-authorized Stripe charge.","parameters":{"type":"object","properties":{"chargeId":{"type":"string"},"amount":{"type":"integer"},"receiptEmail":{"type":"string"},"statementDescriptor":{"type":"string"}},"required":["chargeId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.subscribe","description":"Create a Stripe webhook endpoint subscribed to one or more event types. Stripe pushes signed events at the supplied url; the returned secret is what the receiver verifies signatures against.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Destination URL Stripe should POST events to."},"enabled_events":{"type":"array","items":{"type":"string"},"description":"List of Stripe event types (or [\"*\"]) to subscribe to."},"description":{"type":"string"},"api_version":{"type":"string"},"connect":{"type":"boolean"},"metadata":{"type":"object"}},"required":["url","enabled_events"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"events.list","description":"List recently delivered Stripe events. Supports filtering by event type, created timestamp range, and cursor pagination via starting_after / ending_before.","parameters":{"type":"object","properties":{"type":{"type":"string","description":"Stripe event type to filter by (e.g. \"invoice.payment_failed\")."},"deliverySuccess":{"type":"boolean"},"createdGte":{"type":"integer","description":"Unix timestamp lower bound (inclusive)."},"createdLte":{"type":"integer","description":"Unix timestamp upper bound (inclusive)."},"startingAfter":{"type":"string"},"endingBefore":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"stripe-pack","displayName":"Stripe (customers, invoices, checkout, subscriptions)","description":"Look up Stripe customers, draft invoices, spin up hosted Checkout sessions, manage subscriptions, and hand off to the customer billing portal — all from one Stripe restricted key. Idempotency-Key forwarded on every mutation.","auth":{"kind":"api-key","hint":"Paste a Stripe restricted key (rk_live_…) with read on customers + subscriptions and write on invoices + checkout + subscriptions + billing portal."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"find_customer","class":"read","description":"Search Stripe customers by email. Returns the first match or {found:false}.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]}},{"name":"list_subscriptions","class":"read","description":"List a customer's subscriptions. Optionally filter by status ('active', 'past_due', 'canceled', 'all').","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"status":{"type":"string","enum":["active","past_due","unpaid","canceled","incomplete","trialing","all"],"default":"all"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["customerId"]}},{"name":"create_invoice","class":"mutation","description":"Draft + finalize a Stripe invoice for a customer with line items. Idempotency-Key guarantees at-most-once.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"customerId":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string"},"amount":{"type":"integer","description":"Amount in the smallest currency unit (cents)."},"currency":{"type":"string","description":"3-letter ISO currency code, lowercase."},"quantity":{"type":"integer","minimum":1,"default":1}},"required":["amount","currency"]}},"autoFinalize":{"type":"boolean","default":true}},"required":["customerId","items"]}},{"name":"create_checkout_session","class":"mutation","description":"Create a Stripe Checkout session and return its hosted URL. Idempotency-Key guarantees at-most-once.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"customerId":{"type":"string"},"mode":{"type":"string","enum":["payment","subscription"],"default":"payment"},"successUrl":{"type":"string"},"cancelUrl":{"type":"string"},"lineItems":{"type":"array","items":{"type":"object","properties":{"price":{"type":"string","description":"Stripe price id (price_...)"},"quantity":{"type":"integer","minimum":1,"default":1}},"required":["price"]}}},"required":["successUrl","cancelUrl","lineItems"]}},{"name":"cancel_subscription","class":"mutation","description":"Cancel a subscription. Default cancels immediately; pass atPeriodEnd=true to schedule cancellation for the end of the current billing period.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"subscriptionId":{"type":"string"},"atPeriodEnd":{"type":"boolean","default":false}},"required":["subscriptionId"]}},{"name":"create_billing_portal_session","class":"mutation","description":"Create a Stripe billing portal session and return its URL. Hand-off for the customer to self-serve cancel/upgrade/update-card.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"customerId":{"type":"string"},"returnUrl":{"type":"string"}},"required":["customerId","returnUrl"]}},{"name":"create_payment_intent","class":"mutation","description":"Create a Stripe PaymentIntent to collect a one-off payment. `amount` is in the smallest currency unit (cents). Returns the client_secret for confirmation on the frontend. Idempotency-Key guarantees at-most-once.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"amount":{"type":"integer","description":"Amount in the smallest currency unit (cents)."},"currency":{"type":"string","description":"3-letter ISO currency code, lowercase."},"customer":{"type":"string","description":"Optional Stripe customer id (cus_...)."},"automatic_payment_methods":{"type":"object","description":"When { enabled: true }, Stripe automatically derives eligible payment methods from the connected account's dashboard config.","properties":{"enabled":{"type":"boolean"}}},"description":{"type":"string"},"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Arbitrary string key/value pairs attached to the PaymentIntent."}},"required":["amount","currency"]}},{"name":"create_refund","class":"mutation","description":"Refund a Stripe charge or PaymentIntent. Provide either `payment_intent` OR `charge` (Stripe rejects both). `amount` is optional — when omitted Stripe refunds the full remaining amount. Idempotency-Key guarantees at-most-once.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"payment_intent":{"type":"string","description":"PaymentIntent id (pi_...) to refund."},"charge":{"type":"string","description":"Charge id (ch_...) to refund."},"amount":{"type":"integer","description":"Optional partial refund amount in the smallest currency unit (cents). Omit for full refund."},"reason":{"type":"string","enum":["duplicate","fraudulent","requested_by_customer"],"description":"Stripe-canonical refund reason."}}}},{"name":"create_customer","class":"mutation","description":"Create a Stripe customer record. All fields are optional, but at least one of email / name is recommended for human-readable dashboards. Idempotency-Key guarantees at-most-once.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"},"phone":{"type":"string"},"description":{"type":"string"},"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Arbitrary string key/value pairs attached to the customer."}}}}]},{"kind":"supabase","displayName":"Supabase","description":"Inspect Supabase projects, run SQL against the Postgres database, and manage secrets via the Management API.","auth":{"kind":"api-key","hint":"Supabase Management API personal access token (Dashboard > Account > Access Tokens). Sent as an Authorization: Bearer token."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"organizations.list","description":"List Supabase organizations available to the personal access token.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.list","description":"List Supabase projects available to the personal access token.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.get","description":"Read a Supabase project by its reference id.","parameters":{"type":"object","properties":{"ref":{"type":"string","description":"Project ref (e.g. abcdefghijklmnop)."}},"required":["ref"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"database.query","description":"Run SQL against the project Postgres database. This requires normal write approval because a Management API personal access token does not distinguish read-only SQL from writes.","parameters":{"type":"object","properties":{"ref":{"type":"string"},"query":{"type":"string","description":"SQL statement."}},"required":["ref","query"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"database.execute","description":"Execute a mutating SQL statement (INSERT/UPDATE/DELETE/DDL) against the project Postgres database.","parameters":{"type":"object","properties":{"ref":{"type":"string"},"query":{"type":"string"}},"required":["ref","query"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.create","description":"Provision a new Supabase project under an organization.","parameters":{"type":"object","properties":{"organization_id":{"type":"string"},"name":{"type":"string"},"region":{"type":"string","description":"AWS region slug, e.g. us-east-1."},"db_pass":{"type":"string","description":"Initial Postgres superuser password."},"plan":{"type":"string","enum":["free","pro"]}},"required":["organization_id","name","region","db_pass"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"secrets.list","description":"List project edge-function secrets (names only; values are write-only).","parameters":{"type":"object","properties":{"ref":{"type":"string"}},"required":["ref"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"secrets.upsert","description":"Create or update project edge-function secrets in bulk.","parameters":{"type":"object","properties":{"ref":{"type":"string"},"secrets":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}},"required":["name","value"]}}},"required":["ref","secrets"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.delete","description":"Delete a Supabase project. Permanently removes the project and all data.","parameters":{"type":"object","properties":{"ref":{"type":"string"}},"required":["ref"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"branches.create","description":"Create a preview branch on a Supabase project. Pass git_branch and region as optional fields when needed.","parameters":{"type":"object","properties":{"ref":{"type":"string"},"branch_name":{"type":"string"},"git_branch":{"type":"string","description":"Optional git branch to link."},"region":{"type":"string"}},"required":["ref","branch_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"branches.delete","description":"Delete a preview branch.","parameters":{"type":"object","properties":{"branch_id":{"type":"string"}},"required":["branch_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"secrets.delete","description":"Delete a project edge-function secret by name. Note: the Supabase Management API also accepts a JSON-array body for bulk deletes; this capability deletes a single named secret per call via query parameter.","parameters":{"type":"object","properties":{"ref":{"type":"string"},"name":{"type":"string","description":"Secret name to delete."}},"required":["ref","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"storage.upload","description":"Upload an object to a Supabase storage bucket. The body is the object payload; storage uses a separate hostname per project so callers must override metadata.baseUrl for storage calls.","parameters":{"type":"object","properties":{"ref":{"type":"string"},"bucket":{"type":"string"},"path":{"type":"string","description":"Object path inside the bucket."},"content":{"type":"string","description":"Object content (raw or base64)."}},"required":["ref","bucket","path","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"supadata","displayName":"Supadata","description":"Extract transcripts from YouTube videos.","auth":{"kind":"api-key","hint":"Supadata API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"transcript.get","description":"Get transcript from a YouTube video.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"YouTube video URL"},"lang":{"type":"string","description":"Preferred language of the transcript"},"text":{"type":"boolean","description":"Merge transcript into a single text instead of timestamped chunks"}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"swarmnode","displayName":"SwarmNode","description":"Execute agents and retrieve execution results from SwarmNode distributed agent infrastructure.","auth":{"kind":"api-key","hint":"SwarmNode API key for agent execution."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"execution.get","description":"Get the execution status and results of an agent job.","parameters":{"type":"object","properties":{"jobId":{"type":"string","description":"Agent Executor Job ID"}},"required":["jobId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"agent.execute","description":"Execute an agent with the provided input payload.","parameters":{"type":"object","properties":{"payload":{"type":"object","description":"Agent Input Payload"}},"required":["payload"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"systeme-io","displayName":"Systeme.io","description":"Create and manage contacts, tags, and sales in Systeme.io CRM platform.","auth":{"kind":"api-key","hint":"Systeme.io API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.create","description":"Create a new contact in Systeme.io.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Contact email address"},"name":{"type":"string","description":"Contact name"},"locale":{"type":"string","description":"Contact preferred language"},"fields":{"type":"object","description":"Custom contact fields"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update an existing contact in Systeme.io.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact ID"},"email":{"type":"string","description":"Contact email address"},"name":{"type":"string","description":"Contact name"},"fields":{"type":"object","description":"Custom contact fields"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.findByEmail","description":"Find a contact by email address.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Contact email to search"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tags.addToContact","description":"Add a tag to a contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact ID"},"tagId":{"type":"string","description":"Tag ID"}},"required":["contactId","tagId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.removeFromContact","description":"Remove a tag from a contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact ID"},"tagId":{"type":"string","description":"Tag ID"}},"required":["contactId","tagId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.delete","description":"Delete a contact from Systeme.io.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact ID"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.create","description":"Create a new tag in Systeme.io.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Tag name"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.delete","description":"Delete a tag from Systeme.io.","parameters":{"type":"object","properties":{"tagId":{"type":"string","description":"Tag ID"}},"required":["tagId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.list","description":"List automation campaigns.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Page size"},"startingAfter":{"type":"string","description":"Pagination cursor"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.subscribe","description":"Subscribe a contact to an automation campaign.","parameters":{"type":"object","properties":{"campaignId":{"type":"string","description":"Campaign ID"},"contactId":{"type":"string","description":"Contact ID"}},"required":["campaignId","contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"tableau","displayName":"Tableau","description":"Business intelligence and analytics platform for data visualization.","auth":{"kind":"api-key","hint":"Tableau Server or Cloud API credentials (personal access token or username/password)."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"views.download","description":"Download a Tableau view in the specified format (image or PDF).","parameters":{"type":"object","properties":{"viewId":{"type":"string","description":"The ID of the view to download"},"format":{"type":"string","enum":["png","pdf","jpg"],"description":"Download format"},"maxAge":{"type":"number","description":"Maximum age of cached data in minutes"},"vizWidth":{"type":"number","description":"Width of the visualization in pixels"},"vizHeight":{"type":"number","description":"Height of the visualization in pixels"}},"required":["viewId","format"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"views.find","description":"Find a Tableau view by name within a workbook.","parameters":{"type":"object","properties":{"viewName":{"type":"string","description":"The URL name of the view"},"workbookId":{"type":"string","description":"The ID of the workbook"}},"required":["viewName","workbookId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workbooks.find","description":"Find a Tableau workbook by content URL or ID.","parameters":{"type":"object","properties":{"searchType":{"type":"string","enum":["workbookId","contentUrl"],"description":"Search by workbook ID or content URL"},"workbookId":{"type":"string","description":"The ID of the workbook"},"contentUrl":{"type":"string","description":"The content URL of the workbook"}},"required":["searchType"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workbooks.refresh","description":"Refresh all extracts in a workbook.","parameters":{"type":"object","properties":{"workbookId":{"type":"string","description":"The ID of the workbook to refresh"}},"required":["workbookId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"extracts.refresh","description":"Run an extract refresh task.","parameters":{"type":"object","properties":{"taskId":{"type":"string","description":"The ID of the extract refresh task"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"datasources.query","description":"List datasources in a site.","parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"The site ID (optional, uses default if not provided)"},"limit":{"type":"number","description":"Maximum number of results"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"workbooks.delete","description":"Delete a workbook by ID.","parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"The site ID"},"workbookId":{"type":"string","description":"The ID of the workbook to delete"}},"required":["siteId","workbookId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.create","description":"Create a subscription to a view or workbook.","parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"The site ID"},"subscription":{"type":"object","description":"Tableau subscription envelope, e.g. { subscription: { subject, contentId, userId, scheduleId, ... } }"}},"required":["siteId","subscription"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"datasources.delete","description":"Delete a datasource by ID.","parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"The site ID"},"datasourceId":{"type":"string","description":"The ID of the datasource to delete"}},"required":["siteId","datasourceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"talkable","displayName":"Talkable","description":"Manage referral marketing campaigns, advocate referrals, and track referral rewards.","auth":{"kind":"api-key","hint":"Talkable API key with site ID."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"advocates.list","description":"List advocates (people who are referring others).","parameters":{"type":"object","properties":{"site":{"type":"string"},"limit":{"type":"integer"}},"required":["site"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"advocates.get","description":"Get a specific advocate by email.","parameters":{"type":"object","properties":{"site":{"type":"string"},"email":{"type":"string"}},"required":["site","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"referrals.list","description":"List referrals for a site.","parameters":{"type":"object","properties":{"site":{"type":"string"},"status":{"type":"string"},"limit":{"type":"integer"}},"required":["site"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"referrals.create","description":"Create a referral (track a new referral event).","parameters":{"type":"object","properties":{"site":{"type":"string"},"advocateEmail":{"type":"string"},"friendEmail":{"type":"string"},"campaignTag":{"type":"string"}},"required":["site","advocateEmail","friendEmail","campaignTag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rewards.list","description":"List rewards for a site.","parameters":{"type":"object","properties":{"site":{"type":"string"},"limit":{"type":"integer"}},"required":["site"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.list","description":"List campaigns for a site.","parameters":{"type":"object","properties":{"site":{"type":"string"},"limit":{"type":"integer"}},"required":["site"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"events.track","description":"Track a purchase or custom event for referral attribution.","parameters":{"type":"object","properties":{"site":{"type":"string"},"email":{"type":"string"},"eventCategory":{"type":"string"},"eventNumber":{"type":"string"},"subtotal":{"type":"number"}},"required":["site","email","eventCategory","eventNumber","subtotal"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"offers.list","description":"List offers (rewards) for a campaign.","parameters":{"type":"object","properties":{"site":{"type":"string"},"campaignTag":{"type":"string"}},"required":["site","campaignTag"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"advocates.update","description":"Update an advocate profile (e.g. name, custom properties).","parameters":{"type":"object","properties":{"site":{"type":"string"},"email":{"type":"string"},"advocate":{"type":"object","description":"Partial advocate fields to update."}},"required":["site","email","advocate"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"advocates.delete","description":"Delete an advocate by email.","parameters":{"type":"object","properties":{"site":{"type":"string"},"email":{"type":"string"}},"required":["site","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"referrals.update","description":"Update the state of a referral (approve, reject, etc.).","parameters":{"type":"object","properties":{"site":{"type":"string"},"referralId":{"type":"string"},"state":{"type":"string","description":"New state (e.g. approved, rejected, completed)."}},"required":["site","referralId","state"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"rewards.issue","description":"Issue a reward to an advocate.","parameters":{"type":"object","properties":{"site":{"type":"string"},"email":{"type":"string","description":"Advocate email to issue the reward to."},"offerId":{"type":"string","description":"Reward offer / campaign offer id."}},"required":["site","email","offerId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"tally","displayName":"Tally","description":"Create and manage Tally forms, read submissions, and manage signed form-response webhooks.","auth":{"kind":"api-key","hint":"Tally API key from Account Settings > API keys. Sent as a Bearer token."},"category":"webhook","defaultConsistencyModel":"authoritative","capabilities":[{"name":"user.get","description":"Read the authenticated Tally user.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.list","description":"List accessible forms with pagination.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1,"maximum":500}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.get","description":"Read a form with its blocks and settings.","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.questions.list","description":"List the questions defined by a form.","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"submissions.list","description":"List completed or partial form submissions incrementally.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1,"maximum":500},"filter":{"type":"string","enum":["all","completed","partial"]},"startDate":{"type":"string"},"endDate":{"type":"string"},"afterId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"submissions.get","description":"Read one submission and the form questions needed to interpret it.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"submissionId":{"type":"string"}},"required":["formId","submissionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"webhooks.list","description":"List webhook subscriptions across accessible forms.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.create","description":"Create a form from blocks or a template.","parameters":{"type":"object","properties":{"workspaceId":{"type":"string"},"templateId":{"type":"string"},"folderId":{"type":"string"},"status":{"type":"string","enum":["DRAFT","PUBLISHED"]},"blocks":{"type":"array","items":{"type":"object"}},"settings":{"type":"object"}},"required":["status","blocks"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.update","description":"Replace selected form settings or its complete blocks array.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["DRAFT","PUBLISHED","CLOSED"]},"blocks":{"type":"array","items":{"type":"object"}},"settings":{"type":"object"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"forms.delete","description":"Move a form to Tally trash.","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"submissions.delete","description":"Permanently delete one form submission.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"submissionId":{"type":"string"}},"required":["formId","submissionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"webhooks.create","description":"Create a signed form-response webhook subscription.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"url":{"type":"string"},"eventTypes":{"type":"array","items":{"type":"string","enum":["FORM_RESPONSE"]}},"signingSecret":{"type":"string"},"httpHeaders":{"type":"array","items":{"type":"object"}},"externalSubscriber":{"type":"string"}},"required":["formId","url","eventTypes"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Delete a webhook subscription.","parameters":{"type":"object","properties":{"webhookId":{"type":"string"}},"required":["webhookId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true}]},{"kind":"taxjar","displayName":"TaxJar","description":"Calculate sales tax and synchronize order/refund transactions with TaxJar for reporting and filing.","auth":{"kind":"api-key","hint":"TaxJar SmartCalcs API token from Account → TaxJar API."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"taxes.calculate","description":"Calculate sales tax for a cart or order without creating a TaxJar transaction.","parameters":{"type":"object","properties":{"from_country":{"type":"string"},"from_zip":{"type":"string"},"from_state":{"type":"string"},"from_city":{"type":"string"},"from_street":{"type":"string"},"to_country":{"type":"string"},"to_zip":{"type":"string"},"to_state":{"type":"string"},"to_city":{"type":"string"},"to_street":{"type":"string"},"amount":{"type":"number"},"shipping":{"type":"number"},"customer_id":{"type":"string"},"exemption_type":{"type":"string"},"nexus_addresses":{"type":"array","items":{"type":"object"}},"line_items":{"type":"array","items":{"type":"object"}}},"required":["from_country","from_zip","to_country","to_zip","amount","shipping"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"rates.get","description":"Read the combined sales-tax rate for a US or Canadian postal code.","parameters":{"type":"object","properties":{"zip":{"type":"string"},"country":{"type":"string"},"state":{"type":"string"},"city":{"type":"string"},"street":{"type":"string"}},"required":["zip"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"categories.list","description":"List TaxJar product tax categories and their tax codes.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"nexus-regions.list","description":"List nexus regions configured for the TaxJar account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.get","description":"Read a synced order transaction.","parameters":{"type":"object","properties":{"transactionId":{"type":"string","description":"Merchant transaction id."},"provider":{"type":"string","enum":["api","stripe","square"],"description":"Transaction source. Defaults to api."}},"required":["transactionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.create","description":"Create an order transaction for reporting and filing.","parameters":{"type":"object","properties":{"transactionId":{"type":"string","description":"Merchant transaction id."},"data":{"type":"object","description":"Provider-native TaxJar order/refund payload, including transaction_id and transaction_date."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.update","description":"Update an order transaction.","parameters":{"type":"object","properties":{"transactionId":{"type":"string","description":"Merchant transaction id."},"data":{"type":"object","description":"Provider-native TaxJar order/refund payload, including transaction_id and transaction_date."}},"required":["transactionId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.delete","description":"Delete an order transaction.","parameters":{"type":"object","properties":{"transactionId":{"type":"string","description":"Merchant transaction id."},"provider":{"type":"string","enum":["api","stripe","square"],"description":"Transaction source. Defaults to api."}},"required":["transactionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"refunds.get","description":"Read a synced refund transaction.","parameters":{"type":"object","properties":{"transactionId":{"type":"string","description":"Merchant transaction id."},"provider":{"type":"string","enum":["api","stripe","square"],"description":"Transaction source. Defaults to api."}},"required":["transactionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"refunds.create","description":"Create a refund transaction for reporting and filing.","parameters":{"type":"object","properties":{"transactionId":{"type":"string","description":"Merchant transaction id."},"data":{"type":"object","description":"Provider-native TaxJar order/refund payload, including transaction_id and transaction_date."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"refunds.update","description":"Update a refund transaction.","parameters":{"type":"object","properties":{"transactionId":{"type":"string","description":"Merchant transaction id."},"data":{"type":"object","description":"Provider-native TaxJar order/refund payload, including transaction_id and transaction_date."}},"required":["transactionId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"refunds.delete","description":"Delete a refund transaction.","parameters":{"type":"object","properties":{"transactionId":{"type":"string","description":"Merchant transaction id."},"provider":{"type":"string","enum":["api","stripe","square"],"description":"Transaction source. Defaults to api."}},"required":["transactionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"teable","displayName":"Teable","description":"Read and write records, tables, fields, and views in Teable databases.","auth":{"kind":"oauth2","authorizationUrl":"https://app.teable.ai/api/oauth/authorize","tokenUrl":"https://app.teable.ai/api/oauth/access_token","scopes":["base|read","table|read","table|create","field|create","view|create","record|read","record|create","record|update"],"clientIdEnv":"TEABLE_OAUTH_CLIENT_ID","clientSecretEnv":"TEABLE_OAUTH_CLIENT_SECRET","pkce":"supported"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.create","description":"Create a new record in a Teable table.","parameters":{"type":"object","properties":{"tableId":{"type":"string"},"fields":{"type":"object"},"fieldKeyType":{"type":"string","enum":["name","id","dbFieldName"]},"typecast":{"type":"boolean"}},"required":["tableId","fields"]},"requiredScopes":["record|create"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.find","description":"Find records in a Teable table.","parameters":{"type":"object","properties":{"tableId":{"type":"string"},"filter":{"type":"string"},"take":{"type":"integer","minimum":1,"maximum":1000},"skip":{"type":"integer","minimum":0},"viewId":{"type":"string"},"fieldKeyType":{"type":"string","enum":["name","id","dbFieldName"]},"cellFormat":{"type":"string","enum":["json","text"]}},"required":["tableId"]},"requiredScopes":["record|read"],"class":"read"},{"name":"records.get","description":"Get a single record by ID from a Teable table.","parameters":{"type":"object","properties":{"tableId":{"type":"string"},"recordId":{"type":"string"},"fieldKeyType":{"type":"string","enum":["name","id","dbFieldName"]},"cellFormat":{"type":"string","enum":["json","text"]}},"required":["tableId","recordId"]},"requiredScopes":["record|read"],"class":"read"},{"name":"records.update","description":"Update an existing record in a Teable table.","parameters":{"type":"object","properties":{"tableId":{"type":"string"},"recordId":{"type":"string"},"fields":{"type":"object"},"fieldKeyType":{"type":"string","enum":["name","id","dbFieldName"]},"typecast":{"type":"boolean"}},"required":["tableId","recordId","fields"]},"requiredScopes":["record|update"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tables.list","description":"List all tables in a Teable base.","parameters":{"type":"object","properties":{"baseId":{"type":"string","description":"The ID of the base."}},"required":["baseId"]},"requiredScopes":["table|read"],"class":"read"},{"name":"tables.create","description":"Create a new table in a Teable base.","parameters":{"type":"object","properties":{"baseId":{"type":"string"},"name":{"type":"string","description":"Table name."}},"required":["baseId","name"]},"requiredScopes":["table|create"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"fields.create","description":"Add a field (column) to a Teable table.","parameters":{"type":"object","properties":{"tableId":{"type":"string"},"name":{"type":"string","description":"Field name."},"type":{"type":"string","description":"Field type (e.g. singleLineText, number, checkbox)."}},"required":["tableId","name","type"]},"requiredScopes":["field|create"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"views.create","description":"Create a new view on a Teable table.","parameters":{"type":"object","properties":{"tableId":{"type":"string"},"name":{"type":"string","description":"View name."},"type":{"type":"string","description":"View type (e.g. grid, kanban, gallery, form)."}},"required":["tableId","name","type"]},"requiredScopes":["view|create"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"telegram","displayName":"Telegram","description":"Send messages, photos, and documents via a Telegram bot; read chat metadata and members; poll updates or register a webhook.","auth":{"kind":"api-key","hint":"Paste the bot token issued by @BotFather (format: \"123456789:AAExxxxx...\"). The token IS the credential — Telegram has no OAuth grant."},"category":"comms","defaultConsistencyModel":"advisory","rateLimit":{"requests":25,"windowMs":1000,"scope":"oauth-client"},"capabilities":[{"name":"getMe","class":"read","description":"Return the bot identity (id, username, is_bot, name, supports_inline_queries).","parameters":{"type":"object","properties":{}}},{"name":"getChat","class":"read","description":"Read a chat (group, supergroup, channel, or private) by id or @username.","parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"],"description":"Numeric chat id or @channel_username."}},"required":["chat_id"]}},{"name":"getChatAdministrators","class":"read","description":"List administrators of a chat (excludes regular members).","parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]}},"required":["chat_id"]}},{"name":"getChatMember","class":"read","description":"Read a single chat member (status, permissions, role).","parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]},"user_id":{"type":"integer"}},"required":["chat_id","user_id"]}},{"name":"getChatMemberCount","class":"read","description":"Return the total number of members in a chat.","parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]}},"required":["chat_id"]}},{"name":"getUpdates","class":"read","description":"Long-poll for incoming updates. Mutually exclusive with setWebhook — calling getUpdates while a webhook is set returns 409.","parameters":{"type":"object","properties":{"offset":{"type":"integer","description":"Update id to acknowledge; returns updates > offset."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":100},"timeout":{"type":"integer","minimum":0,"maximum":50,"description":"Long-poll seconds (0 = short poll)."},"allowed_updates":{"type":"array","items":{"type":"string"},"description":"Filter (e.g. [\"message\", \"callback_query\"]); empty = all except chat_member."}}}},{"name":"getFile","class":"read","description":"Resolve a file_id to a downloadable path. The response includes `file_path`; download URL is `https://api.telegram.org/file/bot<token>/<file_path>`.","parameters":{"type":"object","properties":{"file_id":{"type":"string"}},"required":["file_id"]}},{"name":"getWebhookInfo","class":"read","description":"Inspect the currently registered webhook (url, pending_update_count, last_error_message).","parameters":{"type":"object","properties":{}}},{"name":"sendMessage","class":"mutation","description":"Send a text message to a chat. Append-only — no upstream dedup — the caller owns idempotency via the SDK idempotencyKey.","cas":"none","externalEffect":true,"parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]},"text":{"type":"string","description":"Message body (≤4096 chars)."},"parse_mode":{"type":"string","enum":["MarkdownV2","HTML","Markdown"]},"entities":{"type":"array","items":{"type":"object"}},"link_preview_options":{"type":"object"},"disable_notification":{"type":"boolean"},"protect_content":{"type":"boolean"},"reply_parameters":{"type":"object","description":"Reply target spec."},"reply_markup":{"type":"object","description":"Inline keyboard / reply keyboard markup."},"message_thread_id":{"type":"integer","description":"Forum topic / thread id."}},"required":["chat_id","text"]}},{"name":"sendPhoto","class":"mutation","description":"Send a photo to a chat by URL or pre-uploaded file_id. Append-only — no upstream dedup.","cas":"none","externalEffect":true,"parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]},"photo":{"type":"string","description":"HTTPS URL or Telegram file_id."},"caption":{"type":"string"},"parse_mode":{"type":"string","enum":["MarkdownV2","HTML","Markdown"]},"has_spoiler":{"type":"boolean"},"disable_notification":{"type":"boolean"},"reply_parameters":{"type":"object"},"reply_markup":{"type":"object"},"message_thread_id":{"type":"integer"}},"required":["chat_id","photo"]}},{"name":"sendDocument","class":"mutation","description":"Send a document (file) to a chat by URL or pre-uploaded file_id. Append-only.","cas":"none","externalEffect":true,"parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]},"document":{"type":"string","description":"HTTPS URL or Telegram file_id."},"caption":{"type":"string"},"parse_mode":{"type":"string","enum":["MarkdownV2","HTML","Markdown"]},"disable_notification":{"type":"boolean"},"reply_parameters":{"type":"object"},"reply_markup":{"type":"object"},"message_thread_id":{"type":"integer"}},"required":["chat_id","document"]}},{"name":"forwardMessage","class":"mutation","description":"Forward a message between chats. Append-only — replays create new forwards.","cas":"none","externalEffect":true,"parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"],"description":"Destination chat."},"from_chat_id":{"type":["string","integer"],"description":"Origin chat of the source message."},"message_id":{"type":"integer"},"disable_notification":{"type":"boolean"},"protect_content":{"type":"boolean"},"message_thread_id":{"type":"integer"}},"required":["chat_id","from_chat_id","message_id"]}},{"name":"editMessageText","class":"mutation","description":"Edit an existing bot-authored message. Idempotent on (chat_id, message_id) but the caller should read-verify before retrying lossy edits.","cas":"optimistic-read-verify","externalEffect":true,"parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]},"message_id":{"type":"integer"},"inline_message_id":{"type":"string","description":"Use instead of (chat_id, message_id) for inline-mode messages."},"text":{"type":"string"},"parse_mode":{"type":"string","enum":["MarkdownV2","HTML","Markdown"]},"entities":{"type":"array","items":{"type":"object"}},"link_preview_options":{"type":"object"},"reply_markup":{"type":"object"}},"required":["text"]}},{"name":"deleteMessage","class":"mutation","description":"Delete a message. Idempotent on (chat_id, message_id) — re-deleting returns ok:true semantics.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]},"message_id":{"type":"integer"}},"required":["chat_id","message_id"]}},{"name":"answerCallbackQuery","class":"mutation","description":"Acknowledge an inline-keyboard callback. Idempotent on callback_query_id — Telegram only accepts the first answer.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"callback_query_id":{"type":"string"},"text":{"type":"string","description":"≤200 char notification body shown to the user."},"show_alert":{"type":"boolean"},"url":{"type":"string"},"cache_time":{"type":"integer"}},"required":["callback_query_id"]}},{"name":"setWebhook","class":"mutation","description":"Register an HTTPS webhook for incoming updates. Idempotent on the (url, secret_token) tuple — re-setting the same URL is a no-op.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"url":{"type":"string","description":"HTTPS endpoint (no self-signed certs unless certificate is provided)."},"secret_token":{"type":"string","description":"1-256 char shared secret echoed in `X-Telegram-Bot-Api-Secret-Token` header for verification."},"max_connections":{"type":"integer","minimum":1,"maximum":100,"default":40},"allowed_updates":{"type":"array","items":{"type":"string"}},"drop_pending_updates":{"type":"boolean"},"ip_address":{"type":"string"}},"required":["url"]}},{"name":"deleteWebhook","class":"mutation","description":"Remove the registered webhook so getUpdates becomes usable again. Idempotent.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"drop_pending_updates":{"type":"boolean"}}}},{"name":"editMessageMedia","class":"mutation","description":"Replace media (photo / video / animation / audio / document) on a previously-sent message. Idempotent on (chat_id, message_id) — re-sending the same media is a no-op upstream.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]},"message_id":{"type":"integer"},"inline_message_id":{"type":"string","description":"Use instead of (chat_id, message_id) for inline-mode messages."},"media":{"type":"object","description":"InputMedia object — { type: photo|video|animation|audio|document, media: <url|file_id>, caption?, parse_mode?, ... }."},"reply_markup":{"type":"object"}},"required":["media"]}},{"name":"pinChatMessage","class":"mutation","description":"Pin a message in a chat. Idempotent on (chat_id, message_id) — pinning an already-pinned message is a no-op upstream.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]},"message_id":{"type":"integer"},"disable_notification":{"type":"boolean"},"business_connection_id":{"type":"string"}},"required":["chat_id","message_id"]}},{"name":"unpinChatMessage","class":"mutation","description":"Unpin a message in a chat. Omit message_id to unpin the most-recently-pinned. Idempotent — unpinning an already-unpinned message is a no-op.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]},"message_id":{"type":"integer","description":"Optional — when omitted, unpins the most-recently-pinned."},"business_connection_id":{"type":"string"}},"required":["chat_id"]}},{"name":"banChatMember","class":"mutation","description":"Ban a user from a group / supergroup / channel. Idempotent on (chat_id, user_id) — re-banning an already-banned user is a no-op.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]},"user_id":{"type":"integer"},"until_date":{"type":"integer","description":"Unix time when the ban lifts; 0 or omitted = permanent."},"revoke_messages":{"type":"boolean","description":"Delete all messages from the user."}},"required":["chat_id","user_id"]}},{"name":"restrictChatMember","class":"mutation","description":"Restrict a user's permissions in a supergroup. Body carries the full ChatPermissions object — every setting must be present, omitted booleans are treated as false. Idempotent on (chat_id, user_id, permissions).","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"chat_id":{"type":["string","integer"]},"user_id":{"type":"integer"},"permissions":{"type":"object","description":"ChatPermissions object — { can_send_messages, can_send_audios, can_send_documents, ... }."},"use_independent_chat_permissions":{"type":"boolean"},"until_date":{"type":"integer","description":"Unix time when restrictions lift; 0 or omitted = permanent."}},"required":["chat_id","user_id","permissions"]}}]},{"kind":"telnyx","displayName":"Telnyx","description":"Send SMS messages and make voice calls via the Telnyx telecom API platform.","auth":{"kind":"api-key","hint":"Telnyx API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"messages.send","description":"Send an SMS message.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Destination phone number or list of numbers."},"from":{"type":"string","description":"Sender phone number in E.164 format."},"text":{"type":"string","description":"Message body."},"messaging_profile_id":{"type":"string","description":"Optional Telnyx messaging profile ID."},"webhook_url":{"type":"string","description":"Optional webhook URL for delivery status."}},"required":["to","from","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.create","description":"Initiate a voice call.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Destination number or SIP URI."},"from":{"type":"string","description":"Caller ID number in E.164 format."},"connection_id":{"type":"string","description":"Telnyx Call Control Application ID."},"audio_url":{"type":"string","description":"Optional WAV or MP3 URL to play when call is answered."},"webhook_url":{"type":"string","description":"Optional webhook URL for call events."},"timeout_secs":{"type":"integer","description":"Ring timeout in seconds."}},"required":["to","from","connection_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.list","description":"List recent calls.","parameters":{"type":"object","properties":{"filter":{"type":"string","description":"Optional filter criteria."},"page_size":{"type":"integer","description":"Number of results per page (default 20)."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.get","description":"Retrieve call details by ID.","parameters":{"type":"object","properties":{"call_id":{"type":"string","description":"Unique call control ID."}},"required":["call_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.list","description":"List sent or received messages.","parameters":{"type":"object","properties":{"filter":{"type":"string","description":"Optional filter criteria."},"page_size":{"type":"integer","description":"Number of results per page."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.hangup","description":"Hang up an active call.","parameters":{"type":"object","properties":{"call_control_id":{"type":"string","description":"Telnyx Call Control ID for the active call."}},"required":["call_control_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.transfer","description":"Transfer an active call to a new destination.","parameters":{"type":"object","properties":{"call_control_id":{"type":"string","description":"Telnyx Call Control ID for the active call."},"to":{"type":"string","description":"Destination number or SIP URI to transfer the call to."},"from":{"type":"string","description":"Caller ID number to present on the transferred leg (optional)."}},"required":["call_control_id","to"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"numbers.list","description":"List phone numbers on the account.","parameters":{"type":"object","properties":{"filter":{"type":"string","description":"Optional filter criteria."},"page_size":{"type":"integer","description":"Number of results per page."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"numbers.update","description":"Update phone number configuration (tags, connection, customer reference).","parameters":{"type":"object","properties":{"phone_number_id":{"type":"string","description":"Telnyx phone number ID."},"tags":{"type":"array","items":{"type":"string"},"description":"Tags to set on the number (optional)."},"customer_reference":{"type":"string","description":"Customer reference string (optional)."},"connection_id":{"type":"string","description":"Telnyx Call Control Application or Connection ID (optional)."}},"required":["phone_number_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"tenzo","displayName":"Tenzo","description":"Extract data and insights from the Tenzo platform for sales, forecasting, and analytics.","auth":{"kind":"oauth2","authorizationUrl":"https://api.tenzo.com/oauth/authorize","tokenUrl":"https://api.tenzo.com/oauth/token","scopes":["data:read"],"clientIdEnv":"TENZO_OAUTH_CLIENT_ID","clientSecretEnv":"TENZO_OAUTH_CLIENT_SECRET"},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"forecasts.list","description":"Retrieve daily forecasts from Tenzo.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Number of forecasts to retrieve"},"offset":{"type":"integer","description":"Pagination offset"}},"required":[]},"requiredScopes":["data:read"],"class":"read"},{"name":"sales.summary","description":"Get sales summary data from Tenzo.","parameters":{"type":"object","properties":{"startDate":{"type":"string","description":"Start date (YYYY-MM-DD)"},"endDate":{"type":"string","description":"End date (YYYY-MM-DD)"},"limit":{"type":"integer","description":"Maximum records to return"}},"required":[]},"requiredScopes":["data:read"],"class":"read"},{"name":"payments.summary","description":"Retrieve payment summary data from Tenzo.","parameters":{"type":"object","properties":{"startDate":{"type":"string","description":"Start date (YYYY-MM-DD)"},"endDate":{"type":"string","description":"End date (YYYY-MM-DD)"},"limit":{"type":"integer","description":"Maximum records to return"}},"required":[]},"requiredScopes":["data:read"],"class":"read"},{"name":"insights.list","description":"Fetch analytics and insights from Tenzo.","parameters":{"type":"object","properties":{"category":{"type":"string","description":"Insight category (sales, revenue, forecast, etc.)"},"limit":{"type":"integer","description":"Number of insights to retrieve"}},"required":[]},"requiredScopes":["data:read"],"class":"read"}]},{"kind":"textcortex-ai","displayName":"TextCortex AI","description":"AI-powered writing assistant for content creation, code generation, translations, and more using multiple AI models.","auth":{"kind":"api-key","hint":"TextCortex AI API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"prompt.send","description":"Send a prompt to TextCortex AI and get a response.","parameters":{"type":"object","properties":{"prompt":{"type":"string","description":"The prompt text to send."},"model":{"type":"string","description":"The AI model to use (optional)."},"max_tokens":{"type":"integer","description":"Maximum tokens in response (optional, 1-4096)."},"temperature":{"type":"number","description":"Temperature/creativity level (optional, 0.0-2.0)."},"n":{"type":"integer","description":"Number of outputs to generate (optional, 1-5)."}},"required":["prompt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"paraphrase.create","description":"Create a paraphrase of the provided text.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"The text to paraphrase."},"model":{"type":"string","description":"The AI model to use (optional)."}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"social.media.caption.create","description":"Generate a social media caption for given content.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"The content to create a caption for."},"model":{"type":"string","description":"The AI model to use (optional)."}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"translation.create","description":"Translate text from source language to target language.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"The text to translate."},"source_lang":{"type":"string","description":"Source language code (optional)."},"target_lang":{"type":"string","description":"Target language code."},"model":{"type":"string","description":"The AI model to use (optional)."}},"required":["text","target_lang"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"code.create","description":"Generate code based on provided instructions.","parameters":{"type":"object","properties":{"instructions":{"type":"string","description":"Code generation instructions."},"language":{"type":"string","description":"Programming language for code."},"model":{"type":"string","description":"The AI model to use (optional)."},"max_tokens":{"type":"integer","description":"Maximum tokens in response (optional, 1-4096)."},"temperature":{"type":"number","description":"Temperature/creativity level (optional, 0.0-2.0)."}},"required":["instructions","language"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"email.create","description":"Generate an email with optional context and instructions.","parameters":{"type":"object","properties":{"context":{"type":"string","description":"Context for the email."},"to":{"type":"string","description":"Email recipient (optional)."},"from":{"type":"string","description":"Email sender (optional)."},"instructions":{"type":"string","description":"Instructions for email generation (optional)."},"received_email":{"type":"string","description":"Email being replied to (optional)."},"purpose":{"type":"string","description":"Purpose of the email (optional)."},"company_details":{"type":"string","description":"Company details (optional)."},"formality":{"type":"string","description":"Formality level (optional)."},"model":{"type":"string","description":"The AI model to use (optional)."}},"required":["context"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"product.description.create","description":"Generate a product description with name, features, brand, and category.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Product name."},"description":{"type":"string","description":"Product features."},"brand":{"type":"string","description":"Product brand (optional)."},"category":{"type":"string","description":"Product category (optional)."},"keywords":{"type":"string","description":"Keywords to include (comma-separated, optional)."},"model":{"type":"string","description":"The AI model to use (optional)."}},"required":["name","description"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"summary.create","description":"Generate a summary of the provided text.","parameters":{"type":"object","properties":{"text":{"type":"string","description":"The text to summarize."},"model":{"type":"string","description":"The AI model to use (optional)."}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"templates.list","description":"List saved generation templates.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Number of results per page (optional)."},"offset":{"type":"integer","description":"Pagination offset (optional)."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"personas.list","description":"List available personas.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Number of results per page (optional)."},"offset":{"type":"integer","description":"Pagination offset (optional)."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"history.list","description":"List previous generations.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Number of results per page (optional)."},"offset":{"type":"integer","description":"Pagination offset (optional)."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"history.delete","description":"Delete a generation entry from history.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"History entry ID."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"theirstack","displayName":"TheirStack","description":"Jobs and technographics data API. Search job postings and companies across 100+ countries, look up a company's tech stack, and detect buying intent.","auth":{"kind":"api-key","hint":"API key from app.theirstack.com/settings/api. Sent as the Authorization: Bearer header."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"jobs.search","description":"Search job postings with filters (title, country, technology, posting recency, company). Requires at least one filter such as posted_at_max_age_days. Costs 1 credit per job returned.","parameters":{"type":"object","properties":{"posted_at_max_age_days":{"type":"integer"},"job_title_or":{"type":"array","items":{"type":"string"}},"job_country_code_or":{"type":"array","items":{"type":"string"}},"company_technology_slug_or":{"type":"array","items":{"type":"string"}},"company_name_or":{"type":"array","items":{"type":"string"}},"limit":{"type":"integer"},"page":{"type":"integer"}},"required":["posted_at_max_age_days","limit","page"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.search","description":"Search companies by country, technologies used, industry, funding, and nested job filters. Costs 3 credits per company returned.","parameters":{"type":"object","properties":{"company_country_code_or":{"type":"array","items":{"type":"string"}},"company_technology_slug_or":{"type":"array","items":{"type":"string"}},"industry_id_or":{"type":"array","items":{"type":"integer"}},"min_funding_usd":{"type":"integer"},"max_funding_usd":{"type":"integer"},"limit":{"type":"integer"},"page":{"type":"integer"}},"required":["limit","page"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.technologies","description":"Look up the technologies (tech stack) detected for a company identified by domain, name, or LinkedIn URL. Costs 3 credits per company lookup.","parameters":{"type":"object","properties":{"company_domain":{"type":"string"},"company_name":{"type":"string"},"company_linkedin_url":{"type":"string"},"technology_slug_or":{"type":"array","items":{"type":"string"}}},"required":["company_domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.buying_intents","description":"Retrieve buying-intent signals for a company identified by domain, name, or LinkedIn URL. Costs 3 credits per company lookup.","parameters":{"type":"object","properties":{"company_domain":{"type":"string"},"company_name":{"type":"string"},"company_linkedin_url":{"type":"string"}},"required":["company_domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"ticktick","displayName":"TickTick","description":"Create, update, complete, and delete tasks in TickTick.","auth":{"kind":"oauth2","authorizationUrl":"https://ticktick.com/oauth/authorize","tokenUrl":"https://ticktick.com/oauth/token","scopes":["tasks:read","tasks:write"],"clientIdEnv":"TICKTICK_OAUTH_CLIENT_ID","clientSecretEnv":"TICKTICK_OAUTH_CLIENT_SECRET","tokenClientAuthMethod":"client_secret_basic"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tasks.create","description":"Create a new task in TickTick.","parameters":{"type":"object","properties":{"title":{"type":"string"},"projectId":{"type":"string"},"description":{"type":"string"},"priority":{"type":"integer"},"dueDate":{"type":"string"}},"required":["title","projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update an existing task in TickTick.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"priority":{"type":"integer"},"dueDate":{"type":"string"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.get","description":"Retrieve a specific task from TickTick.","parameters":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.find","description":"Find tasks in a TickTick project by query.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"query":{"type":"string"},"limit":{"type":"integer"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.complete","description":"Mark a task as complete in TickTick.","parameters":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.delete","description":"Delete a task from TickTick.","parameters":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"projects.get","description":"Retrieve a specific project from TickTick.","parameters":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.create","description":"Create a new project (list) in TickTick.","parameters":{"type":"object","properties":{"name":{"type":"string"},"color":{"type":"string","description":"Hex color code for the project (optional)."},"viewMode":{"type":"string","description":"View mode, e.g. 'list', 'kanban', 'timeline' (optional)."},"kind":{"type":"string","description":"Project kind, e.g. 'TASK' or 'NOTE' (optional)."}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.update","description":"Update an existing project in TickTick.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"name":{"type":"string","description":"New project name (optional)."},"color":{"type":"string","description":"Hex color code for the project (optional)."},"viewMode":{"type":"string","description":"View mode (optional)."},"kind":{"type":"string","description":"Project kind (optional)."}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.delete","description":"Delete a project from TickTick.","parameters":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.move","description":"Move a task to another project.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"projectId":{"type":"string","description":"Destination project ID."}},"required":["taskId","projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"tiktok","displayName":"TikTok","description":"Read the connected TikTok profile and videos, then publish approved videos or photo posts from verified HTTPS URLs.","auth":{"kind":"oauth2","authorizationUrl":"https://www.tiktok.com/v2/auth/authorize/","tokenUrl":"https://open.tiktokapis.com/v2/oauth/token/","scopes":["user.info.basic","video.list","video.publish"],"scopeSeparator":",","pkce":"unsupported","authorizationClientIdParam":"client_key","tokenClientIdParam":"client_key","tokenClientSecretParam":"client_secret","clientIdEnv":"TIKTOK_OAUTH_CLIENT_KEY","clientSecretEnv":"TIKTOK_OAUTH_CLIENT_SECRET","tokenMetadata":{"openId":"open_id"}},"category":"comms","defaultConsistencyModel":"advisory","capabilities":[{"name":"user.info","description":"Read the connected TikTok account identity, display name, and avatar.","parameters":{"type":"object","properties":{}},"requiredScopes":["user.info.basic"],"class":"read"},{"name":"videos.list","description":"List videos for the connected creator, including public URLs, dimensions, duration, and engagement counts.","parameters":{"type":"object","properties":{"cursor":{"type":"integer","minimum":0,"description":"UTC millisecond cursor returned by the previous page."},"max_count":{"type":"integer","minimum":1,"maximum":20,"default":10}}},"requiredScopes":["video.list"],"class":"read"},{"name":"videos.query","description":"Read up to 20 TikTok videos by their exact video ids.","parameters":{"type":"object","properties":{"video_ids":{"type":"array","minItems":1,"maxItems":20,"uniqueItems":true,"items":{"type":"string","minLength":1}}},"required":["video_ids"]},"requiredScopes":["video.list"],"class":"read"},{"name":"publishing.creatorInfo","description":"Read the latest creator posting limits, privacy choices, and interaction settings before presenting a publish confirmation.","parameters":{"type":"object","properties":{}},"requiredScopes":["video.publish"],"class":"read"},{"name":"publishing.status","description":"Read processing, moderation, and publication status for one publish request.","parameters":{"type":"object","properties":{"publish_id":{"type":"string","minLength":1,"maxLength":64}},"required":["publish_id"]},"requiredScopes":["video.publish"],"class":"read"},{"name":"publishing.videoFromUrl","description":"Directly publish one approved video from an app-verified HTTPS URL. The adapter refreshes creator limits before it sends the post.","parameters":{"type":"object","properties":{"video_url":{"type":"string","format":"uri","pattern":"^https://","description":"Public HTTPS URL covered by the domain or URL prefix verified in the TikTok app."},"video_duration_sec":{"type":"number","exclusiveMinimum":0,"description":"Measured video duration used to enforce the creator-specific limit."},"privacy_level":{"type":"string","enum":["PUBLIC_TO_EVERYONE","MUTUAL_FOLLOW_FRIENDS","FOLLOWER_OF_CREATOR","SELF_ONLY"]},"title":{"type":"string","maxLength":2200},"disable_duet":{"type":"boolean"},"disable_comment":{"type":"boolean"},"disable_stitch":{"type":"boolean"},"video_cover_timestamp_ms":{"type":"integer","minimum":0},"brand_content_toggle":{"type":"boolean","description":"True for a paid partnership that promotes a third-party business."},"brand_organic_toggle":{"type":"boolean","description":"True when the post promotes the creator's own business."},"is_aigc":{"type":"boolean","description":"True when TikTok must label the video as AI-generated content."}},"required":["video_url","video_duration_sec","privacy_level","disable_duet","disable_comment","disable_stitch","brand_content_toggle","brand_organic_toggle"]},"requiredScopes":["video.publish"],"class":"mutation","cas":"none","externalEffect":true},{"name":"publishing.photosFromUrls","description":"Directly publish 1–35 approved photos from app-verified HTTPS URLs. The adapter refreshes creator options before it sends the post.","parameters":{"type":"object","properties":{"photo_images":{"type":"array","minItems":1,"maxItems":35,"items":{"type":"string","format":"uri","pattern":"^https://"}},"photo_cover_index":{"type":"integer","minimum":0},"privacy_level":{"type":"string","enum":["PUBLIC_TO_EVERYONE","MUTUAL_FOLLOW_FRIENDS","FOLLOWER_OF_CREATOR","SELF_ONLY"]},"title":{"type":"string","maxLength":90},"description":{"type":"string","maxLength":4000},"disable_comment":{"type":"boolean"},"auto_add_music":{"type":"boolean"},"brand_content_toggle":{"type":"boolean","description":"True for a paid partnership that promotes a third-party business."},"brand_organic_toggle":{"type":"boolean","description":"True when the post promotes the creator's own business."}},"required":["photo_images","photo_cover_index","privacy_level","disable_comment","auto_add_music","brand_content_toggle","brand_organic_toggle"]},"requiredScopes":["video.publish"],"class":"mutation","cas":"none","externalEffect":true}]},{"kind":"time-ops","displayName":"TimeOps","description":"Manage customers, projects, and time registrations in TimeOps.","auth":{"kind":"api-key","hint":"TimeOps API key from account settings."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"customers.create","description":"Create a new customer.","parameters":{"type":"object","properties":{"name":{"type":"string"},"vatNumber":{"type":"string"},"defaultRate":{"type":"number"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.create","description":"Create a new project.","parameters":{"type":"object","properties":{"customerId":{"type":"string"},"name":{"type":"string"},"billable":{"type":"boolean"},"rate":{"type":"number"},"finishedAt":{"type":"string"}},"required":["customerId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"registrations.create","description":"Create a time registration.","parameters":{"type":"object","properties":{"userId":{"type":"string"},"startedAt":{"type":"string"},"stoppedAt":{"type":"string"},"projectId":{"type":"string"},"description":{"type":"string"},"tags":{"type":"object"}},"required":["userId","startedAt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"timers.start","description":"Start a timer.","parameters":{"type":"object","properties":{"userId":{"type":"string"},"projectId":{"type":"string"},"description":{"type":"string"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"timers.stop","description":"Stop a timer.","parameters":{"type":"object","properties":{"userId":{"type":"string"}},"required":["userId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.update","description":"Update a customer record.","parameters":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"vatNumber":{"type":"string"},"defaultRate":{"type":"number"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.update","description":"Update a project.","parameters":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"customerId":{"type":"string"},"billable":{"type":"boolean"},"rate":{"type":"number"},"finishedAt":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"registrations.update","description":"Update a time registration.","parameters":{"type":"object","properties":{"id":{"type":"string"},"startedAt":{"type":"string"},"stoppedAt":{"type":"string"},"projectId":{"type":"string"},"description":{"type":"string"},"tags":{"type":"object"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"registrations.delete","description":"Delete a time registration.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.list","description":"List all customers.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.list","description":"List projects.","parameters":{"type":"object","properties":{"customerId":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"registrations.list","description":"List time registrations.","parameters":{"type":"object","properties":{"userId":{"type":"string"},"projectId":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"timelines-ai","displayName":"Timelines AI","description":"Search, manage, and send WhatsApp messages through Timelines AI.","auth":{"kind":"api-key","hint":"Timelines AI API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"chats.find","description":"Find chats with optional filters (name, labels, responsible, read status, closed status, ChatGPT autoresponse status, creation date).","parameters":{"type":"object","properties":{"name":{"type":"string"},"label":{"type":"object"},"responsible":{"type":"object"},"read":{"type":"boolean"},"closed":{"type":"boolean"},"chatgpt_autoresponse_enabled":{"type":"boolean"},"created_after":{"type":"string"},"created_before":{"type":"string"},"page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.find","description":"Find a specific message by message UID.","parameters":{"type":"object","properties":{"message_uid":{"type":"string"}},"required":["message_uid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.status","description":"Find the status of a message.","parameters":{"type":"object","properties":{"message_uid":{"type":"string"}},"required":["message_uid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.find","description":"Find an uploaded file by filename.","parameters":{"type":"object","properties":{"filename":{"type":"string"}},"required":["filename"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"accounts.find","description":"Find a WhatsApp account by ID or phone number.","parameters":{"type":"object","properties":{"id":{"type":"string"},"phone":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"chats.close","description":"Close a chat.","parameters":{"type":"object","properties":{"jid":{"type":"string"}},"required":["jid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send","description":"Send a message to an existing chat.","parameters":{"type":"object","properties":{"jid":{"type":"string"},"text":{"type":"string"},"attachment_template_id":{"type":"integer"}},"required":["jid","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send.to.new.chat","description":"Send a message to a new chat.","parameters":{"type":"object","properties":{"contactType":{"type":"string"},"contact":{"type":"string"},"chat_name":{"type":"string"},"text":{"type":"string"},"attachment_template_id":{"type":"integer"}},"required":["contactType","contact","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.send","description":"Send a file to an existing chat.","parameters":{"type":"object","properties":{"jid":{"type":"string"},"file":{"type":"string"}},"required":["jid","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.send.uploaded","description":"Send an uploaded file to an existing chat.","parameters":{"type":"object","properties":{"jid":{"type":"string"},"file":{"type":"string"}},"required":["jid","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chats.assign","description":"Assign a chat to a team member.","parameters":{"type":"object","properties":{"jid":{"type":"string"},"responsible_id":{"type":"string"}},"required":["jid","responsible_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"chats.tag","description":"Tag a chat with a label.","parameters":{"type":"object","properties":{"jid":{"type":"string"},"label":{"type":"string"}},"required":["jid","label"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.markRead","description":"Mark a message as read.","parameters":{"type":"object","properties":{"message_uid":{"type":"string"}},"required":["message_uid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.create","description":"Add an internal note to a chat.","parameters":{"type":"object","properties":{"jid":{"type":"string"},"text":{"type":"string"}},"required":["jid","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"tl-dv","displayName":"tl;dv","description":"List meetings, retrieve transcripts and highlights, and import recordings for transcription.","auth":{"kind":"api-key","hint":"tl;dv API key sent in the x-api-key header."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"meetings.list","description":"Search and list tl;dv meetings with pagination, date, participation, and meeting-type filters.","parameters":{"type":"object","properties":{"query":{"type":"string"},"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1},"from":{"type":"string","description":"ISO-8601 lower bound."},"to":{"type":"string","description":"ISO-8601 upper bound."},"onlyParticipated":{"type":"boolean"},"meetingType":{"type":"string","enum":["internal","external"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"meetings.get","description":"Get metadata for a tl;dv meeting by id.","parameters":{"type":"object","properties":{"meetingId":{"type":"string"}},"required":["meetingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"meetings.upload","description":"Import a publicly reachable audio or video recording for asynchronous processing.","parameters":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"},"happenedAt":{"type":"string"},"dryRun":{"type":"boolean"},"participants":{"type":"array","items":{"type":"string","description":"Participant email address."}}},"required":["name","url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"transcripts.get","description":"Get the speaker-attributed transcript for a tl;dv meeting.","parameters":{"type":"object","properties":{"meetingId":{"type":"string"}},"required":["meetingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"highlights.get","description":"Get highlights and notes for a tl;dv meeting.","parameters":{"type":"object","properties":{"meetingId":{"type":"string"}},"required":["meetingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"todoist","displayName":"Todoist","description":"Create, update, and search tasks in Todoist.","auth":{"kind":"oauth2","authorizationUrl":"https://todoist.com/oauth/authorize","tokenUrl":"https://todoist.com/oauth/access_token","scopes":["data:read_write"],"clientIdEnv":"TODOIST_OAUTH_CLIENT_ID","clientSecretEnv":"TODOIST_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tasks.create","description":"Create a task in Todoist.","parameters":{"type":"object","properties":{"content":{"type":"string","description":"Task content/title"},"description":{"type":"string","description":"Task description"},"project_id":{"type":"string","description":"Project ID where the task will be created"},"due_string":{"type":"string","description":"Due date (e.g., \"tomorrow\", \"next Monday\")"},"priority":{"type":"integer","description":"Priority (1-4, where 4 is urgent)"},"labels":{"type":"array","description":"Label names"},"assignee_id":{"type":"string","description":"Assignee user ID"}},"required":["content"]},"requiredScopes":["data:read_write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update a Todoist task.","parameters":{"type":"object","properties":{"task_id":{"type":"string","description":"Task ID"},"content":{"type":"string","description":"Task content/title"},"description":{"type":"string","description":"Task description"},"due_string":{"type":"string","description":"Due date (e.g., \"tomorrow\", \"next Monday\")"},"priority":{"type":"integer","description":"Priority (1-4, where 4 is urgent)"},"labels":{"type":"array","description":"Label names"},"assignee_id":{"type":"string","description":"Assignee user ID"}},"required":["task_id"]},"requiredScopes":["data:read_write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.get","description":"Retrieve a single task from Todoist.","parameters":{"type":"object","properties":{"task_id":{"type":"string","description":"Task ID"}},"required":["task_id"]},"requiredScopes":["data:read_write"],"class":"read"},{"name":"tasks.list","description":"List tasks from a project or filter.","parameters":{"type":"object","properties":{"project_id":{"type":"string","description":"Filter by project ID"},"filter":{"type":"string","description":"Todoist filter query"},"limit":{"type":"integer","description":"Maximum number of tasks to return"}},"required":[]},"requiredScopes":["data:read_write"],"class":"read"},{"name":"tasks.complete","description":"Mark a task as completed.","parameters":{"type":"object","properties":{"task_id":{"type":"string","description":"Task ID"}},"required":["task_id"]},"requiredScopes":["data:read_write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tasks.delete","description":"Delete a task.","parameters":{"type":"object","properties":{"task_id":{"type":"string","description":"Task ID"}},"required":["task_id"]},"requiredScopes":["data:read_write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"projects.list","description":"List all projects.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":["data:read_write"],"class":"read"},{"name":"projects.create","description":"Create a new project.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Project name"},"parent_id":{"type":"string","description":"Parent project ID"},"color":{"type":"string","description":"Project color"},"is_favorite":{"type":"boolean","description":"Whether the project is marked as favorite"},"view_style":{"type":"string","description":"Project view style (list or board)"}},"required":["name"]},"requiredScopes":["data:read_write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.delete","description":"Delete a project.","parameters":{"type":"object","properties":{"project_id":{"type":"string","description":"Project ID"}},"required":["project_id"]},"requiredScopes":["data:read_write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Add a comment to a task or project.","parameters":{"type":"object","properties":{"content":{"type":"string","description":"Comment content"},"task_id":{"type":"string","description":"Task ID to attach the comment to"},"project_id":{"type":"string","description":"Project ID to attach the comment to"}},"required":["content"]},"requiredScopes":["data:read_write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"labels.create","description":"Create a new label.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Label name"},"color":{"type":"string","description":"Label color"},"order":{"type":"integer","description":"Label order"},"is_favorite":{"type":"boolean","description":"Whether the label is marked as favorite"}},"required":["name"]},"requiredScopes":["data:read_write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"toggl-track","displayName":"Toggl Track","description":"Manage time entries, projects, clients, tasks, and tags in Toggl Track.","auth":{"kind":"api-key","hint":"Toggl Track API token."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"clients.create","description":"Create a new client.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"name":{"type":"string"},"external_reference":{"type":"string"},"notes":{"type":"string"}},"required":["workspace_id","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"clients.find","description":"Find clients in a workspace.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"status":{"type":"string"},"page":{"type":"integer"},"per_page":{"type":"integer"}},"required":["workspace_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.create","description":"Create a new project.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"name":{"type":"string"},"client_id":{"type":"integer"},"is_private":{"type":"boolean"},"active":{"type":"boolean"},"color":{"type":"string"},"rate":{"type":"number"},"fixed_fee":{"type":"number"},"start_date":{"type":"string"},"end_date":{"type":"string"}},"required":["workspace_id","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.find","description":"Find projects in a workspace.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"only_me":{"type":"boolean"},"only_templates":{"type":"boolean"},"page":{"type":"integer"},"per_page":{"type":"integer"}},"required":["workspace_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.create","description":"Create a new task.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"project_id":{"type":"integer"},"name":{"type":"string"},"description":{"type":"string"},"estimated_seconds":{"type":"integer"},"user_id":{"type":"integer"}},"required":["workspace_id","project_id","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.find","description":"Find tasks in a workspace.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"project_id":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"}},"required":["workspace_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tags.create","description":"Create a new tag.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"name":{"type":"string"}},"required":["workspace_id","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.find","description":"Find tags in a workspace.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"search_term":{"type":"string"}},"required":["workspace_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"time-entries.create","description":"Create a new time entry.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"description":{"type":"string"},"duration":{"type":"integer"},"start":{"type":"string"},"stop":{"type":"string"},"project_id":{"type":"integer"},"task_id":{"type":"integer"},"billable":{"type":"boolean"},"tag_ids":{"type":"array","items":{"type":"integer"}}},"required":["workspace_id","start","duration"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"time-entries.start","description":"Start a new time entry.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"description":{"type":"string"},"project_id":{"type":"integer"},"task_id":{"type":"integer"},"billable":{"type":"boolean"},"tag_ids":{"type":"array","items":{"type":"integer"}}},"required":["workspace_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"time-entries.stop","description":"Stop a running time entry.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"time_entry_id":{"type":"integer"}},"required":["workspace_id","time_entry_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"time-entries.find","description":"Find time entries in a workspace.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"before":{"type":"string"},"since":{"type":"integer"},"meta":{"type":"boolean"}},"required":["workspace_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"user.find","description":"Find a user by name or email.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"search_term":{"type":"string"}},"required":["workspace_id","search_term"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"clients.update","description":"Update an existing client.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"client_id":{"type":"integer"},"name":{"type":"string"},"external_reference":{"type":"string"},"notes":{"type":"string"}},"required":["workspace_id","client_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"clients.delete","description":"Delete a client.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"client_id":{"type":"integer"}},"required":["workspace_id","client_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.update","description":"Update an existing project.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"project_id":{"type":"integer"},"name":{"type":"string"},"client_id":{"type":"integer"},"is_private":{"type":"boolean"},"active":{"type":"boolean"},"color":{"type":"string"},"rate":{"type":"number"},"fixed_fee":{"type":"number"},"start_date":{"type":"string"},"end_date":{"type":"string"}},"required":["workspace_id","project_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.delete","description":"Delete a project.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"project_id":{"type":"integer"}},"required":["workspace_id","project_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"time-entries.delete","description":"Delete a time entry.","parameters":{"type":"object","properties":{"workspace_id":{"type":"integer"},"time_entry_id":{"type":"integer"}},"required":["workspace_id","time_entry_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"totalcms","displayName":"Total CMS","description":"Content management system for modern websites","auth":{"kind":"api-key","hint":"Total CMS API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"posts.get_blog_post","description":"Get a blog post by slug.","parameters":{"type":"object","properties":{"slug":{"type":"string"}},"required":["slug"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"content.get_content","description":"Get content by permalink.","parameters":{"type":"object","properties":{"permalink":{"type":"string"}},"required":["permalink"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"posts.save_blog_post","description":"Create or update a blog post.","parameters":{"type":"object","properties":{"slug":{"type":"string"},"data":{"type":"object"}},"required":["slug","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"content.save_content","description":"Create or update content.","parameters":{"type":"object","properties":{"permalink":{"type":"string"},"data":{"type":"object"}},"required":["permalink","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.save_image","description":"Upload and save an image.","parameters":{"type":"object","properties":{"image":{"type":"string"},"alt":{"type":"string"}},"required":["image","alt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.save_blog_image","description":"Upload and save a blog post image.","parameters":{"type":"object","properties":{"image":{"type":"string"},"alt":{"type":"string"}},"required":["image","alt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.save_video","description":"Upload and save a video.","parameters":{"type":"object","properties":{"video":{"type":"string"},"title":{"type":"string"}},"required":["video"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.save_gallery","description":"Create or update a media gallery.","parameters":{"type":"object","properties":{"name":{"type":"string"},"items":{"type":"array"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.save_blog_gallery","description":"Create or update a blog post gallery.","parameters":{"type":"object","properties":{"name":{"type":"string"},"items":{"type":"array"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"data.save_file","description":"Upload and save a file.","parameters":{"type":"object","properties":{"filename":{"type":"string"},"file":{"type":"string"}},"required":["filename","file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"data.save_text","description":"Save text data.","parameters":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"data.save_toggle","description":"Save a toggle/boolean value.","parameters":{"type":"object","properties":{"key":{"type":"string"},"enabled":{"type":"boolean"}},"required":["key","enabled"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"data.save_date","description":"Save a date value.","parameters":{"type":"object","properties":{"key":{"type":"string"},"date":{"type":"string"}},"required":["key","date"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"depot.save_depot","description":"Save to depot storage.","parameters":{"type":"object","properties":{"key":{"type":"string"},"data":{"type":"object"}},"required":["key","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.delete","description":"Delete a blog post by slug. Re-deleting an absent slug is treated as a no-op.","parameters":{"type":"object","properties":{"slug":{"type":"string"}},"required":["slug"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"content.delete","description":"Delete a content block by permalink. Re-deleting an absent permalink is a no-op.","parameters":{"type":"object","properties":{"permalink":{"type":"string"}},"required":["permalink"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.delete","description":"Delete a media asset by id. Re-deleting an absent id is a no-op.","parameters":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.list","description":"List uploaded media assets. Optional type filter (images, videos, galleries, files).","parameters":{"type":"object","properties":{"type":{"type":"string","description":"Optional filter: images | videos | galleries | files."},"limit":{"type":"integer","minimum":1,"maximum":200},"offset":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"trello","displayName":"Trello","description":"Read and mutate Trello boards, lists, cards, checklists, and comments.","auth":{"kind":"api-key","hint":"Trello user token. Mint a developer API key at https://trello.com/app-key, then authorize a user token via https://trello.com/1/authorize?expiration=never&scope=read,write&response_type=token&key=<KEY>. Pass the developer key as the `key` argument on every invocation."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"boards.list","description":"List Trello boards visible to the authenticated member.","parameters":{"type":"object","properties":{"key":{"type":"string","description":"Trello developer API key."},"memberId":{"type":"string","description":"Member id or \"me\"."},"filter":{"type":"string","enum":["all","open","closed","members","organization","public","starred"]},"fields":{"type":"string","description":"Comma-separated board fields."}},"required":["key","memberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"boards.get","description":"Read a single board with optional nested lists/cards.","parameters":{"type":"object","properties":{"key":{"type":"string"},"boardId":{"type":"string"},"lists":{"type":"string","enum":["none","open","closed","all"]},"cards":{"type":"string","enum":["none","open","closed","all","visible"]},"fields":{"type":"string"}},"required":["key","boardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"boards.lists","description":"List the lists (columns) on a board.","parameters":{"type":"object","properties":{"key":{"type":"string"},"boardId":{"type":"string"},"filter":{"type":"string","enum":["all","open","closed","none"]},"fields":{"type":"string"}},"required":["key","boardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.cards","description":"List cards in a list.","parameters":{"type":"object","properties":{"key":{"type":"string"},"listId":{"type":"string"},"fields":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":1000}},"required":["key","listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cards.get","description":"Read a single card by id.","parameters":{"type":"object","properties":{"key":{"type":"string"},"cardId":{"type":"string"},"fields":{"type":"string"},"members":{"type":"boolean"},"checklists":{"type":"string","enum":["none","all"]}},"required":["key","cardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"search","description":"Search across boards, cards, organizations, and members.","parameters":{"type":"object","properties":{"key":{"type":"string"},"query":{"type":"string"},"modelTypes":{"type":"string","description":"Comma-separated: actions,boards,cards,members,organizations."},"board_fields":{"type":"string"},"cards_limit":{"type":"integer","minimum":1,"maximum":1000}},"required":["key","query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"cards.create","description":"Create a card in a list. Pass `idList` plus optional `name`, `desc`, `pos`, `due`, `idMembers`, `idLabels`.","parameters":{"type":"object","properties":{"key":{"type":"string"},"idList":{"type":"string"},"name":{"type":"string"},"desc":{"type":"string"},"pos":{"type":"string","description":"top, bottom, or a positive float."},"due":{"type":"string","description":"ISO 8601 due date."},"idMembers":{"type":"array","items":{"type":"string"}},"idLabels":{"type":"array","items":{"type":"string"}}},"required":["key","idList"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cards.update","description":"Update fields on an existing card.","parameters":{"type":"object","properties":{"key":{"type":"string"},"cardId":{"type":"string"},"name":{"type":"string"},"desc":{"type":"string"},"closed":{"type":"boolean"},"idList":{"type":"string"},"idBoard":{"type":"string"},"pos":{"type":"string"},"due":{"type":"string"},"dueComplete":{"type":"boolean"}},"required":["key","cardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"cards.move","description":"Move a card to a different list (and optionally position).","parameters":{"type":"object","properties":{"key":{"type":"string"},"cardId":{"type":"string"},"idList":{"type":"string"},"pos":{"type":"string"}},"required":["key","cardId","idList"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"cards.archive","description":"Archive (closed=true) a card without deleting it.","parameters":{"type":"object","properties":{"key":{"type":"string"},"cardId":{"type":"string"}},"required":["key","cardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"cards.delete","description":"Permanently delete a card.","parameters":{"type":"object","properties":{"key":{"type":"string"},"cardId":{"type":"string"}},"required":["key","cardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"cards.addComment","description":"Post a comment on a card.","parameters":{"type":"object","properties":{"key":{"type":"string"},"cardId":{"type":"string"},"text":{"type":"string"}},"required":["key","cardId","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cards.addLabel","description":"Attach an existing label to a card.","parameters":{"type":"object","properties":{"key":{"type":"string"},"cardId":{"type":"string"},"labelId":{"type":"string"}},"required":["key","cardId","labelId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"cards.addMember","description":"Assign a Trello member to a card.","parameters":{"type":"object","properties":{"key":{"type":"string"},"cardId":{"type":"string"},"memberId":{"type":"string"}},"required":["key","cardId","memberId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.create","description":"Create a list on a board.","parameters":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"idBoard":{"type":"string"},"pos":{"type":"string"}},"required":["key","name","idBoard"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.update","description":"Update a list (rename, archive via closed=true, reposition).","parameters":{"type":"object","properties":{"key":{"type":"string"},"listId":{"type":"string"},"name":{"type":"string"},"closed":{"type":"boolean"},"pos":{"type":"string"},"idBoard":{"type":"string"}},"required":["key","listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"boards.create","description":"Create a new Trello board.","parameters":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"desc":{"type":"string"},"idOrganization":{"type":"string"},"defaultLists":{"type":"boolean"},"prefs_permissionLevel":{"type":"string","enum":["private","org","public"]}},"required":["key","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"checklists.create","description":"Create a checklist on a card.","parameters":{"type":"object","properties":{"key":{"type":"string"},"idCard":{"type":"string"},"name":{"type":"string"},"pos":{"type":"string"}},"required":["key","idCard"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"checklists.addItem","description":"Add a check item to an existing checklist.","parameters":{"type":"object","properties":{"key":{"type":"string"},"checklistId":{"type":"string"},"name":{"type":"string"},"pos":{"type":"string"},"checked":{"type":"boolean"}},"required":["key","checklistId","name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.archive","description":"Archive a list (closed=true) without deleting it.","parameters":{"type":"object","properties":{"key":{"type":"string"},"listId":{"type":"string"}},"required":["key","listId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"boards.update","description":"Update a board (rename, description, prefs, closed state).","parameters":{"type":"object","properties":{"key":{"type":"string"},"boardId":{"type":"string"},"name":{"type":"string"},"desc":{"type":"string"},"closed":{"type":"boolean"},"subscribed":{"type":"boolean"},"prefs/permissionLevel":{"type":"string","enum":["private","org","public"]},"prefs/background":{"type":"string"}},"required":["key","boardId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"checklists.checkItem","description":"Mark a check item complete (or incomplete) on a card.","parameters":{"type":"object","properties":{"key":{"type":"string"},"cardId":{"type":"string"},"checkItemId":{"type":"string"},"state":{"type":"string","enum":["complete","incomplete"],"description":"Defaults to complete."}},"required":["key","cardId","checkItemId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"labels.create","description":"Create a label on a board.","parameters":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"color":{"type":"string","description":"Trello label color (yellow, purple, blue, red, green, orange, black, sky, pink, lime, null)."},"idBoard":{"type":"string"}},"required":["key","name","color","idBoard"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.create","description":"Create a webhook subscribing to events on a Trello model (board/card/list/member).","parameters":{"type":"object","properties":{"key":{"type":"string"},"callbackURL":{"type":"string","description":"Public HTTPS endpoint Trello will POST events to."},"idModel":{"type":"string","description":"Trello object id (board, card, list, member) to subscribe to."},"description":{"type":"string"},"active":{"type":"boolean"}},"required":["key","callbackURL","idModel"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"twenty","displayName":"Twenty","description":"Open-source CRM platform. Create and manage contacts, companies, and opportunities.","auth":{"kind":"api-key","hint":"Twenty API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.create","description":"Create a new contact in Twenty.","parameters":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"}},"required":["firstName","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.find","description":"Find a person by email or other criteria.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.update","description":"Update a contact in Twenty.","parameters":{"type":"object","properties":{"personId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"}},"required":["personId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"companies.create","description":"Create a new company in Twenty.","parameters":{"type":"object","properties":{"name":{"type":"string"},"domainName":{"type":"string"},"address":{"type":"string"},"employees":{"type":"integer"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"companies.find","description":"Find a company by name or domain.","parameters":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"companies.update","description":"Update a company in Twenty.","parameters":{"type":"object","properties":{"companyId":{"type":"string"},"name":{"type":"string"},"domainName":{"type":"string"},"address":{"type":"string"},"employees":{"type":"integer"}},"required":["companyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"opportunities.create","description":"Create a new opportunity in Twenty.","parameters":{"type":"object","properties":{"name":{"type":"string"},"amount":{"type":"number"},"currency":{"type":"string"},"stage":{"type":"string"},"closeDate":{"type":"string"},"companyId":{"type":"string"}},"required":["name","companyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.update","description":"Update an opportunity in Twenty.","parameters":{"type":"object","properties":{"opportunityId":{"type":"string"},"name":{"type":"string"},"amount":{"type":"number"},"currency":{"type":"string"},"stage":{"type":"string"},"closeDate":{"type":"string"}},"required":["opportunityId","name","amount","currency","stage","closeDate"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"opportunities.delete","description":"Delete an opportunity in Twenty.","parameters":{"type":"object","properties":{"opportunityId":{"type":"string"}},"required":["opportunityId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.delete","description":"Delete a person/contact in Twenty.","parameters":{"type":"object","properties":{"personId":{"type":"string"}},"required":["personId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"companies.delete","description":"Delete a company in Twenty.","parameters":{"type":"object","properties":{"companyId":{"type":"string"}},"required":["companyId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.create","description":"Add a note to a contact, company, or opportunity in Twenty.","parameters":{"type":"object","properties":{"title":{"type":"string"},"body":{"type":"string"},"targetType":{"type":"string","description":"Type of object the note is attached to (person, company, opportunity)"},"targetId":{"type":"string","description":"ID of the object the note is attached to"}},"required":["title","body","targetType","targetId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"twilio","displayName":"Twilio","description":"Send SMS messages, make outbound calls, manage messages and recordings.","auth":{"kind":"api-key","hint":"Twilio Account SID and Auth Token (format: AccountSid:AuthToken)."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"messages.send","description":"Send an SMS message to a phone number.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Recipient phone number in E.164 format."},"from":{"type":"string","description":"Sender phone number in E.164 format."},"body":{"type":"string","description":"Message body text."}},"required":["to","from","body"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.get","description":"Retrieve a specific message by SID.","parameters":{"type":"object","properties":{"messageSid":{"type":"string","description":"The unique identifier of the message."}},"required":["messageSid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.list","description":"List messages on the account, optionally filtered by date range.","parameters":{"type":"object","properties":{"dateSentAfter":{"type":"string","description":"ISO 8601 date to filter messages sent after."},"dateSentBefore":{"type":"string","description":"ISO 8601 date to filter messages sent before."},"limit":{"type":"integer","minimum":1,"maximum":1000,"default":50}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.make","description":"Make an outbound call to a phone number.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Recipient phone number in E.164 format."},"from":{"type":"string","description":"Caller phone number in E.164 format."},"url":{"type":"string","description":"URL containing TwiML instructions for the call."},"timeout":{"type":"integer","description":"Timeout in seconds to ring before hanging up."}},"required":["to","from","url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.get","description":"Retrieve details of a specific call by SID.","parameters":{"type":"object","properties":{"callSid":{"type":"string","description":"The unique identifier of the call."}},"required":["callSid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"calls.list","description":"List calls on the account.","parameters":{"type":"object","properties":{"status":{"type":"string","enum":["queued","ringing","in-progress","completed","failed","busy","no-answer","canceled"],"description":"Filter calls by status."},"limit":{"type":"integer","minimum":1,"maximum":1000,"default":50}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"recordings.get","description":"Retrieve a recording by SID.","parameters":{"type":"object","properties":{"recordingSid":{"type":"string","description":"The unique identifier of the recording."}},"required":["recordingSid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"recordings.list","description":"List recordings on the account.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":1000,"default":50}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"messages.delete","description":"Delete a message record (irreversible — purges the message and its body from logs).","parameters":{"type":"object","properties":{"messageSid":{"type":"string","description":"The unique identifier of the message (SM…)."}},"required":["messageSid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.cancel","description":"Cancel a queued or ringing call by setting its Status to canceled.","parameters":{"type":"object","properties":{"callSid":{"type":"string","description":"The unique identifier of the call (CA…)."}},"required":["callSid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.update","description":"Update an in-progress call — redirect TwiML, hang up, or mute via the Status field.","parameters":{"type":"object","properties":{"callSid":{"type":"string","description":"The unique identifier of the call (CA…)."},"Url":{"type":"string","description":"Optional new TwiML URL to redirect the call to."},"Method":{"type":"string","enum":["GET","POST"],"description":"HTTP method Twilio uses when fetching the new URL."},"Status":{"type":"string","enum":["canceled","completed"],"description":"Set \"completed\" to hang up an in-progress call."}},"required":["callSid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"numbers.list","description":"List IncomingPhoneNumbers on the account.","parameters":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"Optional exact-match filter on the E.164 number."},"limit":{"type":"integer","minimum":1,"maximum":1000,"default":50}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"numbers.update","description":"Update an IncomingPhoneNumber configuration (voice/SMS webhook URLs, friendly name).","parameters":{"type":"object","properties":{"phoneNumberSid":{"type":"string","description":"The unique identifier of the phone number resource (PN…)."},"FriendlyName":{"type":"string","description":"Optional friendly label."},"SmsUrl":{"type":"string","description":"Optional URL Twilio fetches when an SMS comes in."},"VoiceUrl":{"type":"string","description":"Optional URL Twilio fetches when a call comes in."}},"required":["phoneNumberSid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"twilio-sms","displayName":"Twilio SMS","description":"Send outbound SMS, look up phone numbers, and audit recent messages. Twilio's native Idempotency-Key prevents duplicate sends on retry.","auth":{"kind":"api-key","hint":"Paste your Twilio credentials as \"AccountSid:AuthToken\" (e.g. \"AC123…:abc…\"). API-key style \"AccountSid:KeySid:Secret\" is also accepted."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"send_sms","class":"mutation","description":"Send an SMS from the configured Twilio number to the supplied destination.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"to":{"type":"string","description":"E.164 destination, e.g. +14155551212"},"body":{"type":"string","description":"Message body (≤1600 chars after Twilio segments)."},"from":{"type":"string","description":"Optional E.164 sender; falls back to metadata.fromNumber."}},"required":["to","body"]}},{"name":"lookup_number","class":"read","description":"Validate a phone number and (if your account has Lookup) retrieve carrier metadata.","parameters":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"E.164 number to look up."},"includeCarrier":{"type":"boolean","default":false}},"required":["phoneNumber"]}},{"name":"find_recent_messages","class":"read","description":"Return up to `limit` recent Messages on the account, optionally filtered by To or From.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Optional E.164 filter on the To address."},"from":{"type":"string","description":"Optional E.164 filter on the From address."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}}}},{"name":"send_mms","class":"mutation","description":"Send an MMS message with one or more media URLs attached.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"to":{"type":"string","description":"E.164 destination."},"body":{"type":"string","description":"Optional MMS body (may be empty when only sending media)."},"from":{"type":"string","description":"Optional E.164 sender; falls back to metadata.fromNumber."},"mediaUrl":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"One or more media URLs Twilio should attach to the MMS."}},"required":["to","mediaUrl"]}},{"name":"send_whatsapp","class":"mutation","description":"Send a WhatsApp message via Twilio (To/From use the whatsapp: prefix).","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"to":{"type":"string","description":"E.164 destination (the connector prepends `whatsapp:` if missing)."},"body":{"type":"string","description":"WhatsApp message body."},"from":{"type":"string","description":"Optional sender; falls back to metadata.whatsappFromNumber or metadata.fromNumber."}},"required":["to","body"]}},{"name":"redact_message","class":"mutation","description":"Redact the body of an already-delivered SMS by SID. Sets Body=\"\" on the Message resource.","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","properties":{"messageSid":{"type":"string","description":"SID of the Message to redact (SM…)."}},"required":["messageSid"]}},{"name":"list_numbers","class":"read","description":"List the IncomingPhoneNumbers owned by the account.","parameters":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"Optional exact-match filter on the E.164 number."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}}}}]},{"kind":"twin-labs","displayName":"Twin Labs","description":"Automate web browsing tasks with AI-driven task execution.","auth":{"kind":"api-key","hint":"Twin Labs API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"browsing.start","description":"Start a new browsing task with a goal and initial URL.","parameters":{"type":"object","properties":{"startUrl":{"type":"string","description":"The URL where the browsing task should begin"},"goal":{"type":"string","description":"The goal or objective of the browsing task"}},"required":["startUrl","goal"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"browsing.stop","description":"Stop an in-progress browsing session.","parameters":{"type":"object","properties":{"sessionId":{"type":"string","description":"Identifier of the browsing session to stop."}},"required":["sessionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"browsing.get","description":"Fetch the current state of a browsing session, including status, current URL, and a screenshot URL.","parameters":{"type":"object","properties":{"sessionId":{"type":"string","description":"Identifier of the browsing session to inspect."}},"required":["sessionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"twitter","displayName":"Twitter","description":"Read and verify Twitter/X engagement (follows, tweets, likes, retweets, mentions) and post or reply to tweets.","auth":{"kind":"one_of","preferred":"oauth2","options":[{"kind":"oauth2","authorizationUrl":"https://twitter.com/i/oauth2/authorize","tokenUrl":"https://api.twitter.com/2/oauth2/token","scopes":["tweet.read","tweet.write","media.write","users.read","follows.read","like.write","like.read","offline.access"],"clientIdEnv":"TWITTER_OAUTH_CLIENT_ID","clientSecretEnv":"TWITTER_OAUTH_CLIENT_SECRET","tokenClientAuthMethod":"client_secret_basic"},{"kind":"api-key","hint":"Twitter/X OAuth 2.0 bearer token or app/user access token."}]},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tweets.create","description":"Post a new tweet.","parameters":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tweets.reply","description":"Reply to an existing tweet.","parameters":{"type":"object","properties":{"text":{"type":"string"},"replyTo":{"type":"string"}},"required":["text","replyTo"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tweets.delete","description":"Delete a tweet authored by the authenticated user.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Tweet id to delete."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tweets.like","description":"Like a tweet on behalf of the authenticated user.","parameters":{"type":"object","properties":{"user_id":{"type":"string","description":"Authenticated user id performing the like."},"tweet_id":{"type":"string","description":"Tweet id to like."}},"required":["user_id","tweet_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tweets.retweet","description":"Retweet a tweet on behalf of the authenticated user.","parameters":{"type":"object","properties":{"user_id":{"type":"string","description":"Authenticated user id performing the retweet."},"tweet_id":{"type":"string","description":"Tweet id to retweet."}},"required":["user_id","tweet_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"dms.send","description":"Send a direct message to a participant.","parameters":{"type":"object","properties":{"participant_id":{"type":"string","description":"Recipient user id."},"text":{"type":"string","description":"Message text body."}},"required":["participant_id","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.me","description":"Resolve the connected account (id, name, username) — anchors every other read. Pass user_fields (e.g. \"public_metrics,created_at\") to also fetch follower count and account age for anti-bot gating.","parameters":{"type":"object","properties":{"user_fields":{"type":"string","description":"Optional X `user.fields` selector, e.g. \"public_metrics,created_at\"."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.following","description":"List the accounts a user follows, for verifying follows and followed_by. Cursor with pagination_token. Gated behind a paid X API tier.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"User id whose following list to read (from users.me)."},"max_results":{"type":"integer","description":"Page size (1–1000)."},"pagination_token":{"type":"string","description":"Cursor from a prior page (meta.next_token)."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.by.username","description":"Resolve a handle to its numeric user id (and name) — for followed_by (resolve target → list users.following) and mentioned-with-target (resolve target → filter users.mentions by author_id). Returns { id, name, username }.","parameters":{"type":"object","properties":{"username":{"type":"string","description":"Twitter/X handle WITHOUT a leading @; resolves to a numeric user id."}},"required":["username"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.tweets","description":"List recent tweets authored by a user, for verifying tweeted. Hashtag filtering is applied by the caller. Cursor with pagination_token.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Author user id (from users.me)."},"max_results":{"type":"integer","description":"Page size (5–100)."},"pagination_token":{"type":"string","description":"Cursor from a prior page (meta.next_token)."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tweets.retweetedBy","description":"List the accounts that retweeted a tweet, for verifying retweeted. Cursor with pagination_token. Gated behind a paid X API tier.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Tweet id to inspect."},"max_results":{"type":"integer","description":"Page size (1–100)."},"pagination_token":{"type":"string","description":"Cursor from a prior page (meta.next_token)."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tweets.likingUsers","description":"List the accounts that liked a tweet, for verifying liked. Requires the like.read scope and a paid X API tier.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Tweet id to inspect."},"max_results":{"type":"integer","description":"Page size (1–100)."},"pagination_token":{"type":"string","description":"Cursor from a prior page (meta.next_token)."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.mentions","description":"List tweets that mention a user, for verifying mentioned. Author filtering is applied by the caller. Cursor with pagination_token.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Mentioned user id (from users.me)."},"max_results":{"type":"integer","description":"Page size (5–100)."},"pagination_token":{"type":"string","description":"Cursor from a prior page (meta.next_token)."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"typeform","displayName":"Typeform","description":"Read Typeform forms and responses, edit forms, and manage webhook subscriptions for response.received events.","auth":{"kind":"oauth2","authorizationUrl":"https://api.typeform.com/oauth/authorize","tokenUrl":"https://api.typeform.com/oauth/token","scopes":["forms:read","forms:write","responses:read","webhooks:read","webhooks:write","workspaces:read","accounts:read","offline"],"clientIdEnv":"TYPEFORM_OAUTH_CLIENT_ID","clientSecretEnv":"TYPEFORM_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"account.get","description":"Get the authenticated Typeform account.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.list","description":"List forms in the connected workspace; supports pagination and search.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":200},"search":{"type":"string","description":"Substring filter against form titles."},"workspace_id":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.get","description":"Read a single form definition by id.","parameters":{"type":"object","properties":{"form_id":{"type":"string"}},"required":["form_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"responses.list","description":"List responses to a form; supports cursor-style pagination via since/until/before/after and the answered-fields filter.","parameters":{"type":"object","properties":{"form_id":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":1000},"since":{"type":"string","description":"ISO-8601 lower bound (inclusive)."},"until":{"type":"string","description":"ISO-8601 upper bound (exclusive)."},"before":{"type":"string","description":"Response token cursor — return responses submitted before this token."},"after":{"type":"string","description":"Response token cursor — return responses submitted after this token."},"included_response_ids":{"type":"string","description":"Comma-separated response tokens to include."},"completed":{"type":"boolean"},"sort":{"type":"string","description":"e.g. \"submitted_at,asc\" or \"submitted_at,desc\"."},"query":{"type":"string","description":"Free-text search across response answers."},"fields":{"type":"string","description":"Comma-separated answer field ids to include."}},"required":["form_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"responses.delete","description":"Delete one or more responses by response token. Irreversible — the responses are removed from analytics and exports.","parameters":{"type":"object","properties":{"form_id":{"type":"string"},"included_tokens":{"type":"string","description":"Comma-separated response tokens to delete."}},"required":["form_id","included_tokens"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.update","description":"Replace a Typeform form definition (PUT semantics — the body must be the complete form).","parameters":{"type":"object","properties":{"form_id":{"type":"string"},"fields":{"type":"object","description":"Complete form payload — title, fields[], welcome_screens, thankyou_screens, settings, theme, workspace, hidden, logic."}},"required":["form_id","fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"webhooks.list","description":"List webhook subscriptions on a form.","parameters":{"type":"object","properties":{"form_id":{"type":"string"}},"required":["form_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"webhooks.get","description":"Read a single webhook subscription by tag.","parameters":{"type":"object","properties":{"form_id":{"type":"string"},"tag":{"type":"string","description":"Caller-chosen webhook identifier."}},"required":["form_id","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"webhooks.upsert","description":"Create or update a webhook subscription on a form. PUT against the tag is idempotent — repeat calls with the same tag overwrite the prior subscription.","parameters":{"type":"object","properties":{"form_id":{"type":"string"},"tag":{"type":"string"},"url":{"type":"string","description":"HTTPS endpoint Typeform should POST submissions to."},"enabled":{"type":"boolean"},"secret":{"type":"string","description":"Shared secret used to sign payloads via Typeform-Signature header."},"verify_ssl":{"type":"boolean"}},"required":["form_id","tag","url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Delete a webhook subscription by tag.","parameters":{"type":"object","properties":{"form_id":{"type":"string"},"tag":{"type":"string"}},"required":["form_id","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"workspaces.list","description":"List workspaces the connected account can access.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":200},"search":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.create","description":"Create a new form. Body must be the complete form payload (title, fields[], settings, theme, workspace, ...).","parameters":{"type":"object","properties":{"fields":{"type":"object","description":"Full form payload — title, fields[], welcome_screens, thankyou_screens, settings, theme, workspace, hidden, logic."}},"required":["fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.delete","description":"Delete a form. Irreversible — wipes the form, its responses, and webhook subscriptions.","parameters":{"type":"object","properties":{"form_id":{"type":"string"}},"required":["form_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"themes.list","description":"List themes available to the connected account.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":200}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"images.create","description":"Upload an image used in forms. Provide either a base64-encoded `image` envelope or a remote `url`; `file_name` is required.","parameters":{"type":"object","properties":{"file_name":{"type":"string","description":"File name (with extension) Typeform should store under."},"image":{"type":"object","description":"Base64 image envelope: { value: <base64>, type: \"image/png\" }.","properties":{"value":{"type":"string"},"type":{"type":"string"}}},"url":{"type":"string","description":"Optional remote URL Typeform should fetch the image from (alternative to `image`)."}},"required":["file_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"typefully","displayName":"Typefully","description":"Write, schedule, and publish social media content across multiple platforms.","auth":{"kind":"api-key","hint":"Typefully API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"drafts.create","description":"Create a new social media draft.","parameters":{"type":"object","properties":{"text":{"type":"string"},"platforms":{"type":"array","items":{"type":"string"}},"draft_title":{"type":"string"},"reply_to_url":{"type":"string"}},"required":["text","platforms"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"drafts.createAdvanced","description":"Create a new social media draft with advanced options.","parameters":{"type":"object","properties":{"text":{"type":"string"},"platforms_json":{"type":"object"},"draft_title":{"type":"string"},"share":{"type":"boolean"},"publish_at":{"type":"string"}},"required":["text","platforms_json"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"drafts.get","description":"Get details of a specific draft.","parameters":{"type":"object","properties":{"draft_id":{"type":"string"}},"required":["draft_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"drafts.list","description":"List drafts with optional filtering and sorting.","parameters":{"type":"object","properties":{"status":{"type":"string"},"order_by":{"type":"string"},"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"drafts.delete","description":"Delete a draft.","parameters":{"type":"object","properties":{"draft_id":{"type":"string"}},"required":["draft_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"drafts.publishNow","description":"Publish a draft immediately.","parameters":{"type":"object","properties":{"draft_id":{"type":"string"}},"required":["draft_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"drafts.schedule","description":"Schedule a draft for publishing at a specific date and time.","parameters":{"type":"object","properties":{"draft_id":{"type":"string"},"schedule_at":{"type":"string"}},"required":["draft_id","schedule_at"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.upload","description":"Upload media file (image, video, GIF, or PDF) for use in drafts.","parameters":{"type":"object","properties":{"file":{"type":"string"}},"required":["file"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"drafts.update","description":"Update an existing draft's content or scheduling fields.","parameters":{"type":"object","properties":{"draft_id":{"type":"string"},"text":{"type":"string"},"draft_title":{"type":"string"},"platforms":{"type":"array","items":{"type":"string"}},"schedule_at":{"type":"string"}},"required":["draft_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"drafts.unschedule","description":"Unschedule a previously scheduled draft.","parameters":{"type":"object","properties":{"draft_id":{"type":"string"}},"required":["draft_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"accounts.list","description":"List connected social accounts.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"media.delete","description":"Delete a previously uploaded media asset.","parameters":{"type":"object","properties":{"media_id":{"type":"string"}},"required":["media_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"umami","displayName":"Umami","description":"Privacy-focused, open-source web analytics. Query website stats, metrics, visitors, and send custom events.","auth":{"kind":"api-key","hint":"Umami API token or basic auth credentials (base64-encoded username:password)."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"websites.list","description":"List all websites in the Umami instance.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"website.stats","description":"Get website stats including pageviews, visitors, bounce rate, and session duration.","parameters":{"type":"object","properties":{"websiteId":{"type":"string","description":"The website ID."},"startDate":{"type":"string","description":"Start date (ISO 8601 format)."},"endDate":{"type":"string","description":"End date (ISO 8601 format)."},"unit":{"type":"string","description":"Group by unit: day, week, month, year."},"timezone":{"type":"string","description":"Timezone (e.g., Europe/Paris, UTC)."}},"required":["websiteId","startDate","endDate"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"website.metrics","description":"Get website metrics ranked by a specified metric type.","parameters":{"type":"object","properties":{"websiteId":{"type":"string","description":"The website ID."},"startDate":{"type":"string","description":"Start date (ISO 8601 format)."},"endDate":{"type":"string","description":"End date (ISO 8601 format)."},"type":{"type":"string","description":"Metric type: pageviews, visitors, bounce_rate, duration."},"limit":{"type":"integer","description":"Maximum number of results."}},"required":["websiteId","startDate","endDate","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"website.active_visitors","description":"Get the number of active visitors on a website right now.","parameters":{"type":"object","properties":{"websiteId":{"type":"string","description":"The website ID."}},"required":["websiteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"website.pageviews","description":"Get pageview data for a website.","parameters":{"type":"object","properties":{"websiteId":{"type":"string","description":"The website ID."},"startDate":{"type":"string","description":"Start date (ISO 8601 format)."},"endDate":{"type":"string","description":"End date (ISO 8601 format)."},"unit":{"type":"string","description":"Group by unit: day, week, month, year."},"limit":{"type":"integer","description":"Maximum number of results."}},"required":["websiteId","startDate","endDate"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"event.send","description":"Send a custom event or pageview to Umami.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Page URL or path."},"referrer":{"type":"string","description":"Referrer URL."},"eventName":{"type":"string","description":"Custom event name (optional; omit for pageview)."},"eventData":{"type":"object","description":"Additional event properties."},"title":{"type":"string","description":"Page title."},"hostname":{"type":"string","description":"Website hostname."},"language":{"type":"string","description":"User language."},"screenResolution":{"type":"string","description":"Screen resolution (WIDTHxHEIGHT)."},"userAgent":{"type":"string","description":"User agent string."}},"required":["url","hostname"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"websites.create","description":"Create a new tracked website.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Display name of the website."},"domain":{"type":"string","description":"Primary domain (e.g., example.com)."},"shareId":{"type":"string","description":"Optional public share token."},"teamId":{"type":"string","description":"Team owning the website."}},"required":["name","domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"websites.update","description":"Update settings on an existing website.","parameters":{"type":"object","properties":{"websiteId":{"type":"string","description":"The website ID."},"name":{"type":"string"},"domain":{"type":"string"},"shareId":{"type":"string"}},"required":["websiteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"websites.delete","description":"Delete a tracked website and its analytics data.","parameters":{"type":"object","properties":{"websiteId":{"type":"string","description":"The website ID."}},"required":["websiteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"teams.list","description":"List teams the authenticated user belongs to.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"upgradechat","displayName":"Upgrade.chat","description":"Manage contacts, subscriptions, invoices, and products in Upgrade.chat.","auth":{"kind":"api-key","hint":"Upgrade.chat API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.add_or_update","description":"Add or update a contact.","parameters":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"email1":{"type":"string"},"companyName":{"type":"string"},"mobilePhone":{"type":"string"}},"required":["firstName","lastName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.get","description":"Get contact details by ID.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscriptions.add_or_update","description":"Add or update a subscription.","parameters":{"type":"object","properties":{"productCode":{"type":"string"},"paymentPeriodType":{"type":"string"},"status":{"type":"string"},"contactId":{"type":"string"}},"required":["productCode","paymentPeriodType","status"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.create","description":"Create an invoice.","parameters":{"type":"object","properties":{"productCode":{"type":"string"},"paymentPeriodType":{"type":"string"},"status":{"type":"string"},"invoiceNo":{"type":"integer"},"date":{"type":"string"},"dueDate":{"type":"string"},"currencyId":{"type":"string"},"grandTotal":{"type":"number"},"invoiceDescription":{"type":"string"},"quantity":{"type":"integer"}},"required":["productCode","paymentPeriodType","status","invoiceNo","date","dueDate","currencyId","invoiceDescription","quantity"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.create","description":"Create a product.","parameters":{"type":"object","properties":{"name":{"type":"string"},"code":{"type":"string"},"productType":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"unit":{"type":"string"},"frequency":{"type":"string"}},"required":["name","code","productType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.cancel","description":"Cancel a recurring subscription.","parameters":{"type":"object","properties":{"subscriptionId":{"type":"string"},"reason":{"type":"string"}},"required":["subscriptionId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.update","description":"Update a product.","parameters":{"type":"object","properties":{"productId":{"type":"string"},"name":{"type":"string"},"code":{"type":"string"},"productType":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"unit":{"type":"string"},"frequency":{"type":"string"}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.delete","description":"Delete a product.","parameters":{"type":"object","properties":{"productId":{"type":"string"}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.refund","description":"Refund an invoice.","parameters":{"type":"object","properties":{"invoiceId":{"type":"string"},"amount":{"type":"number"},"reason":{"type":"string"}},"required":["invoiceId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"uscreen","displayName":"Uscreen","description":"Create users, assign access, and manage video monetization content.","auth":{"kind":"api-key","hint":"Uscreen API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.create","description":"Create a new user in Uscreen.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"The new user email address."},"first_name":{"type":"string","description":"The new user first name."},"last_name":{"type":"string","description":"The new user last name."},"password":{"type":"string","description":"The new user password."},"opted_in_for_news_and_updates":{"type":"boolean","description":"Whether the user opted in for news and updates."},"custom_fields":{"type":"object","description":"Custom fields defined in your storefront."}},"required":["email","first_name","last_name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"access.assign","description":"Assign user access to content or courses in Uscreen.","parameters":{"type":"object","properties":{"user_id":{"type":"string","description":"The user ID to assign access to."},"product_id":{"type":"string","description":"The product or course ID to grant access to."},"perform_action_at":{"type":"string","description":"ISO 8601 datetime to schedule the access assignment."},"with_manual_billing":{"type":"boolean","description":"Whether to apply manual billing for offers."}},"required":["user_id","product_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.update","description":"Update an existing Uscreen user account.","parameters":{"type":"object","properties":{"user_id":{"type":"string","description":"The ID of the user to update."},"email":{"type":"string","description":"Updated email address."},"first_name":{"type":"string","description":"Updated first name."},"last_name":{"type":"string","description":"Updated last name."},"password":{"type":"string","description":"Updated password."},"opted_in_for_news_and_updates":{"type":"boolean","description":"Updated opt-in preference."},"custom_fields":{"type":"object","description":"Updated custom fields."}},"required":["user_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.delete","description":"Delete a Uscreen user account.","parameters":{"type":"object","properties":{"user_id":{"type":"string","description":"The ID of the user to delete."}},"required":["user_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"access.revoke","description":"Revoke a user's content or course access in Uscreen.","parameters":{"type":"object","properties":{"user_id":{"type":"string","description":"The user ID whose access is being revoked."},"product_id":{"type":"string","description":"The product or course ID to revoke."}},"required":["user_id","product_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.list","description":"List Uscreen users with optional pagination.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1,"description":"Page number."},"per_page":{"type":"integer","minimum":1,"maximum":100,"description":"Results per page."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"usergems","displayName":"UserGems","description":"Job-change and relationship tracking ingestion API. Add or remove contacts and accounts on watchlists so UserGems surfaces job-change and buying signals for them.","auth":{"kind":"api-key","hint":"API key requested via support@usergems.com. Sent as the X-Api-Key header."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.add","description":"Add a contact to your UserGems tracking list so job changes and signals are monitored. Email is required; many profile and custom signal fields are optional.","parameters":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"fullName":{"type":"string"},"company":{"type":"string"},"relationshipType":{"type":"string"},"linkedinUrl":{"type":"string"},"signal":{"type":"string"},"custom":{"type":"object"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.delete","description":"Remove a contact from your UserGems tracking list by email.","parameters":{"type":"object","properties":{"email":{"type":"string"},"relationshipType":{"type":"string"},"signal":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"accounts.add","description":"Add an account (company) for which you want to receive new-prospect and signal reports. Name and domain are required.","parameters":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"},"reportName":{"type":"string"},"signal":{"type":"string"},"salesforceId":{"type":"string"},"customId":{"type":"string"},"custom":{"type":"object"}},"required":["name","domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"accounts.delete","description":"Remove a previously added account by name and domain.","parameters":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"},"reportName":{"type":"string"},"signal":{"type":"string"},"salesforceId":{"type":"string"},"customId":{"type":"string"}},"required":["name","domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"validatedmails","displayName":"ValidatedMails","description":"Validate email addresses in real time and retrieve status, score, and domain-level deliverability signals.","auth":{"kind":"api-key","hint":"ValidatedMails API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"email.validate","description":"Validate an email address in real time and return status, score, and domain-level deliverability signals.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"The email address to validate."},"dnsTimeoutMs":{"type":"integer","description":"DNS timeout in milliseconds. Value is clamped between 200 and 5000."},"mode":{"type":"string","description":"HTTP method used for validation request.","enum":["smtp","dns"]}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"vapi","displayName":"Vapi","description":"AI voice agent platform. Create outbound calls, manage assistants, and retrieve call details.","auth":{"kind":"api-key","hint":"Vapi API key from your Vapi Dashboard."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"calls.create","description":"Create an outbound call with Vapi.","parameters":{"type":"object","properties":{"assistantId":{"type":"string","description":"The ID of the assistant handling the call."},"phoneNumberId":{"type":"string","description":"The ID of the phone number making the call."},"customerNumber":{"type":"string","description":"The phone number to call (E.164 format)."},"name":{"type":"string","description":"Optional name for the call."},"assistantOverrides":{"type":"object","description":"Optional assistant configuration overrides."}},"required":["assistantId","phoneNumberId","customerNumber"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"calls.get","description":"Retrieve details of a specific call.","parameters":{"type":"object","properties":{"callId":{"type":"string","description":"The unique identifier of the call."}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"assistants.update","description":"Update a Vapi assistant configuration.","parameters":{"type":"object","properties":{"assistantId":{"type":"string","description":"The ID of the assistant to update."},"firstMessage":{"type":"string","description":"The first message the assistant will say."},"instructions":{"type":"string","description":"System prompt or instructions for the assistant."},"model":{"type":"string","description":"Model name (e.g., gpt-4o)."},"provider":{"type":"string","description":"Model provider (e.g., openai)."},"endCallMessage":{"type":"string","description":"Message before ending the call."},"overrides":{"type":"object","description":"Additional UpdateAssistantDTO fields."}},"required":["assistantId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"calls.hangup","description":"End an active Vapi call.","parameters":{"type":"object","properties":{"callId":{"type":"string","description":"The unique identifier of the call to end."}},"required":["callId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assistants.create","description":"Create a new Vapi voice assistant.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Display name of the assistant."},"firstMessage":{"type":"string","description":"The first message the assistant will say."},"instructions":{"type":"string","description":"System prompt or instructions for the assistant."},"model":{"type":"string","description":"Model name (e.g., gpt-4o)."},"provider":{"type":"string","description":"Model provider (e.g., openai)."},"endCallMessage":{"type":"string","description":"Message before ending the call."},"overrides":{"type":"object","description":"Additional CreateAssistantDTO fields."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"assistants.delete","description":"Delete a Vapi assistant.","parameters":{"type":"object","properties":{"assistantId":{"type":"string","description":"The ID of the assistant to delete."}},"required":["assistantId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"phone-numbers.list","description":"List provisioned Vapi phone numbers.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum number of phone numbers to return."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"vbout","displayName":"VBOUT","description":"Manage contacts, tags, and email campaigns in VBOUT marketing automation platform for agencies.","auth":{"kind":"api-key","hint":"VBOUT API key from Settings. The connection must also store the per-account email for authentication."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.get","description":"Get a contact by email address.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.list","description":"List all contacts or search with filters.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.create","description":"Add a new contact to VBOUT.","parameters":{"type":"object","properties":{"email":{"type":"string"},"ipaddress":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"phone":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update an existing contact.","parameters":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"phone":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tags.add","description":"Add a tag to a contact.","parameters":{"type":"object","properties":{"email":{"type":"string"},"tagname":{"type":"string"}},"required":["email","tagname"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.remove","description":"Remove a tag from a contact.","parameters":{"type":"object","properties":{"email":{"type":"string"},"tagname":{"type":"string"}},"required":["email","tagname"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"lists.get","description":"Get list of email lists.","parameters":{"type":"object","properties":{"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1,"maximum":100}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lists.create","description":"Create a new email list.","parameters":{"type":"object","properties":{"listname":{"type":"string"}},"required":["listname"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.create","description":"Create an email marketing campaign.","parameters":{"type":"object","properties":{"name":{"type":"string"},"subject":{"type":"string"},"fromName":{"type":"string"},"fromEmail":{"type":"string"},"replyTo":{"type":"string"},"lists":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"type":{"type":"string","enum":["standard","autoresponder"]}},"required":["name","subject","fromName","fromEmail","replyTo","lists","body","type"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.unsubscribe","description":"Unsubscribe a contact from all lists.","parameters":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"social.messages.create","description":"Create a social media message.","parameters":{"type":"object","properties":{"message":{"type":"string"},"platforms":{"type":"array","items":{"type":"string"}}},"required":["message","platforms"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.delete","description":"Delete a contact from VBOUT.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email of the contact to delete."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lists.delete","description":"Delete an email list from VBOUT.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"ID of the list to delete."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.send","description":"Send a previously created email campaign.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"ID of the campaign to send."},"schedule":{"type":"string","description":"Optional ISO 8601 datetime to schedule the send."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.delete","description":"Delete an email marketing campaign from VBOUT.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"ID of the campaign to delete."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"vercel","displayName":"Vercel","description":"List Vercel projects and deployments, create and cancel deployments, manage project environment variables, and inspect domains for a connected Vercel account or team.","auth":{"kind":"oauth2","authorizationUrl":"https://vercel.com/integrations/install","tokenUrl":"https://api.vercel.com/v2/oauth/access_token","scopes":["user:read","team:read","project:read","project:read-write","deployment:read","deployment:read-write","env:read","env:read-write","domain:read"],"clientIdEnv":"VERCEL_OAUTH_CLIENT_ID","clientSecretEnv":"VERCEL_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"user.get","description":"Return the authenticated Vercel user (id, email, username, default team).","parameters":{"type":"object","properties":{}},"requiredScopes":["user:read"],"class":"read"},{"name":"teams.list","description":"List teams the authenticated identity belongs to. Pagination via `since` (createdAt cursor) and `limit`.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"since":{"type":"integer","description":"Unix-ms cursor; return teams created before this value."},"until":{"type":"integer","description":"Unix-ms cursor; return teams created after this value."}}},"requiredScopes":["team:read"],"class":"read"},{"name":"projects.list","description":"List projects visible to the authenticated identity (optionally scoped to a team).","parameters":{"type":"object","properties":{"teamId":{"type":"string","description":"Scope to a specific team id (e.g. \"team_xxx\")."},"limit":{"type":"integer","minimum":1,"maximum":100},"search":{"type":"string","description":"Substring match against project name."},"from":{"type":"integer","description":"Unix-ms pagination cursor returned by a prior page."}}},"requiredScopes":["project:read"],"class":"read"},{"name":"projects.get","description":"Read a single Vercel project by id or name.","parameters":{"type":"object","properties":{"idOrName":{"type":"string","description":"Project id (prj_…) or project name."},"teamId":{"type":"string"}},"required":["idOrName"]},"requiredScopes":["project:read"],"class":"read"},{"name":"projects.create","description":"Create a Vercel project. Name is required; framework + gitRepository optional.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Lowercase, hyphen-separated project name."},"framework":{"type":"string","description":"Vercel framework preset slug (e.g. \"nextjs\", \"vite\", \"astro\", \"remix\")."},"gitRepository":{"type":"object","description":"Link a Git repository at creation time (optional).","properties":{"type":{"type":"string","enum":["github","gitlab","bitbucket"]},"repo":{"type":"string","description":"owner/repo slug."}}},"publicSource":{"type":"boolean"},"rootDirectory":{"type":"string"},"buildCommand":{"type":"string"},"installCommand":{"type":"string"},"outputDirectory":{"type":"string"},"devCommand":{"type":"string"},"teamId":{"type":"string","description":"Scope to a specific team id (e.g. \"team_xxx\")."}},"required":["name"]},"requiredScopes":["project:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.delete","description":"Delete a Vercel project by id or name. Destructive: removes all deployments and aliases.","parameters":{"type":"object","properties":{"idOrName":{"type":"string"},"teamId":{"type":"string"}},"required":["idOrName"]},"requiredScopes":["project:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deployments.list","description":"List deployments, optionally filtered by project, state, target, or time range.","parameters":{"type":"object","properties":{"teamId":{"type":"string"},"projectId":{"type":"string","description":"Filter by Vercel project id (prj_…)."},"app":{"type":"string","description":"Filter by project name."},"state":{"type":"string","description":"Comma-separated deployment states.","enum":["BUILDING","ERROR","INITIALIZING","QUEUED","READY","CANCELED"]},"target":{"type":"string","enum":["production","preview"]},"limit":{"type":"integer","minimum":1,"maximum":100},"since":{"type":"integer","description":"Unix-ms; deployments created after this timestamp."},"until":{"type":"integer","description":"Unix-ms; deployments created before this timestamp."}}},"requiredScopes":["deployment:read"],"class":"read"},{"name":"deployments.get","description":"Read a single deployment by id (dpl_…) or alias URL.","parameters":{"type":"object","properties":{"idOrUrl":{"type":"string","description":"Deployment id (dpl_…) or alias (myapp.vercel.app)."},"teamId":{"type":"string"},"withGitRepoInfo":{"type":"boolean"}},"required":["idOrUrl"]},"requiredScopes":["deployment:read"],"class":"read"},{"name":"deployments.create","description":"Trigger a new deployment for a project (Git-linked redeploy or file upload).","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Project name to deploy under."},"project":{"type":"string","description":"Project id (prj_…) or name (alternative to `name`)."},"target":{"type":"string","enum":["production","staging"]},"gitSource":{"type":"object","description":"Trigger a Git-based deploy (e.g. {type:\"github\",ref:\"main\",repoId:123})."},"files":{"type":"array","description":"File manifest for file-upload deploys ({file,sha,size}[]).","items":{"type":"object"}},"deploymentId":{"type":"string","description":"When set, redeploys an existing deployment by id (rollback / promote)."},"teamId":{"type":"string"},"forceNew":{"type":"boolean","description":"Force a new build even if the source is unchanged."}},"required":["name"]},"requiredScopes":["deployment:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deployments.cancel","description":"Cancel an in-progress deployment by id. No-op upstream if the deployment is already terminal.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Deployment id (dpl_…)."},"teamId":{"type":"string"}},"required":["id"]},"requiredScopes":["deployment:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"env.list","description":"List environment variables on a project.","parameters":{"type":"object","properties":{"idOrName":{"type":"string"},"teamId":{"type":"string"},"decrypt":{"type":"boolean","description":"Return decrypted plaintext values (requires env:read-write scope)."}},"required":["idOrName"]},"requiredScopes":["env:read"],"class":"read"},{"name":"env.create","description":"Create one or more environment variables on a project.","parameters":{"type":"object","properties":{"idOrName":{"type":"string"},"teamId":{"type":"string"},"key":{"type":"string","description":"Variable key (uppercase, underscore-separated)."},"value":{"type":"string","description":"Variable value. Stored encrypted upstream."},"type":{"type":"string","enum":["system","secret","encrypted","plain","sensitive"]},"target":{"type":"array","description":"Environments this var applies to.","items":{"type":"string","enum":["production","preview","development"]}},"gitBranch":{"type":"string","description":"Optional preview-branch scope."},"comment":{"type":"string"}},"required":["idOrName","key","value","type","target"]},"requiredScopes":["env:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"env.delete","description":"Delete an environment variable from a project by env-var id.","parameters":{"type":"object","properties":{"idOrName":{"type":"string"},"envId":{"type":"string"},"teamId":{"type":"string"}},"required":["idOrName","envId"]},"requiredScopes":["env:read-write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"domains.list","description":"List domains owned by the authenticated identity (or team).","parameters":{"type":"object","properties":{"teamId":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"since":{"type":"integer"},"until":{"type":"integer"}}},"requiredScopes":["domain:read"],"class":"read"},{"name":"domains.get","description":"Read a single domain by name (e.g. \"acme.com\").","parameters":{"type":"object","properties":{"domain":{"type":"string"},"teamId":{"type":"string"}},"required":["domain"]},"requiredScopes":["domain:read"],"class":"read"}]},{"kind":"videoask","displayName":"VideoAsk","description":"Manage VideoAsk forms, contacts, and responses. Create or update contacts, add/remove tags, and search forms.","auth":{"kind":"oauth2","authorizationUrl":"https://www.videoask.com/oauth/authorize","tokenUrl":"https://www.videoask.com/oauth/token","scopes":["contacts:write","contacts:read","forms:read"],"clientIdEnv":"VIDEOASK_OAUTH_CLIENT_ID","clientSecretEnv":"VIDEOASK_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.create","description":"Create a new contact in VideoAsk.","parameters":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"phone":{"type":"string"},"customFields":{"type":"object"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update an existing contact in VideoAsk.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"phone":{"type":"string"},"customFields":{"type":"object"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.tags.add","description":"Add a tag to a contact in VideoAsk.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"tag":{"type":"string"}},"required":["contactId","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.tags.remove","description":"Remove a tag from a contact in VideoAsk.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"tag":{"type":"string"}},"required":["contactId","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"forms.search","description":"Search and list VideoAsk forms.","parameters":{"type":"object","properties":{"search":{"type":"string"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.get","description":"Get details of a specific form.","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"responses.list","description":"List responses for a form.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.create","description":"Create a new VideoAsk form.","parameters":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"settings":{"type":"object"}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.update","description":"Update form configuration.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"settings":{"type":"object"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"forms.delete","description":"Delete a form.","parameters":{"type":"object","properties":{"formId":{"type":"string"}},"required":["formId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"responses.delete","description":"Delete a response.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"responseId":{"type":"string"}},"required":["formId","responseId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"vidlab7","displayName":"VidLab7","description":"Generate AI avatar videos with configurable scripts, voices, and styles.","auth":{"kind":"api-key","hint":"VidLab7 API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"videos.create","description":"Create an AI avatar video with a custom script and voice.","parameters":{"type":"object","properties":{"avatarId":{"type":"string"},"script":{"type":"string"},"voiceId":{"type":"string"},"webhookUrl":{"type":"string"},"similarity_boost":{"type":"number"},"use_speaker_boost":{"type":"boolean"},"style":{"type":"number"},"stability":{"type":"number"},"waitForCompletion":{"type":"boolean"}},"required":["avatarId","script","voiceId","webhookUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"vlm-run","displayName":"VLM Run","description":"Analyze images, videos, audio, and documents using visual AI. Extract data, detect objects, transcribe, and parse content.","auth":{"kind":"api-key","hint":"VLM Run API key from your account dashboard."},"category":"database","defaultConsistencyModel":"authoritative","capabilities":[{"name":"analyze.image","description":"Analyze an image using visual AI to extract data and detect objects.","parameters":{"type":"object","properties":{"imageUrl":{"type":"string","description":"URL of the image to analyze"},"prompt":{"type":"string","description":"Optional analysis prompt or instruction"},"mode":{"type":"string","enum":["object-detection","ocr","general"],"description":"Analysis mode"}},"required":["imageUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"analyze.video","description":"Analyze a video file to extract frames, detect objects, and summarize content.","parameters":{"type":"object","properties":{"videoUrl":{"type":"string","description":"URL of the video to analyze"},"sampleRate":{"type":"integer","description":"Frame sampling rate (frames per second)"},"prompt":{"type":"string","description":"Optional analysis instruction"}},"required":["videoUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"analyze.audio","description":"Transcribe and analyze audio content.","parameters":{"type":"object","properties":{"audioUrl":{"type":"string","description":"URL of the audio file to analyze"},"language":{"type":"string","description":"Language code (e.g., en, es, fr)"},"extractEntities":{"type":"boolean","description":"Extract named entities from transcription"}},"required":["audioUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"analyze.document","description":"Extract text and structured data from documents (PDF, images, etc.).","parameters":{"type":"object","properties":{"documentUrl":{"type":"string","description":"URL of the document to parse"},"documentType":{"type":"string","enum":["pdf","image","mixed"],"description":"Document type"},"extractTables":{"type":"boolean","description":"Extract tables as structured data"}},"required":["documentUrl"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"file.get","description":"Retrieve a previously analyzed file result.","parameters":{"type":"object","properties":{"fileId":{"type":"string","description":"ID of the analyzed file"}},"required":["fileId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"files.upload","description":"Upload a file by URL or inline base64 payload for later analysis. Returns the stored file id.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Public URL the API should fetch the file from."},"contentBase64":{"type":"string","description":"Inline base64-encoded file payload."},"filename":{"type":"string","description":"Filename to associate with the upload."},"contentType":{"type":"string","description":"MIME type of the upload."},"purpose":{"type":"string","description":"Optional purpose hint (e.g. analysis, training)."}},"required":["filename"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.delete","description":"Delete a previously-uploaded file. Idempotent: 404 is treated as success upstream.","parameters":{"type":"object","properties":{"fileId":{"type":"string","description":"ID of the file to delete."}},"required":["fileId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"jobs.list","description":"List analysis jobs, optionally filtered by status and paginated by cursor.","parameters":{"type":"object","properties":{"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"],"description":"Filter jobs by status."},"limit":{"type":"integer","description":"Maximum number of jobs to return (1-100)."},"cursor":{"type":"string","description":"Pagination cursor returned by a prior call."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobs.cancel","description":"Cancel a running analysis job. Idempotent for already-terminal jobs.","parameters":{"type":"object","properties":{"jobId":{"type":"string","description":"ID of the job to cancel."}},"required":["jobId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"vouchery-io","displayName":"Vouchery","description":"Vouchery is a voucher and gift card management platform.","auth":{"kind":"api-key","hint":"Vouchery API key."},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"vouchers.find","description":"Find a voucher by code.","parameters":{"type":"object","properties":{"code":{"type":"string"}},"required":["code"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.create","description":"Create a customer in Vouchery.","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"metadata":{"type":"object"}},"required":["identifier"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"vouchers.create","description":"Create a voucher (avoucher) in Vouchery.","parameters":{"type":"object","properties":{"code":{"type":"string"},"value":{"type":"number"},"expiresAt":{"type":"string"},"customerId":{"type":"string"}},"required":["code","value"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"vouchers.redeem","description":"Redeem a voucher by code. Optional customer_id attributes the redemption; optional amount partially redeems a value-bearing voucher.","parameters":{"type":"object","properties":{"code":{"type":"string"},"customer_id":{"type":"string"},"amount":{"type":"number"}},"required":["code"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"vouchers.void","description":"Void a voucher by code so it can no longer be redeemed. Optional reason is recorded with the void event.","parameters":{"type":"object","properties":{"code":{"type":"string"},"reason":{"type":"string"}},"required":["code"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"vtex","displayName":"VTEX","description":"Manage VTEX catalog including brands, products, SKUs, categories, clients, and orders.","auth":{"kind":"api-key","hint":"VTEX App Key and App Token with Host URL."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"brands.list","description":"Get a list of all brands.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"brands.get","description":"Get a brand by ID.","parameters":{"type":"object","properties":{"brandId":{"type":"integer","description":"The Brand ID"}},"required":["brandId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"brands.create","description":"Create a new brand.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Brand name"},"text":{"type":"string","description":"Brand text/description"},"keywords":{"type":"string","description":"Keywords for the brand"},"active":{"type":"boolean","description":"Is the brand active"},"score":{"type":"integer","description":"Score value"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"brands.update","description":"Update a brand.","parameters":{"type":"object","properties":{"brandId":{"type":"integer","description":"The Brand ID"},"name":{"type":"string","description":"Brand name"},"text":{"type":"string","description":"Brand text/description"},"keywords":{"type":"string","description":"Keywords for the brand"},"active":{"type":"boolean","description":"Is the brand active"},"score":{"type":"integer","description":"Score value"}},"required":["brandId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"brands.delete","description":"Delete a brand.","parameters":{"type":"object","properties":{"brandId":{"type":"integer","description":"The Brand ID"}},"required":["brandId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.get","description":"Get a product by ID.","parameters":{"type":"object","properties":{"productId":{"type":"integer","description":"The Product ID"}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.create","description":"Create a new product.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Product name"},"categoryId":{"type":"integer","description":"Category ID"},"brandId":{"type":"integer","description":"Brand ID"},"description":{"type":"string","description":"Product description"},"refId":{"type":"string","description":"Reference ID"},"isVisible":{"type":"boolean","description":"Is the product visible"},"descriptionShort":{"type":"string","description":"Short description"},"releaseDate":{"type":"string","description":"Release date"},"keyWords":{"type":"string","description":"Keywords"},"isActive":{"type":"boolean","description":"Is the product active"},"taxCode":{"type":"string","description":"Tax code"},"metaTagDescription":{"type":"string","description":"Meta tag description"},"showWithoutStock":{"type":"boolean","description":"Show without stock"}},"required":["name","categoryId","brandId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.update","description":"Update a product.","parameters":{"type":"object","properties":{"productId":{"type":"integer","description":"The Product ID"},"name":{"type":"string","description":"Product name"},"categoryId":{"type":"integer","description":"Category ID"},"brandId":{"type":"integer","description":"Brand ID"},"description":{"type":"string","description":"Product description"},"refId":{"type":"string","description":"Reference ID"},"isVisible":{"type":"boolean","description":"Is the product visible"},"descriptionShort":{"type":"string","description":"Short description"},"releaseDate":{"type":"string","description":"Release date"},"keyWords":{"type":"string","description":"Keywords"},"isActive":{"type":"boolean","description":"Is the product active"},"taxCode":{"type":"string","description":"Tax code"},"metaTagDescription":{"type":"string","description":"Meta tag description"},"showWithoutStock":{"type":"boolean","description":"Show without stock"}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"categories.get","description":"Get a category by ID.","parameters":{"type":"object","properties":{"categoryId":{"type":"integer","description":"The Category ID"}},"required":["categoryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"skus.list","description":"Get SKUs for a product.","parameters":{"type":"object","properties":{"productId":{"type":"integer","description":"The Product ID"}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"skus.create","description":"Create a new SKU.","parameters":{"type":"object","properties":{"productId":{"type":"integer","description":"Product ID"},"name":{"type":"string","description":"SKU name"},"packaging":{"type":"object","description":"Packaging dimensions","properties":{"height":{"type":"number","description":"Package Height"},"length":{"type":"number","description":"Package Length"},"width":{"type":"number","description":"Package Width"},"weightKg":{"type":"number","description":"Package Weight (Kg)"}}},"isKit":{"type":"boolean","description":"Is Kit"}},"required":["productId","name","packaging"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.get","description":"Get an order by ID.","parameters":{"type":"object","properties":{"orderId":{"type":"integer","description":"The Order ID"}},"required":["orderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"orders.list","description":"Get a list of orders.","parameters":{"type":"object","properties":{"fromYear":{"type":"integer","description":"From year"},"toYear":{"type":"string","description":"To year"},"fromMonth":{"type":"string","description":"From month"},"toMonth":{"type":"string","description":"To month"},"fromDay":{"type":"string","description":"From day"},"toDay":{"type":"string","description":"To day"},"limit":{"type":"integer","description":"Result limit"}},"required":["fromYear","toYear"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"clients.get","description":"Get a client by ID.","parameters":{"type":"object","properties":{"clientId":{"type":"integer","description":"The Client ID"}},"required":["clientId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"clients.list","description":"Get a list of clients.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Result limit"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.delete","description":"Delete a product.","parameters":{"type":"object","properties":{"productId":{"type":"integer","description":"The Product ID"}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"categories.create","description":"Create a new category.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Category name"},"fatherCategoryId":{"type":"integer","description":"Parent category ID"},"title":{"type":"string","description":"Category page title"},"description":{"type":"string","description":"Category description"},"keywords":{"type":"string","description":"Keywords"},"isActive":{"type":"boolean","description":"Whether the category is active"},"showInStoreFront":{"type":"boolean","description":"Show in store front"},"showBrandFilter":{"type":"boolean","description":"Show brand filter"},"activeStoreFrontLink":{"type":"boolean","description":"Active store front link"},"globalCategoryId":{"type":"integer","description":"Global category ID"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"skus.update","description":"Update an SKU.","parameters":{"type":"object","properties":{"skuId":{"type":"integer","description":"The SKU ID"},"name":{"type":"string","description":"SKU name"},"productId":{"type":"integer","description":"Product ID"},"isActive":{"type":"boolean","description":"Is the SKU active"},"packagedHeight":{"type":"number","description":"Packaged Height"},"packagedLength":{"type":"number","description":"Packaged Length"},"packagedWidth":{"type":"number","description":"Packaged Width"},"packagedWeightKg":{"type":"number","description":"Packaged Weight (Kg)"},"isKit":{"type":"boolean","description":"Is Kit"}},"required":["skuId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"orders.cancel","description":"Cancel an order.","parameters":{"type":"object","properties":{"orderId":{"type":"string","description":"The Order ID"},"reason":{"type":"string","description":"Cancellation reason"}},"required":["orderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"vtiger","displayName":"VTiger","description":"Search, create, update, and delete records in VTiger CRM.","auth":{"kind":"api-key","hint":"VTiger instance URL, username, and access key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.search","description":"Search records in VTiger using filter criteria.","parameters":{"type":"object","properties":{"fields":{"type":"object","description":"Search filter fields"},"limit":{"type":"integer","description":"Maximum number of records to return"}},"required":["fields"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.get","description":"Get a specific record from VTiger.","parameters":{"type":"object","properties":{"recordId":{"type":"string","description":"The record ID"}},"required":["recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.create","description":"Create a new record in VTiger.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Record fields and values"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Update an existing record in VTiger.","parameters":{"type":"object","properties":{"recordId":{"type":"string","description":"The record ID"},"data":{"type":"object","description":"Fields and values to update"}},"required":["recordId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.delete","description":"Delete a record from VTiger.","parameters":{"type":"object","properties":{"recordId":{"type":"string","description":"The record ID"}},"required":["recordId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.query","description":"Query records using VTiger query language.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"VTiger query statement"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"records.assign","description":"Reassign a record to another user.","parameters":{"type":"object","properties":{"recordId":{"type":"string","description":"The record ID"},"assigned_user_id":{"type":"string","description":"The user the record is reassigned to"}},"required":["recordId","assigned_user_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.convert","description":"Convert lead to contact/opportunity.","parameters":{"type":"object","properties":{"recordId":{"type":"string","description":"The lead record ID to convert"},"targetModule":{"type":"string","description":"Target module (Contacts, Potentials)"},"data":{"type":"object","description":"Conversion field map"}},"required":["recordId","targetModule"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.upload","description":"Upload a document attached to a record.","parameters":{"type":"object","properties":{"recordId":{"type":"string","description":"The record to attach to"},"filename":{"type":"string","description":"The file name"},"content":{"type":"string","description":"Base64-encoded file content"},"contentType":{"type":"string","description":"Document content type"}},"required":["recordId","filename","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Add a comment to a record.","parameters":{"type":"object","properties":{"recordId":{"type":"string","description":"The record ID"},"comment":{"type":"string","description":"The comment body"}},"required":["recordId","comment"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"wafeq","displayName":"Wafeq","description":"Cloud accounting software for invoicing, bills, expenses, and tax reporting (ZATCA, UAE FTA compliance).","auth":{"kind":"api-key","hint":"Wafeq API key from account settings."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.create","description":"Create a contact (customer or supplier) in Wafeq.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Business name or full name."},"relationship":{"type":"string","enum":["customer","supplier","both"],"description":"Type of contact."},"email":{"type":"string","description":"Contact email address."},"phone":{"type":"string","description":"Contact phone number."},"tax_registration_number":{"type":"string","description":"VAT or tax ID."},"address":{"type":"string","description":"Street address."},"city":{"type":"string","description":"City name."},"postal_code":{"type":"string","description":"Postal or ZIP code."},"country":{"type":"string","description":"Two-letter ISO country code (e.g., AE, SA, US)."},"external_id":{"type":"string","description":"Your internal reference ID for this contact."}},"required":["name","relationship"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.find","description":"Search contacts by keyword or reference ID.","parameters":{"type":"object","properties":{"keyword":{"type":"string","description":"Search term to match against contact names and emails."},"external_id":{"type":"string","description":"Filter by your internal reference ID."},"limit":{"type":"integer","description":"Max results (default 50, max 200).","minimum":1,"maximum":200}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"invoices.create","description":"Create a full invoice with line items for a customer.","parameters":{"type":"object","properties":{"invoice_number":{"type":"string","description":"Unique invoice number (e.g., INV-2024-001)."},"invoice_date":{"type":"string","description":"Invoice date (ISO format: YYYY-MM-DD)."},"invoice_due_date":{"type":"string","description":"Due date (ISO format: YYYY-MM-DD)."},"contact_id":{"type":"string","description":"ID of the customer contact."},"description":{"type":"string","description":"Line item description."},"unit_price":{"type":"number","description":"Sale price per unit."},"status":{"type":"string","enum":["draft","authorized"],"description":"Draft = editable, not in books. Authorized = posted to books."}},"required":["invoice_number","invoice_date","invoice_due_date","contact_id","description","unit_price"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.simplified","description":"Create a simplified invoice (single-line, quick entry).","parameters":{"type":"object","properties":{"invoice_number":{"type":"string"},"invoice_date":{"type":"string","description":"ISO format YYYY-MM-DD."},"invoice_due_date":{"type":"string","description":"ISO format YYYY-MM-DD."},"contact_id":{"type":"string"},"unit_price":{"type":"number"},"status":{"type":"string","enum":["draft","authorized"]}},"required":["invoice_number","invoice_date","invoice_due_date","contact_id","unit_price"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.report.tax","description":"Report an invoice to tax authority (ZATCA/UAE FTA).","parameters":{"type":"object","properties":{"invoice_id":{"type":"string","description":"ID of the invoice to report."}},"required":["invoice_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.download.pdf","description":"Download an invoice as PDF.","parameters":{"type":"object","properties":{"invoice_id":{"type":"string","description":"ID of the invoice."},"file_name":{"type":"string","description":"Optional custom file name for the PDF."}},"required":["invoice_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bills.create","description":"Create a bill (purchase) from a supplier.","parameters":{"type":"object","properties":{"bill_number":{"type":"string","description":"Unique bill number (e.g., BILL-2024-001)."},"bill_date":{"type":"string","description":"Date on the bill (ISO format: YYYY-MM-DD)."},"bill_due_date":{"type":"string","description":"Due date (ISO format: YYYY-MM-DD)."},"contact_id":{"type":"string","description":"ID of the supplier contact."},"description":{"type":"string","description":"Line item description."},"unit_cost":{"type":"number","description":"Cost per unit."},"status":{"type":"string","enum":["draft","authorized"]},"prices_include_tax":{"type":"boolean","description":"Whether prices include tax."},"reference":{"type":"string","description":"Optional reference (e.g., project name)."},"order_number":{"type":"string","description":"Optional PO number."},"notes":{"type":"string","description":"Internal notes."}},"required":["bill_number","bill_date","bill_due_date","contact_id","description","unit_cost"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"credits.create","description":"Create a credit note.","parameters":{"type":"object","properties":{"credit_note_number":{"type":"string","description":"Unique credit note number (e.g., CN-2024-001)."},"credit_note_date":{"type":"string","description":"Date of credit note (ISO format: YYYY-MM-DD)."},"contact_id":{"type":"string","description":"ID of the contact."},"description":{"type":"string","description":"Line item description."},"amount":{"type":"number","description":"Credit amount."}},"required":["credit_note_number","credit_note_date","contact_id","description","amount"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"quotes.create","description":"Create a quote (sales proposal).","parameters":{"type":"object","properties":{"quote_number":{"type":"string","description":"Unique quote number (e.g., QT-2024-001)."},"quote_date":{"type":"string","description":"Quote date (ISO format: YYYY-MM-DD)."},"contact_id":{"type":"string","description":"ID of the customer contact."},"description":{"type":"string","description":"Line item description."},"unit_price":{"type":"number","description":"Price per unit."},"purchase_order":{"type":"string","description":"Optional customer PO number."}},"required":["quote_number","quote_date","contact_id","description","unit_price"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"quotes.convert","description":"Convert a quote to an invoice.","parameters":{"type":"object","properties":{"quote_id":{"type":"string","description":"ID of the quote to convert."},"invoice_number":{"type":"string","description":"Number for the new invoice."},"invoice_date":{"type":"string","description":"Invoice date (ISO format: YYYY-MM-DD)."}},"required":["quote_id","invoice_number","invoice_date"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payments.record","description":"Record a payment received from a customer or payment made to supplier.","parameters":{"type":"object","properties":{"type":{"type":"string","enum":["customer_payment","supplier_payment"],"description":"Payment type."},"target_id":{"type":"string","description":"ID of the document (invoice, bill, or credit note)."},"amount":{"type":"number","description":"Amount applied to the document."},"amount_to_pcy":{"type":"number","description":"Amount in the payment currency."},"date":{"type":"string","description":"Payment date (ISO format: YYYY-MM-DD)."},"payment_fees":{"type":"number","description":"Optional bank/card fees."}},"required":["type","target_id","amount","amount_to_pcy","date"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"items.create","description":"Create a catalog item (product or service).","parameters":{"type":"object","properties":{"sku":{"type":"string","description":"SKU or product code."},"description":{"type":"string","description":"Item description."},"unit_price":{"type":"number","description":"Sale price per unit."},"unit_cost":{"type":"number","description":"Purchase cost per unit."},"revenue_account":{"type":"string","description":"Advanced: account ID for sales revenue."},"expense_account":{"type":"string","description":"Advanced: account ID for purchase expense."},"revenue_tax_rate":{"type":"string","description":"Advanced: tax rate ID for sales."},"purchase_tax_rate":{"type":"string","description":"Advanced: tax rate ID for purchases."},"is_tracked_inventory":{"type":"boolean","description":"Track stock levels."},"is_active":{"type":"boolean","description":"Item is active and can be added to invoices."}},"required":["description"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"items.list","description":"List catalog items.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Max results to return."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.delete","description":"Delete a contact (customer or supplier).","parameters":{"type":"object","properties":{"contact_id":{"type":"string","description":"ID of the contact to delete."}},"required":["contact_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.delete","description":"Delete or void an invoice.","parameters":{"type":"object","properties":{"invoice_id":{"type":"string","description":"ID of the invoice to delete or void."}},"required":["invoice_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bills.delete","description":"Delete a bill.","parameters":{"type":"object","properties":{"bill_id":{"type":"string","description":"ID of the bill to delete."}},"required":["bill_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"items.delete","description":"Delete a catalog item.","parameters":{"type":"object","properties":{"item_id":{"type":"string","description":"ID of the item to delete."}},"required":["item_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"accounts.list","description":"List chart of accounts, optionally filtered by type and payment capability.","parameters":{"type":"object","properties":{"classification":{"type":"string","enum":["revenue","expense","asset","liability","equity"],"description":"Filter by account type."},"is_payment_enabled":{"type":"string","enum":["true","false"],"description":"Payment-enabled (bank/cash/card) accounts only."},"created_after":{"type":"string","description":"Filter accounts created on or after this date (ISO format: YYYY-MM-DD)."},"created_before":{"type":"string","description":"Filter accounts created on or before this date (ISO format: YYYY-MM-DD)."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"warmly","displayName":"Warmly","description":"List identified website visitors and visiting accounts from your Warmly workspace via its agent-tools API.","auth":{"kind":"api-key","hint":"Per-organization API key from the Warmly admin UI. Sent as the Authorization: Bearer header; organizationId must be included in each request body."},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tools.list","description":"Discover the available agent tools and their input JSON schemas for your workspace.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"visitors.list","description":"List identified people who visited your website, with optional filters and pagination. This is a billed read executed via the tool-execution endpoint.","parameters":{"type":"object","properties":{"organizationId":{"type":"string","description":"The organization the API key is issued for."},"timeWindow":{"type":"string","description":"Lookback window: past_day (default) or past_week."},"take":{"type":"integer","description":"Number of results to return, 1-500 (default 25)."},"offset":{"type":"integer","description":"Pagination offset."},"searchTerm":{"type":"string","description":"Substring match on name, email, or company."}},"required":["organizationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"accounts.list","description":"List company-level aggregations of accounts that visited your website. Billed read executed via the tool-execution endpoint.","parameters":{"type":"object","properties":{"organizationId":{"type":"string","description":"The organization the API key is issued for."},"timeWindow":{"type":"string","description":"Lookback window: past_day (default) or past_week."},"take":{"type":"integer","description":"Number of results to return, 1-500."}},"required":["organizationId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false}]},{"kind":"weaviate","displayName":"Weaviate","description":"Manage Weaviate vector-database schemas (collections), CRUD individual objects, run vector / hybrid / BM25 search via GraphQL, and batch-insert objects against a Weaviate Cloud or self-hosted cluster.","auth":{"kind":"api-key","hint":"Weaviate Cloud cluster API key. Create one under the cluster details page at https://console.weaviate.cloud. Self-hosted clusters must enable the api-key auth module."},"category":"storage","defaultConsistencyModel":"authoritative","capabilities":[{"name":"schema.list","description":"List every collection (class) currently defined on the cluster, with its full property schema and vectorizer config.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"schema.get","description":"Fetch the schema definition for a single collection (class) by name.","parameters":{"type":"object","properties":{"className":{"type":"string","description":"Weaviate class / collection name (capitalised by convention)."}},"required":["className"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"schema.create","description":"Create a new collection (class) with the supplied property + vectorizer config. The body must be a Weaviate class definition object (class, vectorizer, properties, …).","parameters":{"type":"object","properties":{"class":{"type":"string"},"description":{"type":"string"},"vectorizer":{"type":"string","description":"Vectorizer module id, e.g. text2vec-openai, text2vec-cohere, none."},"moduleConfig":{"type":"object"},"vectorIndexType":{"type":"string"},"vectorIndexConfig":{"type":"object"},"properties":{"type":"array","items":{"type":"object"},"description":"Ordered property list — each item is { name, dataType[], description?, indexFilterable?, indexSearchable?, moduleConfig? }."},"invertedIndexConfig":{"type":"object"},"replicationConfig":{"type":"object"},"shardingConfig":{"type":"object"},"multiTenancyConfig":{"type":"object"}},"required":["class"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"schema.delete","description":"Delete a collection (class) and every object stored under it. Irreversible.","parameters":{"type":"object","properties":{"className":{"type":"string"}},"required":["className"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"objects.list","description":"List objects in a collection. Supports limit/offset/after-cursor pagination and the `include=vector,classification` parameter.","parameters":{"type":"object","properties":{"className":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":10000},"offset":{"type":"integer","minimum":0},"after":{"type":"string","description":"Cursor — UUID of the last object from the previous page."},"include":{"type":"string","description":"Comma-separated extras to inline: vector, classification, featureProjection."}},"required":["className"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"objects.get","description":"Fetch a single object by UUID within a collection. Pass include=vector to inline the embedding.","parameters":{"type":"object","properties":{"className":{"type":"string"},"id":{"type":"string","description":"Object UUID (v3 or v5)."},"include":{"type":"string"}},"required":["className","id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"objects.create","description":"Insert one object. Body must include `class` and `properties`; pass `vector` to skip server-side vectorization, or `id` to assign a deterministic UUID (the recommended dedupe path).","parameters":{"type":"object","properties":{"class":{"type":"string"},"id":{"type":"string","description":"Optional deterministic UUID — when supplied, repeat inserts on the same UUID return 422 instead of creating duplicates."},"properties":{"type":"object"},"vector":{"type":"array","items":{"type":"number"}},"vectors":{"type":"object","description":"Named-vector map for collections configured with multiple vector spaces."},"tenant":{"type":"string","description":"Tenant id for multi-tenant collections."}},"required":["class","properties"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"objects.update","description":"Merge-update an object: properties supplied in the body overwrite their counterparts, untouched properties are preserved (PATCH semantics).","parameters":{"type":"object","properties":{"className":{"type":"string"},"id":{"type":"string"},"properties":{"type":"object"},"vector":{"type":"array","items":{"type":"number"}},"vectors":{"type":"object"}},"required":["className","id","properties"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"objects.replace","description":"Replace an object in place (PUT semantics): every property must be present in the body, omitted properties are cleared.","parameters":{"type":"object","properties":{"className":{"type":"string"},"id":{"type":"string"},"properties":{"type":"object"},"vector":{"type":"array","items":{"type":"number"}},"vectors":{"type":"object"}},"required":["className","id","properties"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"objects.delete","description":"Delete a single object by UUID.","parameters":{"type":"object","properties":{"className":{"type":"string"},"id":{"type":"string"}},"required":["className","id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"graphql.query","description":"Run an arbitrary GraphQL query against the cluster. Vector search, hybrid search, BM25, aggregations, and `Explore` are all expressed as GraphQL queries — the caller composes the query string.","parameters":{"type":"object","properties":{"query":{"type":"string","description":"GraphQL query string. Example: `{ Get { Article(nearText: { concepts: [\"AI\"] }, limit: 5) { title _additional { id distance } } } }`."},"variables":{"type":"object"},"operationName":{"type":"string"}},"required":["query"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"batch.objects.create","description":"Insert a batch of objects in one round-trip. Body is `{ objects: [...] }` where each item matches the single-object body. The server returns per-item success/error; the caller must inspect the result array.","parameters":{"type":"object","properties":{"objects":{"type":"array","description":"Up to ~100 objects per request (cluster-configurable). Each item carries class, properties, optional id/vector/vectors/tenant.","items":{"type":"object"}},"consistencyLevel":{"type":"string","description":"ONE | QUORUM | ALL — overrides the cluster default."}},"required":["objects"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"batch.objects.delete","description":"Delete every object in a collection matching a where-filter. Body is `{ match: { class, where } }`. Returns a summary of matched / deleted / failed counts.","parameters":{"type":"object","properties":{"className":{"type":"string"},"where":{"type":"object","description":"Weaviate where-filter operator tree (path, operator, value*)."},"output":{"type":"string","description":"minimal | verbose — verbose lists per-object outcomes."},"dryRun":{"type":"boolean"},"consistencyLevel":{"type":"string"}},"required":["className","where"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"none","externalEffect":true},{"name":"meta.get","description":"Fetch cluster metadata: version, hostname, enabled modules and their configs. Useful for capability discovery.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"nodes.list","description":"Return per-node cluster status: name, status, version, shard counts. Useful for health and rebalancing dashboards.","parameters":{"type":"object","properties":{"output":{"type":"string","description":"minimal | verbose."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"classes.update","description":"Update a class/collection schema in place. Body is a full class definition object; non-mutable settings (vectorizer, properties) must match the existing class — only invertedIndexConfig, replicationConfig, vectorIndexConfig and description are practically mutable.","parameters":{"type":"object","properties":{"className":{"type":"string"},"class":{"type":"string","description":"Must equal className."},"description":{"type":"string"},"vectorIndexConfig":{"type":"object"},"invertedIndexConfig":{"type":"object"},"replicationConfig":{"type":"object"},"shardingConfig":{"type":"object"},"multiTenancyConfig":{"type":"object"}},"required":["className","class"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"schema.shards","description":"List shards for a class with their READY/READONLY/INDEXING status. Used to drive rebalancing and read-only failover decisions.","parameters":{"type":"object","properties":{"className":{"type":"string"},"tenant":{"type":"string","description":"Tenant id for multi-tenant collections."}},"required":["className"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"backups.create","description":"Create a backup snapshot to a configured backend (filesystem / s3 / gcs / azure). Body carries backup id and optional include/exclude class lists. The backup_id is the caller-supplied dedupe key.","parameters":{"type":"object","properties":{"backend":{"type":"string","description":"Backup backend module id, e.g. filesystem, s3, gcs, azure."},"id":{"type":"string","description":"Caller-chosen backup id; lowercase letters/digits/_-."},"include":{"type":"array","items":{"type":"string"}},"exclude":{"type":"array","items":{"type":"string"}},"config":{"type":"object","description":"Backend-specific overrides (e.g. chunkSize)."}},"required":["backend","id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"backups.restore","description":"Restore a previously-created backup snapshot. Specify backend + id; optional include/exclude narrows the restore scope.","parameters":{"type":"object","properties":{"backend":{"type":"string"},"id":{"type":"string"},"include":{"type":"array","items":{"type":"string"}},"exclude":{"type":"array","items":{"type":"string"}},"config":{"type":"object"},"nodeMapping":{"type":"object","description":"Map original node names to current cluster nodes."}},"required":["backend","id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"webflow","displayName":"Webflow","description":"Read Webflow sites, collections, pages, forms, and form submissions, and create, update, delete, or publish CMS items through the Webflow Data API v2.","auth":{"kind":"oauth2","authorizationUrl":"https://webflow.com/oauth/authorize","tokenUrl":"https://api.webflow.com/oauth/access_token","scopes":["sites:read","cms:read","cms:write","pages:read","forms:read"],"clientIdEnv":"WEBFLOW_OAUTH_CLIENT_ID","clientSecretEnv":"WEBFLOW_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"sites.list","description":"List Webflow sites the connected workspace can access.","parameters":{"type":"object","properties":{}},"requiredScopes":["sites:read"],"class":"read"},{"name":"sites.get","description":"Read a single Webflow site by ID.","parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Webflow site ID."}},"required":["siteId"]},"requiredScopes":["sites:read"],"class":"read"},{"name":"collections.list","description":"List CMS collections defined on a Webflow site.","parameters":{"type":"object","properties":{"siteId":{"type":"string"}},"required":["siteId"]},"requiredScopes":["cms:read"],"class":"read"},{"name":"collections.get","description":"Fetch a Webflow CMS collection, including its field definitions.","parameters":{"type":"object","properties":{"collectionId":{"type":"string"}},"required":["collectionId"]},"requiredScopes":["cms:read"],"class":"read"},{"name":"items.list","description":"List items in a Webflow CMS collection. Pagination is offset-based; `name` and `slug` filter on those reserved fields.","parameters":{"type":"object","properties":{"collectionId":{"type":"string"},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":100},"name":{"type":"string","description":"Filter on the reserved `name` field (exact match)."},"slug":{"type":"string","description":"Filter on the reserved `slug` field (exact match)."}},"required":["collectionId"]},"requiredScopes":["cms:read"],"class":"read"},{"name":"items.get","description":"Fetch a single Webflow CMS item by collection + item ID.","parameters":{"type":"object","properties":{"collectionId":{"type":"string"},"itemId":{"type":"string"}},"required":["collectionId","itemId"]},"requiredScopes":["cms:read"],"class":"read"},{"name":"items.create","description":"Create a CMS item in a Webflow collection. `fieldData` carries the per-field values keyed by collection field slug; reserved fields like `name` and `slug` live alongside custom fields.","parameters":{"type":"object","properties":{"collectionId":{"type":"string"},"fieldData":{"type":"object","description":"Field-slug keyed values for the new item, e.g. `{ name: \"Post\", slug: \"post\" }`.","additionalProperties":true},"isArchived":{"type":"boolean","description":"Create the item archived. Defaults to false."},"isDraft":{"type":"boolean","description":"Create the item as draft (unpublished). Defaults to false."}},"required":["collectionId","fieldData"]},"requiredScopes":["cms:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"items.update","description":"Update a CMS item in a Webflow collection. Webflow does not support optimistic concurrency on the Data API; concurrent edits last-writer-wins.","parameters":{"type":"object","properties":{"collectionId":{"type":"string"},"itemId":{"type":"string"},"fieldData":{"type":"object","description":"Field-slug keyed values to overwrite on the item.","additionalProperties":true},"isArchived":{"type":"boolean"},"isDraft":{"type":"boolean"}},"required":["collectionId","itemId","fieldData"]},"requiredScopes":["cms:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"items.delete","description":"Delete a CMS item from a Webflow collection.","parameters":{"type":"object","properties":{"collectionId":{"type":"string"},"itemId":{"type":"string"}},"required":["collectionId","itemId"]},"requiredScopes":["cms:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"items.publish","description":"Publish one or more staged CMS items live to the connected Webflow site. Items remain in their collection but become visible on the published site.","parameters":{"type":"object","properties":{"collectionId":{"type":"string"},"itemIds":{"type":"array","description":"Item IDs in the collection to publish.","items":{"type":"string"},"minItems":1}},"required":["collectionId","itemIds"]},"requiredScopes":["cms:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"items.unpublish","description":"Unpublish one or more CMS items from the live Webflow site. Items remain in their collection but are removed from the published view.","parameters":{"type":"object","properties":{"collectionId":{"type":"string"},"itemIds":{"type":"array","description":"Item IDs in the collection to unpublish.","items":{"type":"string"},"minItems":1}},"required":["collectionId","itemIds"]},"requiredScopes":["cms:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.create","description":"Create a CMS collection on a Webflow site. `displayName` is the human-readable label, `singularName` is the per-item noun, `slug` (optional) sets the URL/api slug.","parameters":{"type":"object","properties":{"siteId":{"type":"string","description":"Webflow site ID that owns the new collection."},"displayName":{"type":"string","description":"Display name of the collection."},"singularName":{"type":"string","description":"Singular noun for an item in the collection."},"slug":{"type":"string","description":"Optional collection slug — auto-generated from displayName if omitted."}},"required":["siteId","displayName","singularName"]},"requiredScopes":["cms:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"collections.delete","description":"Delete a CMS collection from a Webflow site. All items in the collection are removed.","parameters":{"type":"object","properties":{"collectionId":{"type":"string"}},"required":["collectionId"]},"requiredScopes":["cms:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sites.publish","description":"Publish a Webflow site to its domains. `publishToWebflowSubdomain` toggles the *.webflow.io staging URL; `customDomains` is an array of domain IDs (from `sites.get`) to publish to. At least one target must be supplied.","parameters":{"type":"object","properties":{"siteId":{"type":"string"},"publishToWebflowSubdomain":{"type":"boolean","description":"Publish to the *.webflow.io staging subdomain. Defaults to false."},"customDomains":{"type":"array","description":"Custom domain IDs (see Site.customDomains[].id) to publish to.","items":{"type":"string"}}},"required":["siteId"]},"requiredScopes":["sites:read","cms:write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pages.list","description":"List static pages defined on a Webflow site.","parameters":{"type":"object","properties":{"siteId":{"type":"string"},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":100}},"required":["siteId"]},"requiredScopes":["pages:read"],"class":"read"},{"name":"forms.list","description":"List forms defined on a Webflow site.","parameters":{"type":"object","properties":{"siteId":{"type":"string"},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":100}},"required":["siteId"]},"requiredScopes":["forms:read"],"class":"read"},{"name":"forms.submissions","description":"List form submissions for a Webflow form.","parameters":{"type":"object","properties":{"formId":{"type":"string"},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":100}},"required":["formId"]},"requiredScopes":["forms:read"],"class":"read"}]},{"kind":"webhook","displayName":"Webhook (custom URL)","description":"Fire signed HTTP POSTs from your agent to any URL you control. The escape hatch when there's no native connector — receive the agent's intent, run your own logic, return a result.","auth":{"kind":"hmac"},"category":"webhook","defaultConsistencyModel":"advisory","capabilities":[{"name":"post_event","class":"mutation","description":"Send a JSON event to the configured webhook URL. The receiver SHOULD return 200 on accept and 409 on conflict (the agent will offer alternatives if you include them in the response).","cas":"native-idempotency","externalEffect":true,"parameters":{"type":"object","additionalProperties":true,"description":"Whatever JSON the operator declared at connect time. The DataSource.metadata.requestSchema is the source of truth at runtime."}},{"name":"fetch_state","class":"read","description":"GET the configured webhook URL with the agent-supplied query params. Returns whatever JSON the receiver responds with.","parameters":{"type":"object","additionalProperties":true}}]},{"kind":"webscraping-ai","displayName":"WebScraping AI","description":"Scrape websites and extract data using WebScraping AI.","auth":{"kind":"api-key","hint":"WebScraping AI API key."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"page.scrapeText","description":"Scrape text content from a web page.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"URL of the page to scrape."},"renderJs":{"type":"boolean","description":"Whether to render JavaScript."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"page.scrapeHtml","description":"Scrape the full HTML structure of a web page.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"URL of the page to scrape."},"renderJs":{"type":"boolean","description":"Whether to render JavaScript."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"data.extract","description":"Extract structured data from a web page given a prompt.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"URL of the page to analyze."},"question":{"type":"string","description":"Natural language question about the page content."},"renderJs":{"type":"boolean","description":"Whether to render JavaScript."}},"required":["url","question"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"account.info","description":"Retrieve account information and usage statistics.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"what-converts","displayName":"WhatConverts","description":"Fetch, search, and manage leads in WhatConverts CRM.","auth":{"kind":"api-key","hint":"WhatConverts API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"leads.list","description":"List leads with optional filtering by date range, type, source, and other criteria.","parameters":{"type":"object","properties":{"from_date":{"type":"string","description":"Start date for the export range in YYYY-MM-DD format."},"to_date":{"type":"string","description":"End date for the export range in YYYY-MM-DD format."},"lead_type":{"type":"string","description":"Filter leads by their type."},"per_page":{"type":"integer","description":"Number of leads to fetch per page (max 1000)."},"no_of_pages":{"type":"integer","description":"The number of pages to retrieve (max 100)."},"referring_source":{"type":"string","description":"Filter leads by source."},"referring_medium":{"type":"string","description":"Filter leads by medium."},"referring_campaign":{"type":"string","description":"Filter leads by campaign."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.getByEmail","description":"Retrieve a lead by email address.","parameters":{"type":"object","properties":{"email_address":{"type":"string","description":"Find a lead by their email address."}},"required":["email_address"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"leads.create","description":"Create a new lead in WhatConverts.","parameters":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"},"phone_number":{"type":"string"},"company_name":{"type":"string"},"notes":{"type":"string"},"send_notification":{"type":"boolean","description":"Set to true to send a new lead notification email."},"quote_value":{"type":"number","description":"The monetary value of the quote associated with the lead."},"sales_value":{"type":"number","description":"The monetary value of the sale associated with the lead."},"quotable":{"type":"string","description":"Indicates if the lead is quotable."}},"required":["first_name","last_name","email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update","description":"Update an existing lead in WhatConverts.","parameters":{"type":"object","properties":{"lead_id":{"type":"string","description":"The ID of the lead to update."},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"},"phone_number":{"type":"string"},"company_name":{"type":"string"},"notes":{"type":"string"},"quote_value":{"type":"number","description":"The monetary value of the quote associated with the lead."},"sales_value":{"type":"number","description":"The monetary value of the sale associated with the lead."},"quotable":{"type":"string","description":"Indicates if the lead is quotable."}},"required":["lead_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"leads.delete","description":"Delete a lead.","parameters":{"type":"object","properties":{"lead_id":{"type":"string","description":"The ID of the lead to delete."}},"required":["lead_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.qualify","description":"Update qualified/quotable/quote-value fields on an existing lead.","parameters":{"type":"object","properties":{"lead_id":{"type":"string","description":"The ID of the lead to qualify."},"quotable":{"type":"string","description":"Indicates if the lead is quotable."},"quote_value":{"type":"number","description":"The monetary value of the quote associated with the lead."},"quality_score":{"type":"string","description":"The qualification quality score for the lead."}},"required":["lead_id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"accounts.list","description":"List accounts/profiles.","parameters":{"type":"object","properties":{"per_page":{"type":"integer","description":"Number of accounts to fetch per page."},"page":{"type":"integer","description":"The page number to retrieve."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"users.list","description":"List account users.","parameters":{"type":"object","properties":{"per_page":{"type":"integer","description":"Number of users to fetch per page."},"page":{"type":"integer","description":"The page number to retrieve."}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"whatsapp","displayName":"WhatsApp Business","description":"Send messages, media, and templates via WhatsApp Business API.","auth":{"kind":"api-key","hint":"WhatsApp Business System User Access Token."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"messages.send","description":"Send a text message via WhatsApp.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Recipient phone number"},"text":{"type":"string","description":"Message text"},"businessAccountId":{"type":"string","description":"Business Account ID"}},"required":["to","text","businessAccountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.send","description":"Send media (image, audio, video, document) via WhatsApp.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Recipient phone number"},"type":{"type":"string","enum":["image","audio","video","document"],"description":"Media type"},"media":{"type":"string","description":"Media URL"},"caption":{"type":"string","description":"Caption for the media"},"filename":{"type":"string","description":"Filename (for documents)"},"businessAccountId":{"type":"string","description":"Business Account ID"}},"required":["to","type","media","businessAccountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"template.send","description":"Send a pre-approved template message via WhatsApp.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Recipient phone number"},"templateName":{"type":"string","description":"Name of the template"},"language":{"type":"string","description":"Template language code (e.g., en, es)"},"parameters":{"type":"array","description":"Template parameter values"},"businessAccountId":{"type":"string","description":"Business Account ID"}},"required":["to","templateName","language","businessAccountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.reply","description":"Reply to a specific WhatsApp message in-thread by quoting the original message id.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Recipient phone number"},"text":{"type":"string","description":"Reply text body"},"replyToMessageId":{"type":"string","description":"WAMID of the message to reply to"},"businessAccountId":{"type":"string","description":"Business Account ID"}},"required":["to","text","replyToMessageId","businessAccountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.react","description":"React to a specific WhatsApp message with an emoji. Pass an empty emoji to remove an existing reaction.","parameters":{"type":"object","properties":{"to":{"type":"string","description":"Recipient phone number"},"messageId":{"type":"string","description":"WAMID of the message to react to"},"emoji":{"type":"string","description":"Emoji to react with (empty string removes existing reaction)"},"businessAccountId":{"type":"string","description":"Business Account ID"}},"required":["to","messageId","emoji","businessAccountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.delete","description":"Delete a previously sent WhatsApp message by id.","parameters":{"type":"object","properties":{"messageId":{"type":"string","description":"WAMID of the message to delete"},"businessAccountId":{"type":"string","description":"Business Account ID"}},"required":["messageId","businessAccountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.list","description":"List contacts associated with the WhatsApp Business Account.","parameters":{"type":"object","properties":{"businessAccountId":{"type":"string","description":"Business Account ID"},"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Maximum number of contacts to return"}},"required":["businessAccountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"whatsapp-business","displayName":"WhatsApp Business","description":"Send text and template messages from a verified WhatsApp Business number, and read your approved message templates. Advisory surface — WhatsApp sends are append-only.","auth":{"kind":"oauth2","authorizationUrl":"https://www.facebook.com/v21.0/dialog/oauth","tokenUrl":"https://graph.facebook.com/v21.0/oauth/access_token","scopes":["whatsapp_business_messaging","whatsapp_business_management","business_management"],"clientIdEnv":"WHATSAPP_BUSINESS_OAUTH_CLIENT_ID","clientSecretEnv":"WHATSAPP_BUSINESS_OAUTH_CLIENT_SECRET"},"category":"comms","defaultConsistencyModel":"advisory","capabilities":[{"name":"send_text_message","class":"mutation","description":"Send a free-form text message from the connected WABA number. Outside the 24h customer-service window, Meta will reject — use send_template_message instead.","cas":"none","externalEffect":true,"requiredScopes":["whatsapp_business_messaging"],"parameters":{"type":"object","properties":{"to":{"type":"string","description":"E.164 destination, e.g. +14155551212."},"body":{"type":"string","description":"Message body (≤4096 chars)."},"previewUrl":{"type":"boolean","description":"Render a link preview if body contains a URL.","default":false}},"required":["to","body"]}},{"name":"send_template_message","class":"mutation","description":"Send a pre-approved Meta message template. Required for outbound contact outside the 24h customer-service window.","cas":"none","externalEffect":true,"requiredScopes":["whatsapp_business_messaging"],"parameters":{"type":"object","properties":{"to":{"type":"string","description":"E.164 destination."},"template":{"type":"string","description":"Name of the approved template."},"language":{"type":"string","description":"BCP-47 language code, e.g. en_US.","default":"en_US"},"components":{"type":"array","description":"Optional Meta template components array (header/body/button parameter substitutions)."}},"required":["to","template"]}},{"name":"list_message_templates","class":"read","description":"List approved message templates for the connected WhatsApp Business Account.","requiredScopes":["whatsapp_business_management"],"parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200,"default":50},"status":{"type":"string","description":"Optional filter by template status (APPROVED, PENDING, REJECTED)."}}}},{"name":"get_business_phone_number","class":"read","description":"Return the verified display name, quality rating, and verification status of the connected phone number.","requiredScopes":["whatsapp_business_management"],"parameters":{"type":"object","properties":{}}},{"name":"media.upload","class":"mutation","description":"Upload media (image, audio, video, document) to the connected phone number for later use as a message attachment. Returns the Meta media ID.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["whatsapp_business_messaging"],"parameters":{"type":"object","properties":{"dataBase64":{"type":"string","description":"Raw media bytes, base64-encoded."},"mimeType":{"type":"string","description":"MIME type of the media, e.g. image/jpeg, audio/ogg."},"filename":{"type":"string","description":"Optional filename hint (recommended for documents)."}},"required":["dataBase64","mimeType"]}},{"name":"templates.create","class":"mutation","description":"Submit a new message template for Meta approval. Components follow the Cloud API message_templates schema.","cas":"native-idempotency","externalEffect":true,"requiredScopes":["whatsapp_business_management"],"parameters":{"type":"object","properties":{"name":{"type":"string","description":"Template name (lowercase, snake_case, ≤512 chars)."},"language":{"type":"string","description":"BCP-47 language code, e.g. en_US."},"category":{"type":"string","description":"Template category (MARKETING, UTILITY, AUTHENTICATION)."},"components":{"type":"array","description":"Template components array (header/body/footer/buttons)."}},"required":["name","language","category","components"]}},{"name":"templates.delete","class":"mutation","description":"Delete a message template by name (and optional hsm_id to delete a specific language variant).","cas":"native-idempotency","externalEffect":true,"requiredScopes":["whatsapp_business_management"],"parameters":{"type":"object","properties":{"name":{"type":"string","description":"Template name to delete."},"hsmId":{"type":"string","description":"Optional template ID to delete a specific language variant only."}},"required":["name"]}},{"name":"messages.mark-read","class":"mutation","description":"Mark an incoming WhatsApp message as read (sends the blue tick to the sender).","cas":"native-idempotency","externalEffect":true,"requiredScopes":["whatsapp_business_messaging"],"parameters":{"type":"object","properties":{"messageId":{"type":"string","description":"WAMID of the incoming message to mark as read."}},"required":["messageId"]}}]},{"kind":"whatsscale","displayName":"WhatsScale","description":"Send WhatsApp messages, manage contacts, and automate conversations via WAHA.","auth":{"kind":"api-key","hint":"WhatsScale API key."},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.create","description":"Create a CRM contact.","parameters":{"type":"object","properties":{"phone":{"type":"string"},"name":{"type":"string"},"tags":{"type":"string"}},"required":["phone"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.get","description":"Get a CRM contact by ID.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.findByPhone","description":"Find a CRM contact by phone number.","parameters":{"type":"object","properties":{"phone":{"type":"string"}},"required":["phone"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.update","description":"Update a CRM contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"name":{"type":"string"},"tags":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.delete","description":"Delete a CRM contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"contacts.list","description":"List CRM contacts.","parameters":{"type":"object","properties":{"search":{"type":"string"},"limit":{"type":"integer"},"page":{"type":"integer"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.addTag","description":"Add a tag to a CRM contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"tag":{"type":"string"}},"required":["contactId","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.removeTag","description":"Remove a tag from a CRM contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"tag":{"type":"string"}},"required":["contactId","tag"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"messages.sendText","description":"Send a text message to a contact.","parameters":{"type":"object","properties":{"recipient":{"type":"string"},"text":{"type":"string"},"chatType":{"type":"string"}},"required":["recipient","text","chatType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.sendImage","description":"Send an image to a contact.","parameters":{"type":"object","properties":{"recipient":{"type":"string"},"imageUrl":{"type":"string"},"chatType":{"type":"string"}},"required":["recipient","imageUrl","chatType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.sendVideo","description":"Send a video to a contact.","parameters":{"type":"object","properties":{"recipient":{"type":"string"},"videoUrl":{"type":"string"},"chatType":{"type":"string"}},"required":["recipient","videoUrl","chatType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.sendDocument","description":"Send a document to a contact.","parameters":{"type":"object","properties":{"recipient":{"type":"string"},"documentUrl":{"type":"string"},"filename":{"type":"string"},"caption":{"type":"string"},"chatType":{"type":"string"}},"required":["recipient","documentUrl","chatType"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"whatsapp.check","description":"Check if a number is registered on WhatsApp.","parameters":{"type":"object","properties":{"phone":{"type":"string"}},"required":["phone"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"wiza","displayName":"Wiza","description":"Real-time contact enrichment that reveals a person's work/personal email and phone from a LinkedIn URL, email, or name plus company.","auth":{"kind":"api-key","hint":"API key from Wiza account settings. Sent as the Authorization: Bearer header."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"individual_reveal.create","description":"Start a real-time individual reveal to enrich one contact's email and phone from a LinkedIn URL, email, or name plus company/domain. Consumes credits.","parameters":{"type":"object","properties":{"individual_reveal":{"type":"object","description":"Contact identifiers: full_name + company or domain, OR email, OR linkedin (profile URL)."},"enrichment_level":{"type":"string","description":"One of none, partial, phone, or full."},"email_options":{"type":"object","description":"Object with accept_work and accept_personal booleans."},"phone_options":{"type":"object","description":"Phone enrichment options."}},"required":["individual_reveal","enrichment_level"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":false},{"name":"individual_reveal.get","description":"Retrieve the status and revealed contact data of an individual reveal by its id.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"The individual reveal id returned by individual_reveal.create."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"list.create","description":"Create a list to enrich up to 2500 profiles in bulk with email and phone data. Consumes credits.","parameters":{"type":"object","properties":{"list":{"type":"object","description":"List config including name, enrichment_level, email_options, and items (array of up to 2500 profiles)."}},"required":["list"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"credits.get","description":"Get the account's remaining email, phone, export, and API credit balances.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"wonderchat","displayName":"Wonderchat","description":"Interact with Wonderchat chatbots: ask questions, manage pages and tags.","auth":{"kind":"api-key","hint":"Wonderchat API key from your account settings."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"question.ask","description":"Ask a question to a Wonderchat chatbot.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The ID of your chatbot"},"chatlogId":{"type":"string","description":"The ID of your chat session"},"question":{"type":"string","description":"The question to ask the chatbot"},"context":{"type":"string","description":"Additional custom context about the chat session"},"contextUrl":{"type":"string","description":"URL of the page for additional context"}},"required":["chatbotId","chatlogId","question"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"page.add","description":"Add a webpage to a Wonderchat chatbot for training.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The ID of your chatbot"},"urls":{"type":"array","items":{"type":"string"},"description":"List of webpage URLs to add"},"sessionCookie":{"type":"string","description":"Session cookie for crawling sites behind login"}},"required":["chatbotId","urls"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tag.add","description":"Add a tag to a Wonderchat chatbot.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The ID of your chatbot"},"tags":{"type":"object","description":"Tags to add to the chatbot"}},"required":["chatbotId","tags"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tag.remove","description":"Remove a tag from a Wonderchat chatbot.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The ID of your chatbot"},"tagKey":{"type":"string","description":"The tag key to remove"}},"required":["chatbotId","tagKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"page.remove","description":"Remove a previously trained page from a Wonderchat chatbot by page id.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The ID of your chatbot"},"pageId":{"type":"string","description":"The ID of the page to remove"}},"required":["chatbotId","pageId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bot.train","description":"Trigger a retrain of the Wonderchat chatbot against its current sources.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The ID of your chatbot"}},"required":["chatbotId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"conversations.list","description":"List historical conversations for a Wonderchat chatbot.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The ID of your chatbot"},"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Maximum conversations to return"},"cursor":{"type":"string","description":"Pagination cursor from a previous call"}},"required":["chatbotId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"conversations.delete","description":"Delete a stored Wonderchat conversation by chatlog id.","parameters":{"type":"object","properties":{"chatbotId":{"type":"string","description":"The ID of your chatbot"},"chatlogId":{"type":"string","description":"The chatlog id to delete"}},"required":["chatbotId","chatlogId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"woocommerce","displayName":"WooCommerce","description":"Manage WooCommerce products, customers, and coupons.","auth":{"kind":"api-key","hint":"WooCommerce Consumer Key and Consumer Secret from WordPress admin. The connection must also store the WordPress store URL (e.g. https://mystore.com)."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"coupons.create","description":"Create a WooCommerce coupon.","parameters":{"type":"object","properties":{"code":{"type":"string"},"discountType":{"type":"string","enum":["percent","fixed_cart","fixed_product"]},"amount":{"type":"number"},"minimumAmount":{"type":"number"}},"required":["code","discountType","amount"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.create","description":"Create a WooCommerce customer.","parameters":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"},"billingAddress":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"address1":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"postcode":{"type":"string"},"country":{"type":"string"},"email":{"type":"string"}}}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.create","description":"Create a WooCommerce product.","parameters":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"regularPrice":{"type":"number"},"salePrice":{"type":"number"},"categories":{"type":"array","items":{"type":"integer"}},"sku":{"type":"string"},"manageStock":{"type":"boolean"},"stockQuantity":{"type":"integer"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.find","description":"Find a WooCommerce customer by email or search parameters.","parameters":{"type":"object","properties":{"email":{"type":"string"},"search":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.find","description":"Find WooCommerce products by search or filter parameters.","parameters":{"type":"object","properties":{"search":{"type":"string"},"category":{"type":"integer"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"customers.update","description":"Update a WooCommerce customer by ID.","parameters":{"type":"object","properties":{"id":{"type":"integer"},"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customers.delete","description":"Delete a WooCommerce customer. WooCommerce requires force=true to permanently delete customers.","parameters":{"type":"object","properties":{"id":{"type":"integer"},"force":{"type":"boolean","description":"Permanently delete the customer."},"reassign":{"type":"integer","description":"Reassign customer posts to this user ID."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.update","description":"Update a WooCommerce product by ID.","parameters":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"regularPrice":{"type":"number"},"salePrice":{"type":"number"},"sku":{"type":"string"},"manageStock":{"type":"boolean"},"stockQuantity":{"type":"integer"},"status":{"type":"string","enum":["draft","pending","private","publish"]}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"products.delete","description":"Delete a WooCommerce product. Pass force=true to permanently delete instead of trashing.","parameters":{"type":"object","properties":{"id":{"type":"integer"},"force":{"type":"boolean","description":"Bypass trash and permanently delete."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"orders.update-status","description":"Update a WooCommerce order's status (e.g. processing, completed, cancelled, refunded).","parameters":{"type":"object","properties":{"id":{"type":"integer"},"status":{"type":"string","enum":["pending","processing","on-hold","completed","cancelled","refunded","failed"]}},"required":["id","status"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"woodpecker","displayName":"Woodpecker","description":"Manage prospects and campaigns with Woodpecker API.","auth":{"kind":"api-key","hint":"Woodpecker API key from Marketplace → Integrations → API keys."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"prospect.find-by-email","description":"Find a prospect by email address.","parameters":{"type":"object","properties":{"email":{"type":"string"},"campaignId":{"type":"string"},"includeCampaignDetails":{"type":"boolean"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"prospect.get-responses","description":"Get prospect responses.","parameters":{"type":"object","properties":{"prospectId":{"type":"number"},"campaignId":{"type":"string"}},"required":["prospectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"prospect.add-to-campaign","description":"Add a prospect to a campaign.","parameters":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string"},"website":{"type":"string"},"linkedinUrl":{"type":"string"},"title":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"country":{"type":"string"},"industry":{"type":"string"},"tags":{"type":"string"},"status":{"type":"string"},"force":{"type":"boolean"},"update":{"type":"boolean"},"setTags":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"prospect.add-to-list","description":"Add a prospect to a list.","parameters":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string"},"website":{"type":"string"},"linkedinUrl":{"type":"string"},"title":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"country":{"type":"string"},"industry":{"type":"string"},"tags":{"type":"string"},"status":{"type":"string"},"force":{"type":"boolean"},"fileName":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"domain.blacklist","description":"Blacklist a domain.","parameters":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"prospect.update","description":"Update fields on an existing Woodpecker prospect, addressed by email. Woodpecker treats POST /prospect with update=true as an upsert against the email key.","parameters":{"type":"object","properties":{"email":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"company":{"type":"string"},"website":{"type":"string"},"linkedin_url":{"type":"string"},"title":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"country":{"type":"string"},"industry":{"type":"string"},"tags":{"type":"string"},"status":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"prospect.remove-from-campaign","description":"Remove a prospect from a campaign by prospect ID and campaign ID.","parameters":{"type":"object","properties":{"prospectId":{"type":"number"},"campaignId":{"type":"string"}},"required":["prospectId","campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"prospect.stop","description":"Stop follow-ups for a prospect across all campaigns or within a specific campaign.","parameters":{"type":"object","properties":{"email":{"type":"string"},"campaign_id":{"type":"string"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.list","description":"List Woodpecker campaigns, optionally filtered by status.","parameters":{"type":"object","properties":{"status":{"type":"string"}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"wootric","displayName":"Wootric","description":"Measure and boost customer happiness through surveys and feedback.","auth":{"kind":"oauth2","authorizationUrl":"https://oauth.wootric.com/oauth/authorize","tokenUrl":"https://oauth.wootric.com/oauth/token","scopes":[],"clientIdEnv":"WOOTRIC_OAUTH_CLIENT_ID","clientSecretEnv":"WOOTRIC_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"surveys.create","description":"Create a Wootric survey.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the user to send survey to."},"firstName":{"type":"string","description":"First name of the user."},"lastName":{"type":"string","description":"Last name of the user."},"customAttributes":{"type":"object","description":"Custom user attributes."},"externalId":{"type":"string","description":"External user ID."},"isRecipient":{"type":"boolean","description":"Mark as recipient."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"wordpress","displayName":"WordPress","description":"Read, create, update, and delete WordPress posts, pages, media, and comments via the WordPress.com REST API.","auth":{"kind":"oauth2","authorizationUrl":"https://public-api.wordpress.com/oauth2/authorize","tokenUrl":"https://public-api.wordpress.com/oauth2/token","scopes":["posts","media","comments"],"clientIdEnv":"WORDPRESS_OAUTH_CLIENT_ID","clientSecretEnv":"WORDPRESS_OAUTH_CLIENT_SECRET"},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"posts.list","description":"List posts on a site, optionally filtered by status, author, search term, or pagination.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"status":{"type":"string","description":"Comma-separated WordPress post statuses (publish, future, draft, pending, private). Defaults to \"publish\"."},"search":{"type":"string","description":"Full-text search filter."},"author":{"type":"integer","description":"Restrict to posts by this user ID."},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}},"required":["site"]},"requiredScopes":["posts"],"class":"read"},{"name":"posts.get","description":"Fetch a single WordPress post by ID.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"id":{"type":"integer","description":"Post ID."}},"required":["site","id"]},"requiredScopes":["posts"],"class":"read"},{"name":"posts.create","description":"Create a WordPress post. `content` is HTML or Gutenberg block markup. Set `status` to \"draft\" to skip publication.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"title":{"type":"string"},"content":{"type":"string","description":"Post body. HTML or Gutenberg block markup."},"excerpt":{"type":"string"},"slug":{"type":"string"},"status":{"type":"string","enum":["publish","future","draft","pending","private"]},"categories":{"type":"array","items":{"type":"integer"}},"tags":{"type":"array","items":{"type":"integer"}},"featured_media":{"type":"integer","description":"Attachment ID to use as the featured image."}},"required":["site","title"]},"requiredScopes":["posts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"posts.update","description":"Update fields on an existing WordPress post.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"id":{"type":"integer"},"title":{"type":"string"},"content":{"type":"string"},"excerpt":{"type":"string"},"slug":{"type":"string"},"status":{"type":"string","enum":["publish","future","draft","pending","private"]},"categories":{"type":"array","items":{"type":"integer"}},"tags":{"type":"array","items":{"type":"integer"}},"featured_media":{"type":"integer"}},"required":["site","id"]},"requiredScopes":["posts"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"posts.delete","description":"Move a post to trash, or permanently delete it when `force` is true. WordPress trashes by default and only second deletes hard-delete.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"id":{"type":"integer"},"force":{"type":"boolean","description":"Bypass trash and permanently delete."}},"required":["site","id"]},"requiredScopes":["posts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pages.list","description":"List static pages on a site.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"status":{"type":"string"},"search":{"type":"string"},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}},"required":["site"]},"requiredScopes":["posts"],"class":"read"},{"name":"pages.create","description":"Create a static page on a site.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"title":{"type":"string"},"content":{"type":"string"},"slug":{"type":"string"},"status":{"type":"string","enum":["publish","future","draft","pending","private"]},"parent":{"type":"integer","description":"Parent page ID for nested hierarchy."}},"required":["site","title"]},"requiredScopes":["posts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pages.update","description":"Update fields on an existing WordPress page.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"id":{"type":"integer"},"title":{"type":"string"},"content":{"type":"string"},"slug":{"type":"string"},"status":{"type":"string","enum":["publish","future","draft","pending","private"]},"parent":{"type":"integer"}},"required":["site","id"]},"requiredScopes":["posts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"pages.delete","description":"Move a page to trash, or permanently delete it when `force` is true.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"id":{"type":"integer"},"force":{"type":"boolean","description":"Bypass trash and permanently delete."}},"required":["site","id"]},"requiredScopes":["posts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.create","description":"Create a comment on a post.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"post":{"type":"integer","description":"Post ID to comment on."},"content":{"type":"string"},"author_name":{"type":"string"},"author_email":{"type":"string"},"parent":{"type":"integer","description":"Parent comment ID for threaded replies."}},"required":["site","post","content"]},"requiredScopes":["comments"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.delete","description":"Trash a comment, or permanently delete it when `force` is true.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"id":{"type":"integer"},"force":{"type":"boolean"}},"required":["site","id"]},"requiredScopes":["comments"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.upload","description":"Register a media asset on the site. Accepts the public URL of the source asset (WordPress.com sideloads from URL when supplied with `source_url`).","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"source_url":{"type":"string","description":"Public URL WordPress should sideload as a media item."},"title":{"type":"string"},"caption":{"type":"string"},"alt_text":{"type":"string"},"post":{"type":"integer","description":"Attach the uploaded media to this post ID."}},"required":["site","source_url"]},"requiredScopes":["media"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"media.list","description":"List media items on a site.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"media_type":{"type":"string","enum":["image","video","audio","application"]},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}},"required":["site"]},"requiredScopes":["media"],"class":"read"},{"name":"comments.list","description":"List comments on a site, optionally filtered by post or status.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"post":{"type":"integer","description":"Restrict to comments on this post ID."},"status":{"type":"string","enum":["approve","hold","spam","trash"]},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}},"required":["site"]},"requiredScopes":["comments"],"class":"read"},{"name":"comments.update","description":"Moderate a comment by setting its status (approve, hold, spam, trash) or editing its content.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"id":{"type":"integer"},"status":{"type":"string","enum":["approve","hold","spam","trash"]},"content":{"type":"string"}},"required":["site","id"]},"requiredScopes":["comments"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"categories.create","description":"Create a taxonomy category on a site. `name` is required; `slug`, `description`, and `parent` (parent category ID) are optional.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"name":{"type":"string"},"slug":{"type":"string"},"description":{"type":"string"},"parent":{"type":"integer","description":"Parent category ID for nested hierarchy."}},"required":["site","name"]},"requiredScopes":["posts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.create","description":"Create a taxonomy tag on a site. `name` is required; `slug` and `description` are optional.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"name":{"type":"string"},"slug":{"type":"string"},"description":{"type":"string"}},"required":["site","name"]},"requiredScopes":["posts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.list","description":"List users (authors) on a site. Optionally filter by role (administrator, editor, author, contributor, subscriber) or search.","parameters":{"type":"object","properties":{"site":{"type":"string","description":"WordPress.com site identifier — either the site domain (e.g. \"example.wordpress.com\") or the numeric site ID."},"search":{"type":"string"},"roles":{"type":"array","items":{"type":"string","enum":["administrator","editor","author","contributor","subscriber"]}},"per_page":{"type":"integer","minimum":1,"maximum":100},"page":{"type":"integer","minimum":1}},"required":["site"]},"requiredScopes":["posts"],"class":"read"}]},{"kind":"workable","displayName":"Workable","description":"Access candidate records, jobs, stages, and team members in Workable. Move candidates between pipeline stages and rate candidates.","auth":{"kind":"api-key","hint":"Workable API token."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"candidates.get","description":"Retrieve a specific candidate by ID.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Candidate ID"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobs.get","description":"Retrieve a specific job by shortcode.","parameters":{"type":"object","properties":{"shortcode":{"type":"string","description":"Job shortcode"}},"required":["shortcode"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobs.stages","description":"List all hiring pipeline stages for a job.","parameters":{"type":"object","properties":{"shortcode":{"type":"string","description":"Job shortcode"}},"required":["shortcode"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"jobs.list","description":"List all jobs.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Number of results to return"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"members.list","description":"List team members.","parameters":{"type":"object","properties":{"role":{"type":"string","description":"Filter by member role"},"email":{"type":"string","description":"Filter by member email"},"name":{"type":"string","description":"Filter by member name (exact match)"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"candidates.move","description":"Move a candidate to a different pipeline stage.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Candidate ID"},"target_stage":{"type":"string","description":"Target stage slug"}},"required":["id","target_stage"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"candidates.rate","description":"Rate a candidate on a scale.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Candidate ID"},"scale":{"type":"string","description":"Rating scale (e.g., thumbs, stars, numbers)"},"grade":{"type":"integer","description":"Grade value"},"comment":{"type":"string","description":"Rating comment"}},"required":["id","scale","grade","comment"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"candidates.comment","description":"Add a comment to a candidate record.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Candidate ID"},"comment":{"type":"string","description":"Comment text"}},"required":["id","comment"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"candidates.create","description":"Create a candidate on a job.","parameters":{"type":"object","properties":{"shortcode":{"type":"string","description":"Job shortcode the candidate applies to."},"candidate":{"type":"object","description":"Candidate payload (name, email, headline, summary, etc.)."}},"required":["shortcode","candidate"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"candidates.disqualify","description":"Disqualify a candidate.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Candidate ID"},"disqualification_reason_id":{"type":"string","description":"Optional disqualification reason ID."}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"candidates.revert","description":"Revert a disqualified candidate.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Candidate ID"}},"required":["id"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"jobs.publish","description":"Publish a job opening.","parameters":{"type":"object","properties":{"shortcode":{"type":"string","description":"Job shortcode"}},"required":["shortcode"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"offers.create","description":"Create an offer for a candidate.","parameters":{"type":"object","properties":{"id":{"type":"string","description":"Candidate ID"},"offer":{"type":"object","description":"Offer payload (starts_on, salary, currency, employment_type, etc.)."}},"required":["id","offer"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"workday","displayName":"Workday","description":"Read Workday workers, organizations, locations, and time-off data and submit time-off requests through the tenant-scoped Workday REST API.","auth":{"kind":"oauth2","authorizationUrl":"{workdayBaseUrl}/ccx/oauth2/{tenant}/authorize","tokenUrl":"{workdayBaseUrl}/ccx/oauth2/{tenant}/token","scopes":["Staffing","Organizations and Roles","Time Off and Leave"],"clientIdEnv":"WORKDAY_OAUTH_CLIENT_ID","clientSecretEnv":"WORKDAY_OAUTH_CLIENT_SECRET","tokenClientAuthMethod":"client_secret_basic","sendScopeParam":false,"pkce":"unsupported","urlTemplateMetadata":{"workdayBaseUrl":{"kind":"base-url","allowedBaseUrlSuffixes":[".workday.com",".myworkday.com"]},"tenant":{"kind":"path-segment"}}},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"workers.list","description":"List workers in the tenant with optional pagination (Workday returns active workers by default; pass `terminated=true` to include terminated workers).","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Page size (Workday max 100)."},"offset":{"type":"integer","minimum":0},"search":{"type":"string","description":"Free-text worker search (matches name / preferred name / email)."},"terminated":{"type":"boolean","description":"Include terminated workers in the result set."}}},"requiredScopes":["Staffing"],"class":"read"},{"name":"workers.get","description":"Read a single worker record by Workday worker id.","parameters":{"type":"object","properties":{"workerId":{"type":"string","description":"Workday worker WID."}},"required":["workerId"]},"requiredScopes":["Staffing"],"class":"read"},{"name":"workers.history","description":"Read a worker employment history, including position, business title, location, and supervisory organization changes over time.","parameters":{"type":"object","properties":{"workerId":{"type":"string"}},"required":["workerId"]},"requiredScopes":["Staffing"],"class":"read"},{"name":"workers.directReports","description":"List the direct reports of a worker (one supervisory level; recurse for the full tree).","parameters":{"type":"object","properties":{"workerId":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}},"required":["workerId"]},"requiredScopes":["Staffing"],"class":"read"},{"name":"organizations.list","description":"List supervisory organizations (filterable by name) with pagination.","parameters":{"type":"object","properties":{"search":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["Organizations and Roles"],"class":"read"},{"name":"organizations.get","description":"Read a supervisory organization by id (includes manager, members, and parent org link).","parameters":{"type":"object","properties":{"organizationId":{"type":"string"}},"required":["organizationId"]},"requiredScopes":["Organizations and Roles"],"class":"read"},{"name":"locations.list","description":"List Workday locations (offices, remote pools) with pagination.","parameters":{"type":"object","properties":{"search":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":["Staffing"],"class":"read"},{"name":"timeOff.types.list","description":"List time-off plan types available to a worker (PTO, sick, jury duty, …).","parameters":{"type":"object","properties":{"workerId":{"type":"string"}},"required":["workerId"]},"requiredScopes":["Time Off and Leave"],"class":"read"},{"name":"timeOff.entries.list","description":"List a worker time-off entries within an optional date range.","parameters":{"type":"object","properties":{"workerId":{"type":"string"},"fromDate":{"type":"string","description":"ISO date (YYYY-MM-DD)."},"toDate":{"type":"string","description":"ISO date (YYYY-MM-DD)."},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}},"required":["workerId"]},"requiredScopes":["Time Off and Leave"],"class":"read"},{"name":"timeOff.submit","description":"Submit a time-off request on behalf of a worker. Body MUST follow the Workday request shape: { entries: [{ date, dailyQuantity, timeOffType: { id } }], comment? }.","parameters":{"type":"object","properties":{"workerId":{"type":"string"},"entries":{"type":"array","description":"One entry per requested day. Each carries the absence type id and daily quantity (in hours).","items":{"type":"object","properties":{"date":{"type":"string","description":"ISO date (YYYY-MM-DD)."},"dailyQuantity":{"type":"string","description":"Hours as a decimal string (e.g. \"8\")."},"timeOffType":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},"required":["date","dailyQuantity","timeOffType"]}},"comment":{"type":"string"}},"required":["workerId","entries"]},"requiredScopes":["Time Off and Leave"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"wrike","displayName":"Wrike","description":"Manage projects, tasks, folders, and comments in Wrike, the work management and collaboration platform.","auth":{"kind":"oauth2","authorizationUrl":"https://app.wrike.com/oauth2/authorize","tokenUrl":"https://www.wrike.com/oauth2/token","scopes":["wsReadOnly","wsReadWrite"],"clientIdEnv":"WRIKE_OAUTH_CLIENT_ID","clientSecretEnv":"WRIKE_OAUTH_CLIENT_SECRET"},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tasks.create","description":"Create a new task in Wrike.","parameters":{"type":"object","properties":{"folderId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"responsible":{"type":"array","items":{"type":"string"}},"dates":{"type":"object","properties":{"start":{"type":"string"},"due":{"type":"string"}}},"priority":{"type":"string","enum":["High","Normal","Low"]},"customFields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"value":{"type":"string"}},"required":["id","value"]}}},"required":["folderId","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.update","description":"Update an existing Wrike task.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"responsible":{"type":"array","items":{"type":"string"}},"dates":{"type":"object","properties":{"start":{"type":"string"},"due":{"type":"string"}}},"priority":{"type":"string","enum":["High","Normal","Low"]},"status":{"type":"string","enum":["Active","Completed","OnHold","Cancelled"]},"customFields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"value":{"type":"string"}},"required":["id","value"]}}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"folders.create","description":"Create a new folder in a Wrike workspace.","parameters":{"type":"object","properties":{"parentId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"}},"required":["parentId","title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.create","description":"Create a new project in Wrike.","parameters":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"accessType":{"type":"string","enum":["Public","Private"]},"customFields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"value":{"type":"string"}},"required":["id","value"]}}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.add","description":"Add a comment to a task in Wrike.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"text":{"type":"string"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["taskId","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"attachments.upload","description":"Upload an attachment to a task in Wrike.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"filename":{"type":"string"},"url":{"type":"string"}},"required":["taskId","filename","url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.find","description":"Search for a task in Wrike by title or ID.","parameters":{"type":"object","properties":{"taskId":{"type":"string"},"title":{"type":"string"},"status":{"type":"string","enum":["Active","Completed","OnHold","Cancelled"]},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"tasks.delete","description":"Delete a task.","parameters":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.complete","description":"Mark a task complete.","parameters":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"folders.delete","description":"Delete a folder.","parameters":{"type":"object","properties":{"folderId":{"type":"string"}},"required":["folderId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"comments.update","description":"Edit a comment.","parameters":{"type":"object","properties":{"commentId":{"type":"string"},"text":{"type":"string"}},"required":["commentId","text"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"folders.find","description":"Search for a folder in Wrike.","parameters":{"type":"object","properties":{"folderId":{"type":"string"},"title":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"writesonic-bulk","displayName":"Writesonic","description":"Generate AI-powered content: blog ideas, intros, outlines, product descriptions, ads, and more.","auth":{"kind":"api-key","hint":"Writesonic API key."},"category":"doc","defaultConsistencyModel":"authoritative","capabilities":[{"name":"blog.ideas","description":"Generate blog ideas for a given topic.","parameters":{"type":"object","properties":{"topic":{"type":"string"},"numCopies":{"type":"integer","minimum":1,"maximum":5}},"required":["topic","numCopies"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"blog.intros","description":"Generate blog introductions based on title and keyword.","parameters":{"type":"object","properties":{"blogTitle":{"type":"string"},"keyword":{"type":["string","null"]}},"required":["blogTitle"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"blog.outlines","description":"Generate blog outlines based on introduction.","parameters":{"type":"object","properties":{"blogIntro":{"type":"string"}},"required":["blogIntro"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"content.rephraser","description":"Rephrase existing content.","parameters":{"type":"object","properties":{"contentToRephrase":{"type":"string"}},"required":["contentToRephrase"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"content.shorten","description":"Shorten existing content.","parameters":{"type":"object","properties":{"contentToShorten":{"type":"string"}},"required":["contentToShorten"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"sentence.expander","description":"Expand a sentence into longer content.","parameters":{"type":"object","properties":{"contentToExpand":{"type":"string"}},"required":["contentToExpand"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"facebook.ads","description":"Generate Facebook ad copy.","parameters":{"type":"object","properties":{"productName":{"type":"string"},"productDescription":{"type":["string","null"]}},"required":["productName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"google.ads","description":"Generate Google ad copy.","parameters":{"type":"object","properties":{"productName":{"type":"string"},"searchTerm":{"type":["string","null"]}},"required":["productName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"generate.product.descriptions","description":"Generate product descriptions with keywords.","parameters":{"type":"object","properties":{"productCharacteristics":{"type":"string"},"primaryKeyword":{"type":["string","null"]},"secondaryKeywords":{"type":["string","null"]}},"required":["productCharacteristics"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"landing.page.headlines","description":"Generate landing page headlines.","parameters":{"type":"object","properties":{"productName":{"type":"string"},"productDescription":{"type":["string","null"]}},"required":["productName"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"wufoo","displayName":"Wufoo","description":"Query form entries, create submissions, and manage Wufoo forms.","auth":{"kind":"api-key","hint":"Wufoo API key and subdomain."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"forms.list","description":"List all forms in the Wufoo account.","parameters":{"type":"object","properties":{},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"forms.find","description":"Find a specific form by name or criteria.","parameters":{"type":"object","properties":{"formHash":{"type":"string"}},"required":["formHash"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"entries.list","description":"List entries from a specific form.","parameters":{"type":"object","properties":{"formHash":{"type":"string"},"pageStart":{"type":"integer"},"pageSize":{"type":"integer"},"sort":{"type":"string"}},"required":["formHash"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"entries.get","description":"Get a specific entry by ID.","parameters":{"type":"object","properties":{"formHash":{"type":"string"},"entryId":{"type":"string"}},"required":["formHash","entryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"entries.create","description":"Create a new form entry.","parameters":{"type":"object","properties":{"formHash":{"type":"string"},"data":{"type":"object"}},"required":["formHash","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"entries.search","description":"Search form entries by field value.","parameters":{"type":"object","properties":{"formHash":{"type":"string"},"fieldId":{"type":"string"},"searchValue":{"type":"string"},"matchType":{"type":"string"}},"required":["formHash","fieldId","searchValue"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"fields.list","description":"List all fields in a form.","parameters":{"type":"object","properties":{"formHash":{"type":"string"}},"required":["formHash"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"entries.update","description":"Update an existing entry.","parameters":{"type":"object","properties":{"formHash":{"type":"string"},"entryId":{"type":"string"},"data":{"type":"object","description":"Field-id keyed update payload."}},"required":["formHash","entryId","data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"entries.delete","description":"Delete a form entry.","parameters":{"type":"object","properties":{"formHash":{"type":"string"},"entryId":{"type":"string"}},"required":["formHash","entryId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.create","description":"Subscribe a webhook to a form.","parameters":{"type":"object","properties":{"formHash":{"type":"string"},"url":{"type":"string","description":"Webhook target URL."},"handshakeKey":{"type":"string","description":"Optional shared secret echoed in posts."},"metadata":{"type":"boolean","description":"Include field metadata in payload."}},"required":["formHash","url"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webhooks.delete","description":"Unsubscribe a webhook from a form.","parameters":{"type":"object","properties":{"formHash":{"type":"string"},"webhookHash":{"type":"string"}},"required":["formHash","webhookHash"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"xero","displayName":"Xero","description":"Search and update Xero contacts, invoices, and chart-of-account records across authorized organizations.","auth":{"kind":"oauth2","authorizationUrl":"https://login.xero.com/identity/connect/authorize","tokenUrl":"https://identity.xero.com/connect/token","scopes":["offline_access","accounting.contacts","accounting.contacts.read","accounting.invoices","accounting.invoices.read","accounting.payments","accounting.settings.read","accounting.reports.aged.read","accounting.reports.balancesheet.read","accounting.reports.banksummary.read","accounting.reports.profitandloss.read","accounting.reports.trialbalance.read"],"clientIdEnv":"XERO_OAUTH_CLIENT_ID","clientSecretEnv":"XERO_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tenants.list","description":"List the Xero organizations (tenants) this connection is authorized for. Call this FIRST — every other Xero capability requires the `tenantId` returned here.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"reports.get","description":"Run a Xero accounting report. `reportName` is the Xero report id (ProfitAndLoss, BalanceSheet, TrialBalance, BankSummary, AgedReceivablesByContact, AgedPayablesByContact).","parameters":{"type":"object","properties":{"tenantId":{"type":"string","description":"From tenants.list."},"reportName":{"type":"string","enum":["ProfitAndLoss","BalanceSheet","TrialBalance","BankSummary","AgedReceivablesByContact","AgedPayablesByContact"]},"fromDate":{"type":"string","description":"YYYY-MM-DD."},"toDate":{"type":"string","description":"YYYY-MM-DD."},"date":{"type":"string","description":"YYYY-MM-DD — point-in-time reports (BalanceSheet, TrialBalance)."},"contactId":{"type":"string","description":"Required by the aged receivables/payables reports."}},"required":["tenantId","reportName"]},"requiredScopes":["accounting.reports.aged.read","accounting.reports.balancesheet.read","accounting.reports.banksummary.read","accounting.reports.profitandloss.read","accounting.reports.trialbalance.read"],"class":"read"},{"name":"contacts.search","description":"Search Xero contacts in a tenant using the Xero where-clause query language.","parameters":{"type":"object","properties":{"tenantId":{"type":"string","description":"Xero tenant (organization) id from /connections."},"where":{"type":"string","description":"Xero where clause, e.g. 'Name.Contains(\"Acme\")'."},"order":{"type":"string","description":"Sort expression, e.g. \"Name ASC\"."},"page":{"type":"integer","minimum":1}},"required":["tenantId"]},"requiredScopes":["accounting.contacts.read"],"class":"read"},{"name":"contacts.get","description":"Read a single Xero contact by ContactID.","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"contactId":{"type":"string","description":"Xero ContactID (GUID)."}},"required":["tenantId","contactId"]},"requiredScopes":["accounting.contacts.read"],"class":"read"},{"name":"contacts.create","description":"Create a Xero contact. Pass a Contacts array per the Xero API contract.","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"Contacts":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string"},"EmailAddress":{"type":"string"},"FirstName":{"type":"string"},"LastName":{"type":"string"}},"required":["Name"]}}},"required":["tenantId","Contacts"]},"requiredScopes":["accounting.contacts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update a Xero contact by ContactID.","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"contactId":{"type":"string"},"fields":{"type":"object","description":"Partial Xero Contact payload."}},"required":["tenantId","contactId","fields"]},"requiredScopes":["accounting.contacts"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"invoices.search","description":"Search Xero invoices in a tenant.","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"where":{"type":"string","description":"Xero where clause, e.g. 'Status==\"AUTHORISED\"'."},"order":{"type":"string","description":"Sort expression, e.g. \"Date DESC\"."},"page":{"type":"integer","minimum":1}},"required":["tenantId"]},"requiredScopes":["accounting.invoices.read"],"class":"read"},{"name":"invoices.get","description":"Read a single Xero invoice by InvoiceID or InvoiceNumber.","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"invoiceId":{"type":"string","description":"Xero InvoiceID (GUID) or InvoiceNumber."}},"required":["tenantId","invoiceId"]},"requiredScopes":["accounting.invoices.read"],"class":"read"},{"name":"invoices.create","description":"Create a Xero invoice (AR or AP). Pass an Invoices array per the Xero API contract.","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"Invoices":{"type":"array","items":{"type":"object","properties":{"Type":{"type":"string","enum":["ACCREC","ACCPAY"]},"Contact":{"type":"object"},"LineItems":{"type":"array","items":{"type":"object"}},"Date":{"type":"string","description":"YYYY-MM-DD."},"DueDate":{"type":"string","description":"YYYY-MM-DD."},"Reference":{"type":"string"},"Status":{"type":"string","enum":["DRAFT","SUBMITTED","AUTHORISED"]}},"required":["Type","Contact","LineItems"]}}},"required":["tenantId","Invoices"]},"requiredScopes":["accounting.invoices"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"accounts.search","description":"List Xero chart-of-account records for a tenant.","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"where":{"type":"string","description":"Xero where clause, e.g. 'Type==\"REVENUE\"'."},"order":{"type":"string"}},"required":["tenantId"]},"requiredScopes":["accounting.settings.read"],"class":"read"},{"name":"contacts.archive","description":"Archive a Xero contact (sets ContactStatus to ARCHIVED).","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"contactId":{"type":"string","description":"Xero ContactID (GUID)."}},"required":["tenantId","contactId"]},"requiredScopes":["accounting.contacts"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.delete","description":"Void or delete a Xero invoice. DRAFT/SUBMITTED invoices accept DELETED, AUTHORISED invoices accept VOIDED.","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"invoiceId":{"type":"string","description":"Xero InvoiceID (GUID) or InvoiceNumber."},"status":{"type":"string","enum":["VOIDED","DELETED"],"description":"Target status. VOIDED for authorised invoices, DELETED for draft/submitted invoices."}},"required":["tenantId","invoiceId","status"]},"requiredScopes":["accounting.invoices"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.email","description":"Email a Xero invoice to its contact using the saved template.","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"invoiceId":{"type":"string","description":"Xero InvoiceID (GUID) or InvoiceNumber."}},"required":["tenantId","invoiceId"]},"requiredScopes":["accounting.invoices"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payments.create","description":"Apply a payment to a Xero invoice or credit note. Pass a Payments array per the Xero API contract.","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"Payments":{"type":"array","items":{"type":"object","properties":{"Invoice":{"type":"object","description":"Invoice reference, e.g. { InvoiceID: \"...\" }."},"CreditNote":{"type":"object","description":"CreditNote reference, e.g. { CreditNoteID: \"...\" }."},"Account":{"type":"object","description":"Bank account reference, e.g. { Code: \"090\" }."},"Date":{"type":"string","description":"YYYY-MM-DD."},"Amount":{"type":"number"},"Reference":{"type":"string"}},"required":["Account","Date","Amount"]}}},"required":["tenantId","Payments"]},"requiredScopes":["accounting.payments"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"credit-notes.create","description":"Create a Xero credit note (ACCRECCREDIT or ACCPAYCREDIT). Pass a CreditNotes array per the Xero API contract.","parameters":{"type":"object","properties":{"tenantId":{"type":"string"},"CreditNotes":{"type":"array","items":{"type":"object","properties":{"Type":{"type":"string","enum":["ACCRECCREDIT","ACCPAYCREDIT"]},"Contact":{"type":"object"},"LineItems":{"type":"array","items":{"type":"object"}},"Date":{"type":"string","description":"YYYY-MM-DD."},"Reference":{"type":"string"},"Status":{"type":"string","enum":["DRAFT","SUBMITTED","AUTHORISED"]}},"required":["Type","Contact","LineItems"]}}},"required":["tenantId","CreditNotes"]},"requiredScopes":["accounting.invoices"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"youcanbookme","displayName":"YouCanBookMe","description":"Manage online scheduling, profiles, and bookings with YouCanBookMe.","auth":{"kind":"api-key","hint":"YouCanBookMe Account ID or API credentials."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"profiles.create","description":"Create a new booking profile.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"Profile title"},"description":{"type":"string","description":"Profile description"},"subdomain":{"type":"string","description":"Subdomain for the profile"},"timeZone":{"type":"string","description":"Time zone (e.g., America/New_York)"},"locale":{"type":"string","description":"Locale (e.g., en-US)"},"logo":{"type":"string","description":"Logo URL"},"accessCode":{"type":"string","description":"Access code"},"displayTimeZone":{"type":"string","description":"Display time zone"}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bookings.retrieve","description":"Retrieve a booking by ID.","parameters":{"type":"object","properties":{"bookingId":{"type":"string","description":"Booking ID"},"fields":{"type":"string","description":"Comma-separated list of fields to return (default: id,title,accountId,profileId,createdAt,startsAt,endsAt,location,tentative,timeZone,cancelled,numberOfSlots)"},"displayTimeZone":{"type":"string","description":"Time zone to display times in"}},"required":["bookingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"bookings.cancel","description":"Cancel a booking by ID.","parameters":{"type":"object","properties":{"bookingId":{"type":"string","description":"Booking ID to cancel"},"reason":{"type":"string","description":"Optional cancellation reason"}},"required":["bookingId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"bookings.reschedule","description":"Reschedule a booking to a new slot.","parameters":{"type":"object","properties":{"bookingId":{"type":"string","description":"Booking ID to reschedule"},"startsAt":{"type":"string","description":"New start time (ISO 8601)"},"endsAt":{"type":"string","description":"New end time (ISO 8601)"},"timeZone":{"type":"string","description":"Time zone for the new slot"}},"required":["bookingId","startsAt"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"profiles.update","description":"Update an existing booking profile.","parameters":{"type":"object","properties":{"profileId":{"type":"string","description":"Profile ID to update"},"title":{"type":"string","description":"Updated profile title"},"description":{"type":"string","description":"Updated profile description"},"subdomain":{"type":"string","description":"Updated subdomain"},"timeZone":{"type":"string","description":"Updated time zone"},"locale":{"type":"string","description":"Updated locale"},"logo":{"type":"string","description":"Updated logo URL"},"accessCode":{"type":"string","description":"Updated access code"},"displayTimeZone":{"type":"string","description":"Updated display time zone"}},"required":["profileId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"profiles.delete","description":"Delete a booking profile.","parameters":{"type":"object","properties":{"profileId":{"type":"string","description":"Profile ID to delete"}},"required":["profileId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"youtube","displayName":"YouTube","description":"Resolve a YouTube channel by @handle, username, or id; list its most recent uploads; and fetch public video metadata (title, description, duration, view/like counts) for any public channel the connected Google identity can read.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.google.com/o/oauth2/v2/auth","tokenUrl":"https://oauth2.googleapis.com/token","scopes":["https://www.googleapis.com/auth/youtube.readonly"],"clientIdEnv":"GOOGLE_OAUTH_CLIENT_ID","clientSecretEnv":"GOOGLE_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent","include_granted_scopes":"true"}},"category":"other","defaultConsistencyModel":"cache","capabilities":[{"name":"channels.resolve","description":"Resolve a channel and read its snippet, statistics, and the uploads-playlist id needed by channels.recentUploads. Pass exactly one of handle (e.g. \"@MrBeast\"), username (legacy), or channelId (GET /channels?part=snippet,statistics,contentDetails).","parameters":{"type":"object","properties":{"handle":{"type":"string","description":"Channel @handle, e.g. \"@MrBeast\" (with or without the leading @)."},"username":{"type":"string","description":"Legacy channel username (only for old custom-username channels)."},"channelId":{"type":"string","description":"Canonical channel id (UC...), if already known."}}},"requiredScopes":["https://www.googleapis.com/auth/youtube.readonly"],"class":"read"},{"name":"channels.recentUploads","description":"List a channel's most recent uploads (video id, title, description, publishedAt) from its uploads playlist. Get uploadsPlaylistId from channels.resolve (contentDetails.relatedPlaylists.uploads). maxResults is 1-50, default 15 (GET /playlistItems?part=snippet,contentDetails).","parameters":{"type":"object","properties":{"uploadsPlaylistId":{"type":"string","description":"The channel's uploads playlist id (UU...), from channels.resolve."},"maxResults":{"type":"integer","description":"How many recent uploads to return (1-50, default 15)."},"pageToken":{"type":"string","description":"Page token from a prior response's nextPageToken to page further back."}},"required":["uploadsPlaylistId"]},"requiredScopes":["https://www.googleapis.com/auth/youtube.readonly"],"class":"read"},{"name":"videos.list","description":"Fetch public metadata for up to 50 videos by id — title, description, duration, and view/like/comment counts. Pass a comma-separated id list, e.g. \"id1,id2,id3\" (GET /videos?part=snippet,statistics,contentDetails).","parameters":{"type":"object","properties":{"ids":{"type":"string","description":"Comma-separated video ids (max 50), e.g. \"dQw4w9WgXcQ,abc123\"."}},"required":["ids"]},"requiredScopes":["https://www.googleapis.com/auth/youtube.readonly"],"class":"read"},{"name":"captions.list","description":"List the caption tracks AVAILABLE for a video (language, kind, auto-vs-manual). Reports availability only — caption bodies are owner-only on the Data API, so fetch transcript text out-of-band. (GET /captions?part=snippet&videoId=...).","parameters":{"type":"object","properties":{"videoId":{"type":"string","description":"The video id to list caption tracks for."}},"required":["videoId"]},"requiredScopes":["https://www.googleapis.com/auth/youtube.readonly"],"class":"read"}]},{"kind":"zagomail","displayName":"Zagomail","description":"All-in-one email marketing and automation platform for managing subscribers, campaigns, and tags.","auth":{"kind":"api-key","hint":"Zagomail API key."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"subscribers.create","description":"Create a new subscriber in Zagomail.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address of the subscriber"},"firstName":{"type":"string","description":"First name of the subscriber"},"lastName":{"type":"string","description":"Last name of the subscriber"},"metadata":{"type":"object","description":"Additional subscriber metadata"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.update","description":"Update an existing subscriber.","parameters":{"type":"object","properties":{"subscriberUid":{"type":"string","description":"Unique identifier of the subscriber"},"email":{"type":"string","description":"Updated email address"},"firstName":{"type":"string","description":"Updated first name"},"lastName":{"type":"string","description":"Updated last name"},"metadata":{"type":"object","description":"Updated metadata"}},"required":["subscriberUid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"subscribers.get","description":"Get subscriber details by ID.","parameters":{"type":"object","properties":{"subscriberUid":{"type":"string","description":"Unique identifier of the subscriber"}},"required":["subscriberUid"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.search","description":"Search subscribers by email address.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"Email address to search for"},"limit":{"type":"integer","description":"Maximum number of results"},"offset":{"type":"integer","description":"Offset for pagination"}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.add-tags","description":"Add one or more tags to a subscriber.","parameters":{"type":"object","properties":{"subscriberUid":{"type":"string","description":"Unique identifier of the subscriber"},"tags":{"type":"array","description":"Array of tag names to add","items":{"type":"string"}}},"required":["subscriberUid","tags"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.create","description":"Create a new tag in Zagomail.","parameters":{"type":"object","properties":{"name":{"type":"string","description":"Name of the tag to create"},"description":{"type":"string","description":"Optional description of the tag"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.get","description":"Get campaign details by campaign ID.","parameters":{"type":"object","properties":{"campaignId":{"type":"string","description":"Unique identifier of the campaign"}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"campaigns.list","description":"List all campaigns.","parameters":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of results"},"offset":{"type":"integer","description":"Offset for pagination"},"status":{"type":"string","description":"Filter by campaign status"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"subscribers.delete","description":"Delete a subscriber from Zagomail.","parameters":{"type":"object","properties":{"subscriberUid":{"type":"string","description":"Unique identifier of the subscriber to delete"}},"required":["subscriberUid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscribers.unsubscribe","description":"Unsubscribe a subscriber.","parameters":{"type":"object","properties":{"subscriberUid":{"type":"string","description":"Unique identifier of the subscriber"},"reason":{"type":"string","description":"Optional reason for unsubscribing"}},"required":["subscriberUid"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tags.delete","description":"Delete a tag from Zagomail.","parameters":{"type":"object","properties":{"tagId":{"type":"string","description":"Unique identifier of the tag to delete"}},"required":["tagId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"campaigns.send","description":"Send a campaign immediately.","parameters":{"type":"object","properties":{"campaignId":{"type":"string","description":"Unique identifier of the campaign to send"},"scheduleAt":{"type":"string","description":"Optional ISO timestamp to schedule the send instead of immediate"}},"required":["campaignId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"zapier","displayName":"Zapier","description":"Trigger Zapier Zaps from agents — POST payloads to per-Zap catch hooks and manage Zaps via the Zapier REST Hooks API.","auth":{"kind":"api-key","hint":"Zapier API key (Bearer token) from https://zapier.com/app/developer. Used as `Authorization: Bearer <key>`. Not required for unauthenticated catch-hook POSTs — those use the per-Zap hook URL."},"category":"other","defaultConsistencyModel":"advisory","capabilities":[{"name":"triggers.catch","description":"POST a JSON payload to a Zapier Catch Hook. Supply the two path segments from the Zap-owned URL; the provider host is fixed so credentials cannot be redirected.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Numeric account segment after `/hooks/catch/` in the Zapier hook URL."},"hookId":{"type":"string","description":"Secret hook segment after the account id in the Zapier hook URL."},"payload":{"type":"object","description":"Arbitrary JSON delivered to the Zap as the trigger event."}},"required":["accountId","hookId","payload"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"zaps.list","description":"List Zaps owned by the authenticated account via the Zapier REST Hooks API (https://api.zapier.com/v1/zaps).","parameters":{"type":"object","properties":{"status":{"type":"string","enum":["on","off"],"description":"Filter to Zaps in this state."}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"zaps.get","description":"Read a single Zap by id from the Zapier REST Hooks API.","parameters":{"type":"object","properties":{"zapId":{"type":"string"}},"required":["zapId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"actions.list","description":"List Natural Language Actions (NLA) exposed to the authenticated Zapier account. Returns each exposed action and the args it accepts; feed the results to `actions.execute` to run one.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"actions.execute","description":"Execute a Zapier Natural Language Action by `action_id`. `instructions` is the natural-language directive Zapier's NLA layer parses into the action's argument fields. Set `preview_only: true` to return the parsed args without performing the side-effect — useful for surfacing a confirmation step before committing.","parameters":{"type":"object","properties":{"action_id":{"type":"string","description":"The exposed NLA action id (from `actions.list`)."},"instructions":{"type":"string","description":"Natural-language directive that Zapier maps onto the action's required + optional fields."},"preview_only":{"type":"boolean","default":false,"description":"When true, Zapier returns the parsed args without executing the underlying side-effect."}},"required":["action_id","instructions"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"zendesk","displayName":"Zendesk","description":"Search, read, create, and update Zendesk support tickets and end users.","auth":{"kind":"oauth2","authorizationUrl":"https://{subdomain}.zendesk.com/oauth/authorizations/new","tokenUrl":"https://{subdomain}.zendesk.com/oauth/tokens","scopes":["read","write"],"clientIdEnv":"ZENDESK_OAUTH_CLIENT_ID","clientSecretEnv":"ZENDESK_OAUTH_CLIENT_SECRET"},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"tickets.search","description":"Search tickets using the Zendesk search query syntax (e.g. status:open priority:high).","parameters":{"type":"object","properties":{"query":{"type":"string"},"sort_by":{"type":"string"},"sort_order":{"type":"string","enum":["asc","desc"]},"per_page":{"type":"integer"}},"required":["query"]},"requiredScopes":["read"],"class":"read"},{"name":"tickets.get","description":"Read a single Zendesk ticket by id.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"}},"required":["ticketId"]},"requiredScopes":["read"],"class":"read"},{"name":"tickets.create","description":"Create a Zendesk ticket. Pass the Zendesk ticket payload under `ticket`.","parameters":{"type":"object","properties":{"ticket":{"type":"object"}},"required":["ticket"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.update","description":"Update a Zendesk ticket. Pass the Zendesk ticket payload under `ticket`.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"},"ticket":{"type":"object"}},"required":["ticketId","ticket"]},"requiredScopes":["write"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"users.search","description":"Search end users (the Zendesk requesters/customers).","parameters":{"type":"object","properties":{"query":{"type":"string"},"per_page":{"type":"integer"}},"required":["query"]},"requiredScopes":["read"],"class":"read"},{"name":"users.create","description":"Create a Zendesk end user. Pass the Zendesk user payload under `user`.","parameters":{"type":"object","properties":{"user":{"type":"object"}},"required":["user"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.delete","description":"Delete a Zendesk ticket by id. Soft-deletes per Zendesk retention rules.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"}},"required":["ticketId"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.merge","description":"Merge one or more source tickets into a target ticket. `ids` lists the source tickets to merge into `ticketId`. Pass optional comments under `target_comment` / `source_comment`.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"},"ids":{"type":"array","items":{"type":"string"}},"target_comment":{"type":"string"},"source_comment":{"type":"string"}},"required":["ticketId","ids"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.add-comment","description":"Add a public or internal comment to an existing ticket. Set `public` to false for an internal note.","parameters":{"type":"object","properties":{"ticketId":{"type":"string"},"body":{"type":"string"},"public":{"type":"boolean"}},"required":["ticketId","body","public"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.update","description":"Update a Zendesk end user. Pass the Zendesk user payload under `user`.","parameters":{"type":"object","properties":{"userId":{"type":"string"},"user":{"type":"object"}},"required":["userId","user"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.delete","description":"Delete a Zendesk end user by id. Soft-deletes per Zendesk retention rules.","parameters":{"type":"object","properties":{"userId":{"type":"string"}},"required":["userId"]},"requiredScopes":["write"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"zendesk-sell","displayName":"Zendesk Sell","description":"Manage CRM data with Zendesk Sell for pipeline management, lead tracking, and contact organization.","auth":{"kind":"api-key","hint":"Zendesk Sell API Token."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contacts.create","description":"Create a new contact in Zendesk Sell.","parameters":{"type":"object","properties":{"isOrganization":{"type":"boolean"},"name":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"mobile":{"type":"string"},"address":{"type":"object"},"customFields":{"type":"object"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.find","description":"Find contacts by criteria.","parameters":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"},"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contacts.update","description":"Update an existing contact.","parameters":{"type":"object","properties":{"contactId":{"type":"string"},"name":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"mobile":{"type":"string"},"address":{"type":"object"},"customFields":{"type":"object"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"leads.create","description":"Create a new lead.","parameters":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"organizationName":{"type":"string"},"status":{"type":"string"},"title":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.find","description":"Find leads by criteria.","parameters":{"type":"object","properties":{"status":{"type":"string"},"email":{"type":"string"},"limit":{"type":"integer"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"deals.create","description":"Create a new deal.","parameters":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"number"},"currency":{"type":"string"},"estimatedCloseDate":{"type":"string"},"hot":{"type":"boolean"}},"required":["name"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deals.find","description":"Find a deal by ID or name.","parameters":{"type":"object","properties":{"dealId":{"type":"number"},"dealName":{"type":"string"}},"required":[]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"deals.update","description":"Update an existing deal.","parameters":{"type":"object","properties":{"dealId":{"type":"string"},"name":{"type":"string"},"value":{"type":"number"},"currency":{"type":"string"},"estimatedCloseDate":{"type":"string"},"hot":{"type":"boolean"}},"required":["dealId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"notes.create","description":"Create a note attached to a resource.","parameters":{"type":"object","properties":{"resourceType":{"type":"string"},"resourceId":{"type":"string"},"content":{"type":"string"},"isImportant":{"type":"boolean"}},"required":["resourceType","resourceId","content"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.delete","description":"Delete a contact from Zendesk Sell.","parameters":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact identifier to delete"}},"required":["contactId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.update","description":"Update an existing lead.","parameters":{"type":"object","properties":{"leadId":{"type":"string","description":"Lead identifier to update"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"organizationName":{"type":"string"},"status":{"type":"string"},"title":{"type":"string"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"leads.delete","description":"Delete a lead.","parameters":{"type":"object","properties":{"leadId":{"type":"string","description":"Lead identifier to delete"}},"required":["leadId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"deals.delete","description":"Delete a deal.","parameters":{"type":"object","properties":{"dealId":{"type":"string","description":"Deal identifier to delete"}},"required":["dealId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tasks.create","description":"Create a task in Zendesk Sell.","parameters":{"type":"object","properties":{"title":{"type":"string","description":"Task title"},"description":{"type":"string","description":"Task description"},"dueDate":{"type":"string","description":"Due date (ISO 8601)"},"ownerId":{"type":"string","description":"Task owner identifier"},"resourceType":{"type":"string","description":"Associated resource type (e.g., contact, lead, deal)"},"resourceId":{"type":"string","description":"Associated resource identifier"},"completed":{"type":"boolean","description":"Whether the task is completed"}},"required":["title"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"zenrows","displayName":"ZenRows","description":"Render and scrape any web page through ZenRows' Universal Scraper API, handling proxy rotation, headless browsers, and anti-bot bypass.","auth":{"kind":"api-key","hint":"API key from your ZenRows dashboard. Sent as the apikey query parameter."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"page.scrape","description":"Fetch a URL and return its HTML, optionally rendering JavaScript and routing through premium residential proxies.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Target URL to scrape."},"js_render":{"type":"boolean","description":"Render the page with a headless browser."},"premium_proxy":{"type":"boolean","description":"Route the request through residential proxies."},"proxy_country":{"type":"string","description":"Two-letter country code for proxy geolocation."},"wait":{"type":"integer","description":"Fixed delay in milliseconds after page load."},"wait_for":{"type":"string","description":"CSS selector to wait for in the DOM before returning."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"page.extract","description":"Scrape a URL and return structured data extracted via CSS selectors or ZenRows' automatic parser.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Target URL to scrape."},"css_extractor":{"type":"string","description":"JSON string mapping output keys to CSS selectors."},"autoparse":{"type":"boolean","description":"Automatically extract structured data from supported sites."},"js_render":{"type":"boolean","description":"Render the page with a headless browser."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"page.markdown","description":"Fetch a URL and return its content converted to Markdown, plaintext, or PDF.","parameters":{"type":"object","properties":{"url":{"type":"string","description":"Target URL to scrape."},"response_type":{"type":"string","description":"Output conversion type, e.g. markdown, plaintext, or pdf."},"js_render":{"type":"boolean","description":"Render the page with a headless browser."}},"required":["url"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"zeplin","displayName":"Zeplin","description":"Collaborate on design projects in Zeplin: find and update projects and screens, create notes on designs.","auth":{"kind":"api-key","hint":"Zeplin API token."},"category":"other","defaultConsistencyModel":"authoritative","capabilities":[{"name":"projects.search","description":"Find a project by name.","parameters":{"type":"object","properties":{"projectName":{"type":"string"}},"required":["projectName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"projects.update","description":"Update a project name or description.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"screens.search","description":"Find a screen by name within a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"screenName":{"type":"string"}},"required":["projectId","screenName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"screens.update","description":"Update a screen in a project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"screenId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}},"required":["projectId","screenId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"notes.create","description":"Create a note on a design screen.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"screenId":{"type":"string"},"content":{"type":"string"},"color":{"type":"string"},"x":{"type":"number"},"y":{"type":"number"},"xStart":{"type":"number"},"yStart":{"type":"number"}},"required":["projectId","screenId","content","color","x","y"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.update","description":"Update an existing screen note (content and/or color).","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"screenId":{"type":"string"},"noteId":{"type":"string"},"content":{"type":"string"},"color":{"type":"string"}},"required":["projectId","screenId","noteId","content","color"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.delete","description":"Delete a screen note by id.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"screenId":{"type":"string"},"noteId":{"type":"string"}},"required":["projectId","screenId","noteId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"projects.list","description":"List all projects the authenticated user has access to.","parameters":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0},"status":{"type":"string","enum":["active","archived","all"]}}},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"components.list","description":"List style-guide components for a given project.","parameters":{"type":"object","properties":{"projectId":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}},"required":["projectId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"zerobounce","displayName":"ZeroBounce","description":"Email validation and verification via the ZeroBounce REST API.","auth":{"kind":"api-key","hint":"ZeroBounce API key from your account dashboard."},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"validate.email","description":"Validate a single email address. Returns status (valid, invalid, catch-all, unknown, spamtrap, abuse), bounce type, and additional metadata.","parameters":{"type":"object","properties":{"email":{"type":"string","description":"The email address to validate."},"ipAddress":{"type":"string","description":"Optional IP address of the user submitting the email address. Can improve accuracy when provided."}},"required":["email"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"zoho-bookings","displayName":"Zoho Bookings","description":"Discover services and staff, check availability, and manage Zoho Bookings appointments.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.zoho.com/oauth/v2/auth","tokenUrl":"https://accounts.zoho.com/oauth/v2/token","scopes":["zohobookings.data.CREATE","zohobookings.data.READ"],"scopeSeparator":",","clientIdEnv":"ZOHO_OAUTH_CLIENT_ID","clientSecretEnv":"ZOHO_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent"}},"category":"calendar","defaultConsistencyModel":"authoritative","capabilities":[{"name":"workspaces.list","class":"read","description":"List Zoho Bookings workspaces.","parameters":{"type":"object","properties":{}},"requiredScopes":["zohobookings.data.READ"]},{"name":"services.list","class":"read","description":"List services, optionally within one workspace.","parameters":{"type":"object","properties":{"workspace_id":{"type":"string"}}},"requiredScopes":["zohobookings.data.READ"]},{"name":"resources.list","class":"read","description":"List bookable resources, optionally for one service.","parameters":{"type":"object","properties":{"service_id":{"type":"string"}}},"requiredScopes":["zohobookings.data.READ"]},{"name":"staff.list","class":"read","description":"List staff, optionally for one service.","parameters":{"type":"object","properties":{"service_id":{"type":"string"}}},"requiredScopes":["zohobookings.data.READ"]},{"name":"appointments.list","class":"read","description":"List appointments from a required start time.","parameters":{"type":"object","properties":{"from_time":{"type":"string","description":"Zoho timestamp in dd-MMM-yyyy HH:mm:ss format."},"to_time":{"type":"string"},"service_id":{"type":"string"},"staff_id":{"type":"string"},"status":{"type":"string"}},"required":["from_time"]},"requiredScopes":["zohobookings.data.READ"]},{"name":"appointments.get","class":"read","description":"Read one appointment by booking id.","parameters":{"type":"object","properties":{"booking_id":{"type":"string"}},"required":["booking_id"]},"requiredScopes":["zohobookings.data.READ"]},{"name":"availability.fetch","class":"read","description":"Fetch open time slots for a service and date.","parameters":{"type":"object","properties":{"service_id":{"type":"string"},"selected_date":{"type":"string","description":"Date in YYYY-MM-DD format."},"staff_id":{"type":"string"},"group_id":{"type":"string"},"resource_id":{"type":"string"}},"required":["service_id","selected_date"]},"requiredScopes":["zohobookings.data.READ"]},{"name":"appointments.book","class":"mutation","description":"Book an appointment for a customer.","parameters":{"type":"object","properties":{"service_id":{"type":"string"},"from_time":{"type":"string","description":"Zoho timestamp in dd-MMM-yyyy HH:mm:ss format."},"customer_details":{"type":"object","description":"Customer name, email, and phone_number."},"staff_id":{"type":"string"},"resource_id":{"type":"string"},"group_id":{"type":"string"},"to_time":{"type":"string"},"timezone":{"type":"string"},"notes":{"type":"string"},"additional_fields":{"type":"object"},"payment_info":{"type":"object"}},"required":["service_id","from_time","customer_details"]},"cas":"native-idempotency","externalEffect":true,"requiredScopes":["zohobookings.data.CREATE"]},{"name":"appointments.reschedule","class":"mutation","description":"Move an appointment to a new time, staff member, or group.","parameters":{"type":"object","properties":{"booking_id":{"type":"string"},"start_time":{"type":"string","description":"Zoho timestamp in dd-MMM-yyyy HH:mm:ss format."},"staff_id":{"type":"string"},"group_id":{"type":"string"}},"required":["booking_id"]},"cas":"native-idempotency","externalEffect":true,"requiredScopes":["zohobookings.data.CREATE"]},{"name":"appointments.cancel","class":"mutation","description":"Cancel an appointment by booking id.","parameters":{"type":"object","properties":{"booking_id":{"type":"string"}},"required":["booking_id"]},"cas":"native-idempotency","externalEffect":true,"requiredScopes":["zohobookings.data.CREATE"]}]},{"kind":"zoho-books","displayName":"Zoho Books","description":"Manage Zoho Books organizations, contacts, invoices, and customer payments.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.zoho.com/oauth/v2/auth","tokenUrl":"https://accounts.zoho.com/oauth/v2/token","scopes":["ZohoBooks.fullaccess.all"],"scopeSeparator":",","clientIdEnv":"ZOHO_OAUTH_CLIENT_ID","clientSecretEnv":"ZOHO_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent"},"tokenMetadata":{"apiDomain":{"field":"api_domain","required":true}}},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"organizations.list","description":"List organizations available to the connected Zoho Books user.","parameters":{"type":"object","properties":{}},"requiredScopes":["ZohoBooks.fullaccess.all"],"class":"read"},{"name":"contacts.list","description":"List customers and vendors in a Zoho Books organization.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Books organization id. Discover it with organizations.list."},"contact_type":{"type":"string","enum":["customer","vendor"]},"search_text":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":200}},"required":["organization_id"]},"requiredScopes":["ZohoBooks.fullaccess.all"],"class":"read"},{"name":"contacts.get","description":"Read one Zoho Books contact.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Books organization id. Discover it with organizations.list."},"contactId":{"type":"string"}},"required":["organization_id","contactId"]},"requiredScopes":["ZohoBooks.fullaccess.all"],"class":"read"},{"name":"contacts.create","description":"Create a customer or vendor in Zoho Books.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Books organization id. Discover it with organizations.list."},"data":{"type":"object","description":"Provider-native Zoho Books request body."}},"required":["organization_id","data"]},"requiredScopes":["ZohoBooks.fullaccess.all"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.update","description":"Update an existing Zoho Books contact.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Books organization id. Discover it with organizations.list."},"contactId":{"type":"string"},"data":{"type":"object","description":"Provider-native Zoho Books request body."}},"required":["organization_id","contactId","data"]},"requiredScopes":["ZohoBooks.fullaccess.all"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"invoices.list","description":"List invoices with optional customer and status filters.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Books organization id. Discover it with organizations.list."},"customer_id":{"type":"string"},"status":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":200}},"required":["organization_id"]},"requiredScopes":["ZohoBooks.fullaccess.all"],"class":"read"},{"name":"invoices.get","description":"Read one Zoho Books invoice.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Books organization id. Discover it with organizations.list."},"invoiceId":{"type":"string"}},"required":["organization_id","invoiceId"]},"requiredScopes":["ZohoBooks.fullaccess.all"],"class":"read"},{"name":"invoices.create","description":"Create an invoice in Zoho Books.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Books organization id. Discover it with organizations.list."},"data":{"type":"object","description":"Provider-native Zoho Books request body."}},"required":["organization_id","data"]},"requiredScopes":["ZohoBooks.fullaccess.all"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.update","description":"Update a Zoho Books invoice.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Books organization id. Discover it with organizations.list."},"invoiceId":{"type":"string"},"data":{"type":"object","description":"Provider-native Zoho Books request body."}},"required":["organization_id","invoiceId","data"]},"requiredScopes":["ZohoBooks.fullaccess.all"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"invoices.send","description":"Email an existing invoice to its configured recipients.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Books organization id. Discover it with organizations.list."},"invoiceId":{"type":"string"},"data":{"type":"object","description":"Provider-native Zoho Books request body."}},"required":["organization_id","invoiceId","data"]},"requiredScopes":["ZohoBooks.fullaccess.all"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"customer-payments.list","description":"List customer payments in a Zoho Books organization.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Books organization id. Discover it with organizations.list."},"customer_id":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":200}},"required":["organization_id"]},"requiredScopes":["ZohoBooks.fullaccess.all"],"class":"read"}]},{"kind":"zoho-campaigns","displayName":"Zoho Campaigns","description":"Manage Zoho Campaigns mailing lists, contacts, campaign drafts, and sends.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.zoho.com/oauth/v2/auth","tokenUrl":"https://accounts.zoho.com/oauth/v2/token","scopes":["ZohoCampaigns.campaign.ALL","ZohoCampaigns.contact.ALL"],"scopeSeparator":",","clientIdEnv":"ZOHO_OAUTH_CLIENT_ID","clientSecretEnv":"ZOHO_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent"}},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"campaigns.list","class":"read","description":"List recent campaigns with optional status and pagination filters.","parameters":{"type":"object","properties":{"status":{"type":"string"},"fromindex":{"type":"integer","minimum":1},"range":{"type":"integer","minimum":1,"maximum":200}}},"requiredScopes":["ZohoCampaigns.campaign.ALL"]},{"name":"mailing-lists.list","class":"read","description":"List mailing lists in Zoho Campaigns.","parameters":{"type":"object","properties":{"fromindex":{"type":"integer","minimum":1},"range":{"type":"integer","minimum":1,"maximum":200}}},"requiredScopes":["ZohoCampaigns.contact.ALL"]},{"name":"contacts.list","class":"read","description":"List contacts subscribed to one mailing list.","parameters":{"type":"object","properties":{"listkey":{"type":"string"},"status":{"type":"string"},"fromindex":{"type":"integer","minimum":1},"range":{"type":"integer","minimum":1,"maximum":200}},"required":["listkey"]},"requiredScopes":["ZohoCampaigns.contact.ALL"]},{"name":"contacts.upsert","class":"mutation","description":"Add or update a contact in a mailing list, keyed by email address.","parameters":{"type":"object","properties":{"listkey":{"type":"string"},"contactinfo":{"type":"object","description":"Contact fields. Email Address is required by Zoho Campaigns."},"source":{"type":"string"},"topic_id":{"type":"string"}},"required":["listkey","contactinfo"]},"cas":"native-idempotency","externalEffect":true,"requiredScopes":["ZohoCampaigns.contact.ALL"]},{"name":"contacts.unsubscribe","class":"mutation","description":"Unsubscribe a contact from a mailing list.","parameters":{"type":"object","properties":{"listkey":{"type":"string"},"contactinfo":{"type":"object","description":"Contact identifier fields, normally Email Address."},"topic_id":{"type":"string"}},"required":["listkey","contactinfo"]},"cas":"native-idempotency","externalEffect":true,"requiredScopes":["ZohoCampaigns.contact.ALL"]},{"name":"campaigns.create","class":"mutation","description":"Create a draft campaign targeting one or more mailing lists.","parameters":{"type":"object","properties":{"campaignname":{"type":"string"},"subject":{"type":"string"},"from_name":{"type":"string"},"from_email":{"type":"string"},"reply_to":{"type":"string"},"list_details":{"type":"object","description":"Map of mailing-list key to segment keys; use an empty array for the full list."},"topicId":{"type":"string"},"content_url":{"type":"string"},"email_content":{"type":"string"}},"required":["campaignname","subject","from_name","from_email","list_details"]},"cas":"native-idempotency","externalEffect":true,"requiredScopes":["ZohoCampaigns.campaign.ALL"]},{"name":"campaigns.clone","class":"mutation","description":"Clone an existing campaign into a new draft.","parameters":{"type":"object","properties":{"campaigninfo":{"type":"object","description":"Zoho clone payload, including campaign key and new campaign name."}},"required":["campaigninfo"]},"cas":"native-idempotency","externalEffect":true,"requiredScopes":["ZohoCampaigns.campaign.ALL"]},{"name":"campaigns.send","class":"mutation","description":"Send an existing draft campaign to its configured recipients.","parameters":{"type":"object","properties":{"campaignkey":{"type":"string"}},"required":["campaignkey"]},"cas":"native-idempotency","externalEffect":true,"requiredScopes":["ZohoCampaigns.campaign.ALL"]}]},{"kind":"zoho-crm","displayName":"Zoho CRM","description":"Search Zoho CRM records, read records by id, and create or update modules such as Leads, Contacts, Accounts, and Deals.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.zoho.com/oauth/v2/auth","tokenUrl":"https://accounts.zoho.com/oauth/v2/token","scopes":["ZohoCRM.modules.ALL","ZohoCRM.users.READ","ZohoCRM.settings.READ"],"scopeSeparator":",","clientIdEnv":"ZOHO_OAUTH_CLIENT_ID","clientSecretEnv":"ZOHO_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent"},"tokenMetadata":{"apiDomain":{"field":"api_domain","required":true}}},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"records.list","description":"List records in a module with pagination and optional field projection.","parameters":{"type":"object","properties":{"module":{"type":"string","description":"CRM module API name, e.g. Leads, Contacts, Accounts, Deals, Tasks."},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":200},"fields":{"type":"string","description":"Comma-separated list of field API names to project."},"sort_by":{"type":"string"},"sort_order":{"type":"string","enum":["asc","desc"]}},"required":["module"]},"requiredScopes":["ZohoCRM.modules.ALL"],"class":"read"},{"name":"records.search","description":"Search records in a module by criteria, email, phone, or word. Supply at least one filter.","parameters":{"type":"object","properties":{"module":{"type":"string","description":"CRM module API name, e.g. Leads, Contacts, Accounts, Deals, Tasks."},"criteria":{"type":"string","description":"Zoho criteria syntax, e.g. (Last_Name:equals:Smith)"},"email":{"type":"string"},"phone":{"type":"string"},"word":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":200}},"required":["module"]},"requiredScopes":["ZohoCRM.modules.ALL"],"class":"read"},{"name":"records.get","description":"Read a single Zoho CRM record by id.","parameters":{"type":"object","properties":{"module":{"type":"string","description":"CRM module API name, e.g. Leads, Contacts, Accounts, Deals, Tasks."},"recordId":{"type":"string"},"fields":{"type":"string","description":"Comma-separated list of field API names to project."}},"required":["module","recordId"]},"requiredScopes":["ZohoCRM.modules.ALL"],"class":"read"},{"name":"records.create","description":"Create one or more records in a module (batched up to 100 per call).","parameters":{"type":"object","properties":{"module":{"type":"string","description":"CRM module API name, e.g. Leads, Contacts, Accounts, Deals, Tasks."},"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Zoho v6 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["module","data"]},"requiredScopes":["ZohoCRM.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.update","description":"Update an existing Zoho CRM record by id. Pass `data: [{ ...patch }]`.","parameters":{"type":"object","properties":{"module":{"type":"string","description":"CRM module API name, e.g. Leads, Contacts, Accounts, Deals, Tasks."},"recordId":{"type":"string"},"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Zoho v6 accepts up to 100 records per call.","minItems":1,"maxItems":100},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["module","recordId","data"]},"requiredScopes":["ZohoCRM.modules.ALL"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"records.upsert","description":"Upsert records into a module using duplicate_check_fields. Inserts on miss, updates on match.","parameters":{"type":"object","properties":{"module":{"type":"string","description":"CRM module API name, e.g. Leads, Contacts, Accounts, Deals, Tasks."},"data":{"type":"array","items":{"type":"object"},"description":"Array of records (field API name → value). Zoho v6 accepts up to 100 records per call.","minItems":1,"maxItems":100},"duplicate_check_fields":{"type":"array","items":{"type":"string"},"description":"Field API names Zoho should use to detect an existing record."},"trigger":{"type":"array","items":{"type":"string","enum":["approval","workflow","blueprint"]},"description":"Server-side automations to fire after the write. Omit to skip all."}},"required":["module","data","duplicate_check_fields"]},"requiredScopes":["ZohoCRM.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.delete","description":"Delete a record by id. wf_trigger=false suppresses workflows attached to the module.","parameters":{"type":"object","properties":{"module":{"type":"string","description":"CRM module API name, e.g. Leads, Contacts, Accounts, Deals, Tasks."},"recordId":{"type":"string"},"wf_trigger":{"type":"boolean"}},"required":["module","recordId"]},"requiredScopes":["ZohoCRM.modules.ALL"],"class":"mutation","cas":"none","externalEffect":true},{"name":"records.convert","description":"Convert a Lead into Contact + optional Account/Deal. data[0] carries the conversion payload (Contacts/Accounts/Deals sub-objects, Notify_Lead_Owner, overwrite, etc.).","parameters":{"type":"object","properties":{"leadId":{"type":"string","description":"Lead record id to convert."},"data":{"type":"array","items":{"type":"object"},"description":"Single-element array with the Zoho conversion payload (Contacts, Accounts, Deals, Notify_Lead_Owner, overwrite, etc.).","minItems":1,"maxItems":1}},"required":["leadId","data"]},"requiredScopes":["ZohoCRM.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"records.assign","description":"Reassign one or more records in a module to a new owner. data[0] must carry the new Owner sub-object (e.g. { Owner: { id: \"USER_ID\" } }).","parameters":{"type":"object","properties":{"module":{"type":"string","description":"CRM module API name, e.g. Leads, Contacts, Accounts, Deals, Tasks."},"ids":{"type":"array","items":{"type":"string"},"description":"Record ids to reassign (up to 100 per call).","minItems":1,"maxItems":100},"data":{"type":"array","items":{"type":"object"},"description":"Single-element array carrying the Owner sub-object Zoho should apply to every id.","minItems":1,"maxItems":1}},"required":["module","ids","data"]},"requiredScopes":["ZohoCRM.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"notes.create","description":"Attach a note to a record. data[0] must include Note_Title (optional), Note_Content, Parent_Id, and se_module (the parent module API name).","parameters":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"},"description":"Note records (Note_Title, Note_Content, Parent_Id, se_module). Up to 100 per call.","minItems":1,"maxItems":100}},"required":["data"]},"requiredScopes":["ZohoCRM.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"files.upload","description":"Attach a file to a record by URL. Zoho fetches the URL server-side and links the resulting attachment to the parent record.","parameters":{"type":"object","properties":{"module":{"type":"string","description":"CRM module API name, e.g. Leads, Contacts, Accounts, Deals, Tasks."},"recordId":{"type":"string"},"attachmentUrl":{"type":"string","description":"Publicly reachable URL Zoho will fetch and attach."}},"required":["module","recordId","attachmentUrl"]},"requiredScopes":["ZohoCRM.modules.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"zoho-desk","displayName":"Zoho Desk","description":"Discover organizations, manage support tickets, and find contacts in Zoho Desk.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.zoho.com/oauth/v2/auth","tokenUrl":"https://accounts.zoho.com/oauth/v2/token","scopes":["Desk.tickets.ALL","Desk.contacts.READ","Desk.search.READ","Desk.basic.READ"],"scopeSeparator":",","clientIdEnv":"ZOHO_OAUTH_CLIENT_ID","clientSecretEnv":"ZOHO_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent"}},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"organizations.list","description":"List Zoho Desk organizations available to the connected user.","parameters":{"type":"object","properties":{}},"requiredScopes":["Desk.basic.READ"],"class":"read"},{"name":"tickets.list","description":"List tickets within one Zoho Desk organization.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"Zoho Desk organization id. Discover it with organizations.list."},"include":{"type":"string","description":"Comma-separated related objects to include."},"from":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":100},"status":{"type":"string"},"departmentId":{"type":"string"}},"required":["orgId"]},"requiredScopes":["Desk.tickets.ALL"],"class":"read"},{"name":"tickets.get","description":"Read one ticket by id.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"Zoho Desk organization id. Discover it with organizations.list."},"ticketId":{"type":"string"}},"required":["orgId","ticketId"]},"requiredScopes":["Desk.tickets.ALL"],"class":"read"},{"name":"tickets.create","description":"Create a ticket in one Zoho Desk organization.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"Zoho Desk organization id. Discover it with organizations.list."},"data":{"type":"object","description":"Provider-native Zoho Desk request body."}},"required":["orgId","data"]},"requiredScopes":["Desk.tickets.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.update","description":"Update an existing ticket.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"Zoho Desk organization id. Discover it with organizations.list."},"ticketId":{"type":"string"},"data":{"type":"object","description":"Provider-native Zoho Desk request body."}},"required":["orgId","ticketId","data"]},"requiredScopes":["Desk.tickets.ALL"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"tickets.close","description":"Close a ticket.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"Zoho Desk organization id. Discover it with organizations.list."},"ticketId":{"type":"string"}},"required":["orgId","ticketId"]},"requiredScopes":["Desk.tickets.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.assign","description":"Assign a ticket to an agent.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"Zoho Desk organization id. Discover it with organizations.list."},"ticketId":{"type":"string"},"assigneeId":{"type":"string"}},"required":["orgId","ticketId","assigneeId"]},"requiredScopes":["Desk.tickets.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.add-comment","description":"Add a public or internal comment to a ticket.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"Zoho Desk organization id. Discover it with organizations.list."},"ticketId":{"type":"string"},"content":{"type":"string"},"isPublic":{"type":"boolean"},"contentType":{"type":"string","enum":["html","plainText"]}},"required":["orgId","ticketId","content","isPublic"]},"requiredScopes":["Desk.tickets.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"tickets.merge","description":"Merge duplicate tickets into a primary ticket.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"Zoho Desk organization id. Discover it with organizations.list."},"ticketId":{"type":"string","description":"Primary ticket id."},"ids":{"type":"array","items":{"type":"string"},"minItems":1}},"required":["orgId","ticketId","ids"]},"requiredScopes":["Desk.tickets.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"contacts.find","description":"Find contacts by exact email address.","parameters":{"type":"object","properties":{"orgId":{"type":"string","description":"Zoho Desk organization id. Discover it with organizations.list."},"email":{"type":"string"}},"required":["orgId","email"]},"requiredScopes":["Desk.contacts.READ","Desk.search.READ"],"class":"read"}]},{"kind":"zoho-invoice","displayName":"Zoho Invoice","description":"List, create, update, and send invoices through Zoho Invoice.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.zoho.com/oauth/v2/auth","tokenUrl":"https://accounts.zoho.com/oauth/v2/token","scopes":["ZohoInvoice.fullaccess.all"],"scopeSeparator":",","clientIdEnv":"ZOHO_OAUTH_CLIENT_ID","clientSecretEnv":"ZOHO_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent"},"tokenMetadata":{"apiDomain":{"field":"api_domain","required":true}}},"category":"commerce","defaultConsistencyModel":"authoritative","capabilities":[{"name":"organizations.list","description":"List organizations available to the connected Zoho Invoice user.","parameters":{"type":"object","properties":{}},"requiredScopes":["ZohoInvoice.fullaccess.all"],"class":"read"},{"name":"invoices.list","description":"List invoices, optionally filtering by modification time, customer, or status.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Invoice organization id. Discover it with organizations.list."},"last_modified_at":{"type":"string","description":"Provider date filter, YYYY-MM-DD."},"customer_id":{"type":"string"},"status":{"type":"string"},"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":200}},"required":["organization_id"]},"requiredScopes":["ZohoInvoice.fullaccess.all"],"class":"read"},{"name":"invoices.get","description":"Read one Zoho Invoice invoice.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Invoice organization id. Discover it with organizations.list."},"invoiceId":{"type":"string"}},"required":["organization_id","invoiceId"]},"requiredScopes":["ZohoInvoice.fullaccess.all"],"class":"read"},{"name":"invoices.create","description":"Create a Zoho Invoice invoice.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Invoice organization id. Discover it with organizations.list."},"data":{"type":"object","description":"Provider-native Zoho Invoice request body."}},"required":["organization_id","data"]},"requiredScopes":["ZohoInvoice.fullaccess.all"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"invoices.update","description":"Update a Zoho Invoice invoice.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Invoice organization id. Discover it with organizations.list."},"invoiceId":{"type":"string"},"data":{"type":"object","description":"Provider-native Zoho Invoice request body."}},"required":["organization_id","invoiceId","data"]},"requiredScopes":["ZohoInvoice.fullaccess.all"],"class":"mutation","cas":"optimistic-read-verify","externalEffect":true},{"name":"invoices.send","description":"Email an existing Zoho Invoice invoice to its configured recipients.","parameters":{"type":"object","properties":{"organization_id":{"type":"string","description":"Zoho Invoice organization id. Discover it with organizations.list."},"invoiceId":{"type":"string"},"data":{"type":"object","description":"Provider-native Zoho Invoice request body."}},"required":["organization_id","invoiceId","data"]},"requiredScopes":["ZohoInvoice.fullaccess.all"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"zoho-mail","displayName":"Zoho Mail","description":"Read, organize, and send mail through Zoho Mail.","auth":{"kind":"oauth2","authorizationUrl":"https://accounts.zoho.com/oauth/v2/auth","tokenUrl":"https://accounts.zoho.com/oauth/v2/token","scopes":["ZohoMail.accounts.READ","ZohoMail.messages.ALL","ZohoMail.folders.ALL","ZohoMail.organization.accounts.READ"],"scopeSeparator":",","clientIdEnv":"ZOHO_OAUTH_CLIENT_ID","clientSecretEnv":"ZOHO_OAUTH_CLIENT_SECRET","extraAuthParams":{"access_type":"offline","prompt":"consent"}},"category":"comms","defaultConsistencyModel":"authoritative","capabilities":[{"name":"accounts.list","description":"List Zoho Mail accounts available to the connected user.","parameters":{"type":"object","properties":{}},"requiredScopes":["ZohoMail.accounts.READ"],"class":"read"},{"name":"folders.list","description":"List folders for one Zoho Mail account.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Zoho Mail account id."}},"required":["accountId"]},"requiredScopes":["ZohoMail.folders.ALL"],"class":"read"},{"name":"messages.list","description":"List messages for a folder with offset pagination.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Zoho Mail account id."},"folderId":{"type":"string"},"start":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":200}},"required":["accountId"]},"requiredScopes":["ZohoMail.messages.ALL"],"class":"read"},{"name":"messages.get-original","description":"Fetch the original RFC 822 content for a message.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Zoho Mail account id."},"messageId":{"type":"string","description":"Zoho Mail message id."}},"required":["accountId","messageId"]},"requiredScopes":["ZohoMail.messages.ALL"],"class":"read"},{"name":"messages.mark-read","description":"mark-read one Zoho Mail message.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Zoho Mail account id."},"messageId":{"type":"string","description":"Zoho Mail message id."}},"required":["accountId","messageId"]},"requiredScopes":["ZohoMail.messages.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.mark-unread","description":"mark-unread one Zoho Mail message.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Zoho Mail account id."},"messageId":{"type":"string","description":"Zoho Mail message id."}},"required":["accountId","messageId"]},"requiredScopes":["ZohoMail.messages.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.archive","description":"archive one Zoho Mail message.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Zoho Mail account id."},"messageId":{"type":"string","description":"Zoho Mail message id."}},"required":["accountId","messageId"]},"requiredScopes":["ZohoMail.messages.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.unarchive","description":"unarchive one Zoho Mail message.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Zoho Mail account id."},"messageId":{"type":"string","description":"Zoho Mail message id."}},"required":["accountId","messageId"]},"requiredScopes":["ZohoMail.messages.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.move","description":"Move one message to another folder.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Zoho Mail account id."},"messageId":{"type":"string","description":"Zoho Mail message id."},"folderId":{"type":"string","description":"Current folder id."},"destinationFolderId":{"type":"string","description":"Destination folder id."}},"required":["accountId","messageId","folderId","destinationFolderId"]},"requiredScopes":["ZohoMail.messages.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"messages.send","description":"Send a new Zoho Mail message.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Zoho Mail account id."},"fromAddress":{"type":"string"},"toAddress":{"type":"string"},"ccAddress":{"type":"string"},"bccAddress":{"type":"string"},"subject":{"type":"string"},"content":{"type":"string"},"mailFormat":{"type":"string","enum":["html","plaintext"]},"askReceipt":{"type":"string","enum":["yes","no"]}},"required":["accountId","fromAddress","toAddress","subject","content"]},"requiredScopes":["ZohoMail.messages.ALL"],"class":"mutation","cas":"native-idempotency","externalEffect":true}]},{"kind":"zoom","displayName":"Zoom","description":"Create and manage Zoom meetings, webinars, users, and cloud recordings via the Zoom API v2.","auth":{"kind":"oauth2","authorizationUrl":"https://zoom.us/oauth/authorize","tokenUrl":"https://zoom.us/oauth/token","scopes":["user:read:user:admin","user:write:user:admin","meeting:read:meeting:admin","meeting:write:meeting:admin","meeting:update:meeting:admin","meeting:delete:meeting:admin","webinar:read:webinar:admin","webinar:write:webinar:admin","webinar:update:webinar:admin","webinar:delete:webinar:admin","cloud_recording:read:recording:admin","cloud_recording:delete:recording_file:admin"],"clientIdEnv":"ZOOM_OAUTH_CLIENT_ID","clientSecretEnv":"ZOOM_OAUTH_CLIENT_SECRET"},"category":"calendar","defaultConsistencyModel":"authoritative","capabilities":[{"name":"users.get","description":"Read a Zoom user by id, email, or the \"me\" alias for the authenticated user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"User id, email address, or \"me\"."}},"required":["userId"]},"requiredScopes":["user:read:user:admin"],"class":"read"},{"name":"users.list","description":"List users on the Zoom account.","parameters":{"type":"object","properties":{"status":{"type":"string","enum":["active","inactive","pending"]},"page_size":{"type":"integer","minimum":1,"maximum":300},"next_page_token":{"type":"string"},"role_id":{"type":"string"}}},"requiredScopes":["user:read:user:admin"],"class":"read"},{"name":"meetings.list","description":"List meetings for a user (scheduled, live, or upcoming).","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"User id, email, or \"me\"."},"type":{"type":"string","enum":["scheduled","live","upcoming","upcoming_meetings","previous_meetings"],"description":"Subset of meetings to return; defaults to scheduled."},"page_size":{"type":"integer","minimum":1,"maximum":300},"next_page_token":{"type":"string"}},"required":["userId"]},"requiredScopes":["meeting:read:meeting:admin"],"class":"read"},{"name":"meetings.get","description":"Read a Zoom meeting by numeric meeting id.","parameters":{"type":"object","properties":{"meetingId":{"type":"string","description":"Numeric Zoom meeting id."},"occurrence_id":{"type":"string","description":"Optional recurring-meeting occurrence id."}},"required":["meetingId"]},"requiredScopes":["meeting:read:meeting:admin"],"class":"read"},{"name":"meetings.create","description":"Schedule a Zoom meeting for a user. Body follows the v2 meetings contract (topic, start_time, duration, type, settings, ...).","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"User id, email, or \"me\"."},"topic":{"type":"string"},"type":{"type":"integer","enum":[1,2,3,8],"description":"1=instant, 2=scheduled, 3=recurring no fixed time, 8=recurring with fixed time."},"start_time":{"type":"string","description":"ISO-8601 start time (UTC or with offset)."},"duration":{"type":"integer","description":"Meeting length in minutes."},"timezone":{"type":"string"},"password":{"type":"string"},"agenda":{"type":"string"},"settings":{"type":"object"},"recurrence":{"type":"object"},"tracking_fields":{"type":"array","items":{"type":"object"}}},"required":["userId","topic"]},"requiredScopes":["meeting:write:meeting:admin"],"class":"mutation","cas":"none","externalEffect":true},{"name":"meetings.update","description":"Update a scheduled Zoom meeting in place.","parameters":{"type":"object","properties":{"meetingId":{"type":"string"},"occurrence_id":{"type":"string"},"topic":{"type":"string"},"start_time":{"type":"string"},"duration":{"type":"integer"},"timezone":{"type":"string"},"password":{"type":"string"},"agenda":{"type":"string"},"settings":{"type":"object"},"recurrence":{"type":"object"}},"required":["meetingId"]},"requiredScopes":["meeting:update:meeting:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"meetings.delete","description":"Delete a Zoom meeting. Optionally notify hosts/registrants and scope to a single occurrence.","parameters":{"type":"object","properties":{"meetingId":{"type":"string"},"occurrence_id":{"type":"string"},"schedule_for_reminder":{"type":"boolean"},"cancel_meeting_reminder":{"type":"boolean"}},"required":["meetingId"]},"requiredScopes":["meeting:delete:meeting:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"meetings.list-registrants","description":"List registrants for a Zoom meeting.","parameters":{"type":"object","properties":{"meetingId":{"type":"string"},"occurrence_id":{"type":"string"},"status":{"type":"string","enum":["pending","approved","denied"]},"page_size":{"type":"integer","minimum":1,"maximum":300},"next_page_token":{"type":"string"}},"required":["meetingId"]},"requiredScopes":["meeting:read:meeting:admin"],"class":"read"},{"name":"meetings.add-registrant","description":"Register a participant for a Zoom meeting that requires registration.","parameters":{"type":"object","properties":{"meetingId":{"type":"string"},"occurrence_ids":{"type":"string","description":"Comma-separated occurrence ids for recurring meetings."},"email":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"},"zip":{"type":"string"},"state":{"type":"string"},"phone":{"type":"string"},"industry":{"type":"string"},"org":{"type":"string"},"job_title":{"type":"string"},"purchasing_time_frame":{"type":"string"},"role_in_purchase_process":{"type":"string"},"no_of_employees":{"type":"string"},"comments":{"type":"string"},"custom_questions":{"type":"array","items":{"type":"object"}},"language":{"type":"string"},"auto_approve":{"type":"boolean"}},"required":["meetingId","email","first_name"]},"requiredScopes":["meeting:write:meeting:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webinars.list","description":"List webinars for a user.","parameters":{"type":"object","properties":{"userId":{"type":"string"},"page_size":{"type":"integer","minimum":1,"maximum":300},"next_page_token":{"type":"string"}},"required":["userId"]},"requiredScopes":["webinar:read:webinar:admin"],"class":"read"},{"name":"webinars.get","description":"Read a Zoom webinar by id.","parameters":{"type":"object","properties":{"webinarId":{"type":"string"},"occurrence_id":{"type":"string"}},"required":["webinarId"]},"requiredScopes":["webinar:read:webinar:admin"],"class":"read"},{"name":"webinars.create","description":"Schedule a Zoom webinar for a user.","parameters":{"type":"object","properties":{"userId":{"type":"string"},"topic":{"type":"string"},"type":{"type":"integer","enum":[5,6,9],"description":"5=scheduled, 6=recurring no fixed time, 9=recurring with fixed time."},"start_time":{"type":"string"},"duration":{"type":"integer"},"timezone":{"type":"string"},"password":{"type":"string"},"agenda":{"type":"string"},"settings":{"type":"object"},"recurrence":{"type":"object"}},"required":["userId","topic"]},"requiredScopes":["webinar:write:webinar:admin"],"class":"mutation","cas":"none","externalEffect":true},{"name":"recordings.list","description":"List cloud recordings for a user.","parameters":{"type":"object","properties":{"userId":{"type":"string","description":"User id, email, or \"me\"."},"from":{"type":"string","description":"YYYY-MM-DD lower bound."},"to":{"type":"string","description":"YYYY-MM-DD upper bound."},"page_size":{"type":"integer","minimum":1,"maximum":300},"next_page_token":{"type":"string"},"mc":{"type":"string"},"trash":{"type":"boolean"},"trash_type":{"type":"string","enum":["meeting_recordings","recording_file"]}},"required":["userId"]},"requiredScopes":["cloud_recording:read:recording:admin"],"class":"read"},{"name":"meetings.end","description":"End a live Zoom meeting via the status endpoint (PUT /meetings/{id}/status, action=\"end\").","parameters":{"type":"object","properties":{"meetingId":{"type":"string","description":"Numeric Zoom meeting id of the live meeting to end."}},"required":["meetingId"]},"requiredScopes":["meeting:update:meeting:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webinars.update","description":"Update a scheduled Zoom webinar in place.","parameters":{"type":"object","properties":{"webinarId":{"type":"string"},"occurrence_id":{"type":"string"},"topic":{"type":"string"},"start_time":{"type":"string"},"duration":{"type":"integer"},"timezone":{"type":"string"},"password":{"type":"string"},"agenda":{"type":"string"},"settings":{"type":"object"},"recurrence":{"type":"object"}},"required":["webinarId"]},"requiredScopes":["webinar:update:webinar:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"webinars.delete","description":"Delete a Zoom webinar. Optionally scope to a single occurrence and toggle host/panelist cancellation notifications.","parameters":{"type":"object","properties":{"webinarId":{"type":"string"},"occurrence_id":{"type":"string"},"cancel_webinar_reminder":{"type":"boolean"}},"required":["webinarId"]},"requiredScopes":["webinar:delete:webinar:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"recordings.delete","description":"Delete (or trash) a cloud recording for a meeting. action=\"trash\" is recoverable; action=\"delete\" is permanent.","parameters":{"type":"object","properties":{"meetingId":{"type":"string","description":"Meeting id or recording UUID."},"action":{"type":"string","enum":["trash","delete"],"description":"trash (default, recoverable) or delete (permanent)."}},"required":["meetingId"]},"requiredScopes":["cloud_recording:delete:recording_file:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"users.create","description":"Create a user in the Zoom account. `action` selects the provisioning mode; user_info carries the user payload.","parameters":{"type":"object","properties":{"action":{"type":"string","enum":["create","autoCreate","custCreate","ssoCreate"],"description":"Provisioning mode: create (invite), autoCreate (provision), custCreate (custom-managed), ssoCreate (SSO)."},"user_info":{"type":"object","description":"User payload (email, type, first_name, last_name, password for custCreate, etc.)."}},"required":["action","user_info"]},"requiredScopes":["user:write:user:admin"],"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"recordings.get","description":"List recording files for a meeting or recording id (use a double-encoded UUID if it begins with \"/\" or contains \"//\").","parameters":{"type":"object","properties":{"meetingId":{"type":"string","description":"Meeting id or recording UUID."},"include_fields":{"type":"string","description":"Comma-separated extra fields to include (e.g. download_access_token)."},"ttl":{"type":"integer","description":"TTL in seconds for download_access_token (max 604800)."}},"required":["meetingId"]},"requiredScopes":["cloud_recording:read:recording:admin"],"class":"read"}]},{"kind":"zoominfo","displayName":"ZoomInfo","description":"Search and enrich contacts and companies, plus buyer-intent signals, business Scoops, and company news, via the ZoomInfo GTM Data API. Search is free; enrich consumes bulk-data credits.","auth":{"kind":"oauth2","authorizationUrl":"https://api.zoominfo.com/gtm/oauth/v1/authorize","tokenUrl":"https://api.zoominfo.com/gtm/oauth/v1/token","scopes":["api:data:contact","api:data:company","api:data:intent","api:data:scoops","api:data:news"],"clientIdEnv":"ZOOMINFO_OAUTH_CLIENT_ID","clientSecretEnv":"ZOOMINFO_OAUTH_CLIENT_SECRET"},"category":"sales-intelligence","defaultConsistencyModel":"authoritative","capabilities":[{"name":"contact.search","description":"Search the contact database by firmographic/persona criteria. Returns ranked matches with stable contactId values and basic info only (no emails/phones). Free. Pass contactId to contact.enrich for full detail.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Search criteria wrapped under `data`, e.g. { companyName, jobTitle: [\"VP Sales\"], managementLevel, zipCode }. Resolve valid field names via lookup.search_fields (entity=contact, fieldType=input)."},"pageNumber":{"type":"integer","description":"Page number, >= 1 (default 1)."},"pageSize":{"type":"integer","description":"Page size, 1–100 (default 25)."},"sort":{"type":"string","description":"Sort field; prefix with - for descending."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"company.search","description":"Search the company database by firmographic filters (industry, revenue, employee count, geography, tech stack). Returns basic company info and stable companyId values. Free.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Search criteria under `data`, e.g. { companyName, industry, employeeCount, revenue, location, technologies }. Resolve fields via lookup.search_fields (entity=company, fieldType=input)."},"pageNumber":{"type":"integer"},"pageSize":{"type":"integer"},"sort":{"type":"string"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"intent.search","description":"Search for companies showing buyer-intent signals across 1–50 intent topics. Returns ranked companies with intent signal scores. Free.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Criteria under `data`, must include topics: [\"cybersecurity\", \"cloud migration\"] plus optional filters."},"pageNumber":{"type":"integer"},"pageSize":{"type":"integer"},"sort":{"type":"string"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"scoops.search","description":"Search real-time business-intelligence signals (Scoops: hiring, expansion, tech changes) across ZoomInfo companies. Free; each scoop counts against the record limit.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Scoop filter criteria under `data`."},"pageNumber":{"type":"integer"},"pageSize":{"type":"integer"},"sort":{"type":"string","description":"e.g. scoopId | originalPublishedDate; default -originalPublishedDate."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"news.search","description":"Search news articles across ZoomInfo companies. All filters optional but at least one must be set. Free; each article counts as one record. No sort param.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"News filter criteria under `data`, e.g. { companyId, keywords }."},"pageNumber":{"type":"integer"},"pageSize":{"type":"integer"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"contact.enrich","description":"Enrich up to 25 contacts with full detail (email, phone, jobTitle, 300+ fields). Best practice: contact.search first, then pass contactId. CONSUMES 1 bulk-data credit per matched record returned (waived if under management). `data` carries matchPersonInput + outputFields (+ optional requiredFields).","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Enrich body under `data`, e.g. { matchPersonInput: [{ contactId } | { firstName, lastName, companyName, emailAddress }], outputFields: [\"id\",\"email\",\"phone\",\"jobTitle\"], requiredFields: [] }."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"company.enrich","description":"Enrich up to 25 companies with 300+ data points (firmographics, technographics). Best practice: company.search first, then pass companyId. CONSUMES 1 bulk-data credit per matched record. `data` carries matchCompanyInput + outputFields.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Enrich body under `data`, e.g. { matchCompanyInput: [{ companyId } | { companyName, website }], outputFields: [\"id\",\"name\",\"website\",\"industry\",\"employeeCount\",\"revenue\"], requiredFields: [] }."}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"intent.enrich","description":"Fetch intent signals for a specific known company (companyId, companyName, or companyWebsite) across 1–50 topics. CONSUMES bulk-data credits per enriched company.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Body under `data`, e.g. { companyId, topics: [...] }."},"pageNumber":{"type":"integer"},"pageSize":{"type":"integer"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"scoops.enrich","description":"Fetch Scoops for a specific known company (at least one company identifier). CONSUMES 1 credit per enriched company; each returned scoop counts against the record limit.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Body under `data`, e.g. { companyId }."},"pageNumber":{"type":"integer"},"pageSize":{"type":"integer"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"news.enrich","description":"Fetch categorized news coverage for a specific known company (at least one company identifier). CONSUMES bulk-data credits per enriched company.","parameters":{"type":"object","properties":{"data":{"type":"object","description":"Body under `data`, e.g. { companyId }."},"pageNumber":{"type":"integer"},"pageSize":{"type":"integer"}},"required":["data"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"lookup.data","description":"Retrieve enumerated valid values for a filter field (industries, regions, job functions, management levels, technologies, intent topics). Use to build valid search bodies. Free.","parameters":{"type":"object","properties":{"fieldName":{"type":"string","description":"The filter field to enumerate, e.g. industry, managementLevel."},"category":{"type":"string"},"parentCategory":{"type":"string"},"subCategory":{"type":"string"},"vendor":{"type":"string"}},"required":["fieldName"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"lookup.search_fields","description":"Discover the valid input and output field names for a search/enrich entity. REQUIRED to build correct search/enrich bodies and enrich outputFields. Free.","parameters":{"type":"object","properties":{"entity":{"type":"string","description":"company | contact | scoop | news | intent."},"fieldType":{"type":"string","description":"input | output."}},"required":["entity","fieldType"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"usage.get","description":"Return the current user’s API usage and limits (credits consumed, request counts, entitlements). Free.","parameters":{"type":"object","properties":{}},"requiredScopes":{"__tangleUndefined":true},"class":"read"}]},{"kind":"zuora","displayName":"Zuora","description":"Cloud-based subscription management platform. Query accounts, products, and rate plans; create invoices.","auth":{"kind":"oauth2","grantType":"client_credentials","tokenUrl":"{apiBaseUrl}/oauth/token","scopes":[],"clientIdEnv":"ZUORA_OAUTH_CLIENT_ID","clientSecretEnv":"ZUORA_OAUTH_CLIENT_SECRET","tokenClientAuthMethod":"client_secret_post","pkce":"unsupported","urlTemplateMetadata":{"apiBaseUrl":{"kind":"base-url","allowedBaseUrls":["https://rest.test.zuora.com","https://rest.sandbox.na.zuora.com","https://rest.apisandbox.zuora.com","https://rest.na.zuora.com","https://rest.zuora.com","https://rest.test.eu.zuora.com","https://rest.sandbox.eu.zuora.com","https://rest.eu.zuora.com","https://rest.test.ap.zuora.com","https://rest.ap.zuora.com"]}}},"category":"crm","defaultConsistencyModel":"authoritative","capabilities":[{"name":"accounts.find","description":"Find a Zuora account by account ID or name.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Account ID to retrieve."}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.find","description":"Find a Zuora product by product ID.","parameters":{"type":"object","properties":{"productId":{"type":"string","description":"Product ID to retrieve."}},"required":["productId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"products.rate_plans.find","description":"Find a rate plan for a product by product ID and rate plan ID.","parameters":{"type":"object","properties":{"productId":{"type":"string","description":"Product ID."},"ratePlanId":{"type":"string","description":"Rate plan ID to retrieve."}},"required":["productId","ratePlanId"]},"requiredScopes":{"__tangleUndefined":true},"class":"read"},{"name":"invoices.create","description":"Create an invoice for a subscription in Zuora.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Account ID for the invoice."},"subscriptionId":{"type":"string","description":"Subscription ID for the invoice."},"invoiceItems":{"type":"array","description":"Array of invoice items.","items":{"type":"object"}}},"required":["accountId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.create","description":"Create a subscription in Zuora for an account against one or more rate plans.","parameters":{"type":"object","properties":{"accountKey":{"type":"string","description":"Account ID or account number to subscribe."},"contractEffectiveDate":{"type":"string","description":"Effective date (YYYY-MM-DD) for the contract."},"termType":{"type":"string","enum":["TERMED","EVERGREEN"],"description":"Subscription term type."},"subscribeToRatePlans":{"type":"array","description":"Rate plans to subscribe the account to.","items":{"type":"object"}}},"required":["accountKey","contractEffectiveDate","subscribeToRatePlans"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.cancel","description":"Cancel an existing Zuora subscription by subscription key.","parameters":{"type":"object","properties":{"subscriptionKey":{"type":"string","description":"Subscription ID or number to cancel."},"cancellationPolicy":{"type":"string","enum":["EndOfCurrentTerm","EndOfLastInvoicePeriod","SpecificDate"],"description":"When the cancellation takes effect."},"cancellationEffectiveDate":{"type":"string","description":"Effective cancellation date (YYYY-MM-DD); required when cancellationPolicy is SpecificDate."}},"required":["subscriptionKey","cancellationPolicy"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"subscriptions.update","description":"Amend a Zuora subscription (add/remove/update rate plans, change term, etc.).","parameters":{"type":"object","properties":{"subscriptionKey":{"type":"string","description":"Subscription ID or number to amend."},"add":{"type":"array","description":"Rate plan additions.","items":{"type":"object"}},"remove":{"type":"array","description":"Rate plan removals.","items":{"type":"object"}},"update":{"type":"array","description":"Rate plan updates.","items":{"type":"object"}},"termInfo":{"type":"object","description":"Optional term change instructions."}},"required":["subscriptionKey"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true},{"name":"payments.create","description":"Record a payment against one or more invoices in Zuora.","parameters":{"type":"object","properties":{"accountId":{"type":"string","description":"Account the payment belongs to."},"amount":{"type":"number","description":"Payment amount."},"currency":{"type":"string","description":"Three-letter ISO 4217 currency code."},"effectiveDate":{"type":"string","description":"Payment effective date (YYYY-MM-DD)."},"paymentMethodId":{"type":"string","description":"Payment method ID to charge."},"invoices":{"type":"array","description":"Invoices to apply the payment to.","items":{"type":"object"}}},"required":["accountId","amount","currency","effectiveDate","paymentMethodId"]},"requiredScopes":{"__tangleUndefined":true},"class":"mutation","cas":"native-idempotency","externalEffect":true}]}] diff --git a/package.json b/package.json index 5152ea7..daac088 100644 --- a/package.json +++ b/package.json @@ -113,6 +113,11 @@ "types": "./dist/twilio/index.d.ts", "import": "./dist/twilio/index.js", "default": "./dist/twilio/index.js" + }, + "./managed-messaging": { + "types": "./dist/managed-messaging/index.d.ts", + "import": "./dist/managed-messaging/index.js", + "default": "./dist/managed-messaging/index.js" } }, "files": [ diff --git a/src/apps.ts b/src/apps.ts index c5730f6..d69c709 100644 --- a/src/apps.ts +++ b/src/apps.ts @@ -68,6 +68,10 @@ export interface BrokerToken { expiresIn: number scope: string connectionId?: string + /** Durable, consented grant identity. Older hosts omit these receipt fields. */ + grantId?: string + ownerUserId?: string + clientId?: string /** Absolute expiry derived from the broker response. */ expiresAt: number } @@ -83,6 +87,9 @@ interface TokenResponse { expires_in?: unknown scope?: unknown connection_id?: string + grant_id?: unknown + user_id?: unknown + client_id?: unknown } const MAX_BROKER_TOKEN_TTL_SECONDS = 3_600 @@ -283,7 +290,8 @@ function toBrokerToken(data: TokenResponse): BrokerToken { data.expires_in > MAX_BROKER_TOKEN_TTL_SECONDS || typeof data.scope !== 'string' || data.scope.trim().length === 0 || - (data.connection_id !== undefined && (typeof data.connection_id !== 'string' || data.connection_id.trim().length === 0)) + (data.connection_id !== undefined && (typeof data.connection_id !== 'string' || data.connection_id.trim().length === 0)) || + [data.grant_id, data.user_id, data.client_id].some(value => value !== undefined && (typeof value !== 'string' || !value.trim() || value.length > 256)) ) { throw new IntegrationRuntimeError({ code: 'input_invalid', @@ -308,6 +316,9 @@ function toBrokerToken(data: TokenResponse): BrokerToken { scope, expiresAt, connectionId: data.connection_id, + ...(typeof data.grant_id === 'string' ? { grantId: data.grant_id } : {}), + ...(typeof data.user_id === 'string' ? { ownerUserId: data.user_id } : {}), + ...(typeof data.client_id === 'string' ? { clientId: data.client_id } : {}), } } @@ -336,3 +347,19 @@ function assertOwnerBearer(value: unknown): asserts value is string { }) } } + +/** Require the authenticated host receipt before retaining a grant for unattended + * use. The browser's state and connection id are expectations, not evidence. */ +export function requireBrokerGrantReceipt(token: BrokerToken, expected: { + ownerUserId: string; clientId: string; connectionId: string; scopes: readonly string[]; grantId?: string +}): { grantId: string; connectionId: string; ownerUserId: string; clientId: string; scopes: string[] } { + const scopes = [...new Set(token.scope.split(/\s+/).filter(Boolean))].sort() + const expectedScopes = [...new Set(expected.scopes)].sort() + if (!token.grantId || token.ownerUserId !== expected.ownerUserId || token.clientId !== expected.clientId || + token.connectionId !== expected.connectionId || (expected.grantId && token.grantId !== expected.grantId) || + JSON.stringify(scopes) !== JSON.stringify(expectedScopes)) { + throw new IntegrationRuntimeError({ code: 'provider_auth_failed', status: 403, + message: 'The broker grant receipt does not match the authenticated owner, app, connection and requested scopes' }) + } + return { grantId: token.grantId, connectionId: expected.connectionId, ownerUserId: expected.ownerUserId, clientId: expected.clientId, scopes } +} diff --git a/src/connectors/adapters/contiguity.ts b/src/connectors/adapters/contiguity.ts index 11819d4..c203f10 100644 --- a/src/connectors/adapters/contiguity.ts +++ b/src/connectors/adapters/contiguity.ts @@ -1,132 +1,48 @@ import { declarativeRestConnector } from './declarative-rest.js' -export const contiguityConnector = declarativeRestConnector({ - kind: 'contiguity', - displayName: 'Contiguity', - description: 'Send iMessages with optional SMS/RCS fallback via Contiguity API.', +const address = { type: 'string', minLength: 1, maxLength: 320 } +const message = { type: 'string', minLength: 1, maxLength: 18000 } +const base = declarativeRestConnector({ + kind: 'contiguity', displayName: 'Contiguity', category: 'crm', + description: 'Send email, text and iMessage through Contiguity. Acceptance is not delivery; unresolved sends require reconciliation.', auth: { kind: 'api-key', hint: 'Contiguity API key from console.contiguity.com/dashboard/tokens' }, - category: 'crm', - defaultConsistencyModel: 'authoritative', - baseUrl: 'https://api.contiguity.com/v1', - test: { method: 'GET', path: '/account' }, + baseUrl: 'https://api.contiguity.com', defaultConsistencyModel: 'advisory', + test: { method: 'GET', path: '/numbers/leased' }, capabilities: [ - { - name: 'messages.send_text', - class: 'mutation', - description: 'Send a text message (SMS/RCS).', - parameters: { - type: 'object', - properties: { - to: { type: 'string', description: 'Recipient phone number in E.164 format' }, - from: { type: 'string', description: 'Your leased iMessage number (optional)' }, - message: { type: 'string', description: 'Text message content' }, - fallback: { type: 'boolean', description: 'Enable SMS/RCS fallback (optional)' }, - when: { type: 'string', description: 'Conditions that trigger SMS/RCS fallback (optional)' }, - }, - required: ['to', 'message'], - }, - request: { - method: 'POST', - path: '/messages/send/text', - body: { - to: '{to}', - from: '{from}', - message: '{message}', - fallback: '{fallback}', - when: '{when}', - }, - }, - cas: 'native-idempotency', - }, - { - name: 'messages.send_imessage', - class: 'mutation', - description: 'Send an iMessage with optional SMS/RCS fallback.', - parameters: { - type: 'object', - properties: { - to: { type: 'string', description: 'Recipient phone number in E.164 format' }, - from: { type: 'string', description: 'Your leased iMessage number (optional)' }, - message: { type: 'string', description: 'iMessage content' }, - fallback: { type: 'boolean', description: 'Enable SMS/RCS fallback (optional)' }, - when: { type: 'string', description: 'Conditions that trigger SMS/RCS fallback (optional)' }, - attachments: { type: 'object', description: 'File attachments: max 10 files, 50MB total, HTTPS required (optional)' }, - }, - required: ['to', 'message'], - }, - request: { - method: 'POST', - path: '/messages/send/imessage', - body: { - to: '{to}', - from: '{from}', - message: '{message}', - fallback: '{fallback}', - when: '{when}', - attachments: '{attachments}', - }, - }, - cas: 'native-idempotency', - }, - { - name: 'sms.send', - class: 'mutation', - description: 'Send a transactional SMS. Canonical alias for messages.send_text exposed under the cross-connector send-SMS verb.', - parameters: { - type: 'object', - properties: { - to: { type: 'string', description: 'Recipient phone number in E.164 format' }, - from: { type: 'string', description: 'Sender phone number (optional)' }, - message: { type: 'string', description: 'SMS message content' }, - }, - required: ['to', 'message'], - }, - request: { - method: 'POST', - path: '/messages/send/text', - body: { - to: '{to}', - from: '{from}', - message: '{message}', - }, - }, - cas: 'native-idempotency', - externalEffect: true, - }, - { - name: 'email.send', - class: 'mutation', - description: 'Send a transactional email through Contiguity.', - parameters: { - type: 'object', - properties: { - to: { type: 'string', description: 'Recipient email address' }, - from: { type: 'string', description: 'Sender email address (must be verified on the Contiguity account)' }, - subject: { type: 'string', description: 'Email subject line' }, - body: { type: 'string', description: 'Email body. Plain text unless contentType is text/html.' }, - contentType: { - type: 'string', - enum: ['text/plain', 'text/html'], - description: 'Mime type for the body; defaults to text/plain.', - }, - replyTo: { type: 'string', description: 'Optional Reply-To header' }, - }, - required: ['to', 'from', 'subject', 'body'], - }, - request: { - method: 'POST', - path: '/send/email', - body: { - to: '{to}', - from: '{from}', - subject: '{subject}', - body: '{body}', - contentType: '{contentType}', - replyTo: '{replyTo}', - }, - }, - cas: 'native-idempotency', - externalEffect: true, - }, + ...['messages.send_text', 'sms.send'].map((name) => ({ + name, class: 'mutation' as const, cas: 'none' as const, externalEffect: true, + description: 'Send SMS from an explicitly selected owned number. Do not retry ambiguous outcomes blindly.', + parameters: { type: 'object', properties: { to: address, from: address, message }, required: ['to', 'from', 'message'] }, + request: { method: 'POST' as const, path: '/send/text', body: { to: '{to}', from: '{from}', message: '{message}' } }, + })), + { name: 'messages.send_imessage', class: 'mutation', cas: 'none', externalEffect: true, + description: 'Send iMessage from an owned number; fallback is opt-in and must name its sender.', + parameters: { type: 'object', properties: { to: address, from: address, message, + attachments: { type: 'array', maxItems: 10, items: { type: 'string', pattern: '^https://' } }, + fallback: { type: 'object', properties: { from: address, when: { type: 'array', items: { type: 'string', enum: ['imessage_unsupported', 'imessage_fails'] } } }, required: ['from', 'when'], additionalProperties: false } }, + required: ['to', 'from', 'message'] }, + request: { method: 'POST', path: '/send/imessage', body: { to: '{to}', from: '{from}', message: '{message}', fallback: '{fallback}', attachments: '{attachments}' } } }, + { name: 'email.send', class: 'mutation', cas: 'none', externalEffect: true, + description: 'Send an email from a verified sender. Legacy body/contentType inputs are translated to the documented text/html fields.', + parameters: { type: 'object', properties: { to: address, from: address, subject: { type: 'string', maxLength: 998 }, + body: message, contentType: { type: 'string', enum: ['text/plain', 'text/html'] }, replyTo: address }, required: ['to', 'from', 'subject', 'body'] }, + request: { method: 'POST', path: '/send/email', body: { to: '{to}', from: '{from}', subject: '{subject}', text: '{text}', html: '{html}', reply_to: '{replyTo}' } } }, + { name: 'numbers.list', class: 'read', description: 'List numbers already leased by this account; does not purchase a number.', + parameters: { type: 'object', properties: {} }, request: { method: 'GET', path: '/numbers/leased' } }, ], }) + +export const contiguityConnector: typeof base = { + ...base, + async executeMutation(inv) { + if (inv.capabilityName !== 'email.send') return base.executeMutation!(inv) + const { body, contentType, ...args } = inv.args + if (typeof body !== 'string' || !body.length || (contentType !== undefined && contentType !== 'text/plain' && contentType !== 'text/html')) { + throw new Error('Contiguity email requires a body and supported contentType') + } + // Callers cannot smuggle an unreviewed alternative body alongside the approved body. + delete args.text + delete args.html + return base.executeMutation!({ ...inv, args: { ...args, body, contentType, [contentType === 'text/html' ? 'html' : 'text']: body } }) + }, +} diff --git a/src/connectors/adapters/declarative-rest.ts b/src/connectors/adapters/declarative-rest.ts index 639f3dc..55a72ec 100644 --- a/src/connectors/adapters/declarative-rest.ts +++ b/src/connectors/adapters/declarative-rest.ts @@ -345,7 +345,17 @@ export async function executeRestRequest( // `https://api.emailit.com/v1` preserves its `/v1` prefix. An absolute path // (leading `/`) would otherwise be resolved against the origin and drop // every path segment the base URL carries. - const renderedPath = interpolate(request.path, scope).replace(/^\/+/, '') + const templatePath = request.path.replace(/^\/+/, '') + const renderedPath = interpolate(templatePath, scope) + // encodeURIComponent leaves `.` intact, so an argument of `.` or `..` would + // become a dot segment that URL resolution collapses onto another endpoint. + // A template may still use `..` deliberately to leave its base prefix. + // Encoding keeps `/` out of values, so segments align with the template. + const templateSegments = templatePath.split('/') + if (renderedPath.split('/').some((segment, index) => + (segment === '.' || segment === '..') && templateSegments[index] !== segment)) { + throw new Error('invalid path argument: dot segment') + } const baseWithSlash = baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/` const url = new URL(renderedPath, baseWithSlash) for (const [key, value] of Object.entries(request.query ?? {})) { diff --git a/src/connectors/adapters/index.ts b/src/connectors/adapters/index.ts index 793f8d1..84215be 100644 --- a/src/connectors/adapters/index.ts +++ b/src/connectors/adapters/index.ts @@ -747,3 +747,9 @@ export { ringcentralConnector } from './ringcentral.js' export { dialpadConnector } from './dialpad.js' export { demandbaseConnector } from './demandbase.js' // --- end Toolverse OAuth2 GTM connectors --- + +export { inkboxConnector } from './inkbox.js' + +export { linqConnector } from './linq.js' + +export { linqWhatsappConnector } from './linq-whatsapp.js' diff --git a/src/connectors/adapters/inkbox.ts b/src/connectors/adapters/inkbox.ts new file mode 100644 index 0000000..269f13d --- /dev/null +++ b/src/connectors/adapters/inkbox.ts @@ -0,0 +1,49 @@ +import { declarativeRestConnector } from './declarative-rest.js' + +const id = { type: 'string', minLength: 1, maxLength: 256 } +const text = { type: 'string', minLength: 1, maxLength: 18000 } +const page = { offset: { type: 'integer', minimum: 0 }, limit: { type: 'integer', minimum: 1, maximum: 100 } } +const mailPage = { cursor: id, limit: page.limit } + +/** Identity-scoped API key recommended. Subscription secrets stay in the host vault, never tools. */ +export const inkboxConnector = declarativeRestConnector({ + kind: 'inkbox', displayName: 'Inkbox', category: 'comms', + description: 'Use an existing agent identity for email, SMS and iMessage. A send is provider acceptance, not delivery.', + auth: { kind: 'api-key', hint: 'Claimed, identity-scoped Inkbox X-API-Key. Do not give agents an organization admin key.' }, + credentialPlacement: { kind: 'header', header: 'X-API-Key' }, + baseUrl: 'https://inkbox.ai/api/v1', defaultConsistencyModel: 'advisory', + test: { method: 'GET', path: '/identities/self/channel-status' }, + capabilities: [ + { name: 'identity.status', class: 'read', description: 'Read the connected identity and channel readiness.', + parameters: { type: 'object', properties: {} }, request: { method: 'GET', path: '/identities/self/channel-status' } }, + { name: 'imessage.conversations', class: 'read', description: 'List iMessage conversations with offset pagination.', + parameters: { type: 'object', properties: page }, + request: { method: 'GET', path: '/imessage/conversations', query: { offset: '{offset}', limit: '{limit}' } } }, + { name: 'imessage.messages', class: 'read', description: 'Read messages in an existing iMessage conversation.', + parameters: { type: 'object', properties: { conversation_id: id, ...page }, required: ['conversation_id'] }, + request: { method: 'GET', path: '/imessage/messages', query: { conversation_id: '{conversation_id}', offset: '{offset}', limit: '{limit}' } } }, + { name: 'imessage.reply', class: 'mutation', cas: 'none', externalEffect: true, + description: 'Reply to an existing iMessage conversation. Do not blindly retry an uncertain send.', + parameters: { type: 'object', properties: { conversation_id: id, text }, required: ['conversation_id', 'text'] }, + request: { method: 'POST', path: '/imessage/messages', body: { conversation_id: '{conversation_id}', text: '{text}' } } }, + { name: 'email.list', class: 'read', description: 'List messages in the connected identity mailbox.', + parameters: { type: 'object', properties: { email_address: id, ...mailPage }, required: ['email_address'] }, + request: { method: 'GET', path: '/mail/mailboxes/{email_address}/messages', query: { cursor: '{cursor}', limit: '{limit}' } } }, + { name: 'email.get', class: 'read', description: 'Read the complete stored message before acting on a truncated webhook body.', + parameters: { type: 'object', properties: { email_address: id, message_id: id }, required: ['email_address', 'message_id'] }, + request: { method: 'GET', path: '/mail/mailboxes/{email_address}/messages/{message_id}' } }, + { name: 'email.send', class: 'mutation', cas: 'none', externalEffect: true, + description: 'Send plain-text email; retain the returned message id. The mailbox is the sender, not a model-authored From header.', + parameters: { type: 'object', properties: { email_address: id, to: { type: 'array', minItems: 1, maxItems: 50, items: id }, + subject: { type: 'string', maxLength: 998 }, text, in_reply_to_message_id: id }, required: ['email_address', 'to', 'subject', 'text'] }, + request: { method: 'POST', path: '/mail/mailboxes/{email_address}/messages', + body: { recipients: { to: '{to}' }, subject: '{subject}', body_text: '{text}', in_reply_to_message_id: '{in_reply_to_message_id}' } } }, + { name: 'sms.reply', class: 'mutation', cas: 'none', externalEffect: true, + description: 'Reply in an existing SMS/MMS conversation from an owned phone number. Provider opt-in rules still apply.', + parameters: { type: 'object', properties: { phone_number_id: id, conversation_id: id, text: { ...text, maxLength: 1600 } }, required: ['phone_number_id', 'conversation_id', 'text'] }, + request: { method: 'POST', path: '/phone/numbers/{phone_number_id}/texts', body: { conversation_id: '{conversation_id}', text: '{text}' } } }, + { name: 'sms.list', class: 'read', description: 'List phone messages for reconciliation after a missed webhook.', + parameters: { type: 'object', properties: { phone_number_id: id, ...page }, required: ['phone_number_id'] }, + request: { method: 'GET', path: '/phone/numbers/{phone_number_id}/texts', query: { offset: '{offset}', limit: '{limit}' } } }, + ], +}) diff --git a/src/connectors/adapters/linq-whatsapp.ts b/src/connectors/adapters/linq-whatsapp.ts new file mode 100644 index 0000000..f7f02f5 --- /dev/null +++ b/src/connectors/adapters/linq-whatsapp.ts @@ -0,0 +1,48 @@ +import { declarativeRestConnector } from './declarative-rest.js' + +const id = { type: 'string', minLength: 1, maxLength: 256 } +const page = { cursor: id, limit: { type: 'integer', minimum: 1, maximum: 100 } } + +/** WhatsApp is a separate Linq service and credential, not a transport flag on v3. */ +const base = declarativeRestConnector({ + kind: 'linq-whatsapp', displayName: 'Linq WhatsApp', category: 'comms', + description: 'Use an existing WhatsApp Business identity. Reads expose current window, template and delivery state; sends acknowledge acceptance only.', + auth: { kind: 'api-key', hint: 'The exact brand-scoped WhatsApp key from Linq Embedded Signup. Keep the issued test/live prefix unchanged.' }, + baseUrl: 'https://whatsapp.messages.api.linqapp.com/v1', + defaultConsistencyModel: 'advisory', credentialsExpiredStatuses: [401], + test: { method: 'GET', path: '/phone_numbers' }, + capabilities: [ + { name: 'numbers.list', class: 'read', description: 'Read existing registered sending numbers. Does not acquire a number.', + parameters: { type: 'object', properties: {} }, request: { method: 'GET', path: '/phone_numbers' } }, + { name: 'chats.list', class: 'read', description: 'Find the existing one-to-one conversation and its pinned sending number.', + parameters: { type: 'object', properties: page }, + request: { method: 'GET', path: '/chats', query: { cursor: '{cursor}', limit: '{limit}' } } }, + { name: 'chats.get', class: 'read', description: 'Read the actual customer, sender and current free-form messaging window.', + parameters: { type: 'object', properties: { chat_id: id }, required: ['chat_id'] }, + request: { method: 'GET', path: '/chats/{chat_id}' } }, + { name: 'events.list', class: 'read', description: 'Read the account event log. Keep its opaque cursor separate from chat sequence numbers.', + parameters: { type: 'object', properties: page }, + request: { method: 'GET', path: '/event_log', query: { cursor: '{cursor}', limit: '{limit}' } } }, + { name: 'chats.events', class: 'read', description: 'Read canonical messages and delivery receipts in the selected chat.', + parameters: { type: 'object', properties: { chat_id: id, ...page }, required: ['chat_id'] }, + request: { method: 'GET', path: '/chats/{chat_id}/events', query: { cursor: '{cursor}', limit: '{limit}' } } }, + { name: 'templates.list', class: 'read', description: 'Read approved templates and their exact send_schema; no template is inferred or substituted.', + parameters: { type: 'object', properties: {} }, request: { method: 'GET', path: '/templates' } }, + { name: 'messages.reply', class: 'mutation', cas: 'native-idempotency', externalEffect: true, + description: 'Reply in the existing chat without changing its sender or recipient. Free-form text requires an open customer window; a refusal does not authorize template substitution.', + parameters: { type: 'object', properties: { chat_id: id, text: { type: 'string', minLength: 1, maxLength: 4096 } }, required: ['chat_id', 'text'] }, + request: { method: 'POST', path: '/chats/{chat_id}/messages', headers: { 'Idempotency-Key': '{requestKey}' }, + body: { parts: [{ type: 'text', body: '{text}' }] } } }, + ], +}) + +export const linqWhatsappConnector: typeof base = { + ...base, + async executeMutation(inv) { + if (!inv.idempotencyKey || inv.idempotencyKey.length > 255 || !/^[\x21-\x7e]+$/.test(inv.idempotencyKey)) { + throw new Error('Linq WhatsApp requires a bounded stable operation key') + } + // The execution identity is host-owned, never a model-authored header. + return base.executeMutation!({ ...inv, args: { ...inv.args, requestKey: inv.idempotencyKey } }) + }, +} diff --git a/src/connectors/adapters/linq.ts b/src/connectors/adapters/linq.ts new file mode 100644 index 0000000..2313365 --- /dev/null +++ b/src/connectors/adapters/linq.ts @@ -0,0 +1,32 @@ +import { declarativeRestConnector } from './declarative-rest.js' + +const id = { type: 'string', minLength: 1, maxLength: 256 } +const page = { cursor: id, limit: { type: 'integer', minimum: 1, maximum: 100 } } + +export const linqConnector = declarativeRestConnector({ + kind: 'linq', displayName: 'Linq', category: 'comms', + description: 'Read owned messaging lines and conversations, and send replies through Linq v3.', + auth: { kind: 'api-key', hint: 'Linq partner API bearer key. Webhook signing secrets are configured separately.' }, + baseUrl: 'https://api.linqapp.com/api/partner/v3', defaultConsistencyModel: 'advisory', + test: { method: 'GET', path: '/phone_numbers' }, + capabilities: [ + { name: 'numbers.list', class: 'read', description: 'List owned lines and their current provider status.', + parameters: { type: 'object', properties: {} }, request: { method: 'GET', path: '/phone_numbers' } }, + { name: 'chats.list', class: 'read', description: 'List account conversations with pagination.', + parameters: { type: 'object', properties: page }, + request: { method: 'GET', path: '/chats', query: { cursor: '{cursor}', limit: '{limit}' } } }, + { name: 'chats.get', class: 'read', description: 'Read a conversation and its actual owner handle before selecting a reply route.', + parameters: { type: 'object', properties: { chat_id: id }, required: ['chat_id'] }, + request: { method: 'GET', path: '/chats/{chat_id}' } }, + { name: 'messages.list', class: 'read', description: 'Read conversation messages for context or delivery reconciliation.', + parameters: { type: 'object', properties: { chat_id: id, ...page }, required: ['chat_id'] }, + request: { method: 'GET', path: '/chats/{chat_id}/messages', query: { cursor: '{cursor}', limit: '{limit}' } } }, + { name: 'messages.reply', class: 'mutation', cas: 'none', externalEffect: true, + description: 'Send a plain-text reply to a verified conversation. Supply the same message_key on recovery; never manufacture a new key after a timeout.', + parameters: { type: 'object', properties: { chat_id: id, text: { type: 'string', minLength: 1, maxLength: 10000 }, message_key: id }, + required: ['chat_id', 'text', 'message_key'] }, + request: { method: 'POST', path: '/chats/{chat_id}/messages', body: { + message: { parts: [{ type: 'text', value: '{text}' }], idempotency_key: '{message_key}' }, + } } }, + ], +}) diff --git a/src/conversation-events/channels.ts b/src/conversation-events/channels.ts new file mode 100644 index 0000000..3fc14a2 --- /dev/null +++ b/src/conversation-events/channels.ts @@ -0,0 +1,57 @@ +/** Protocol metadata, not a claim that a deployment or account is configured. */ +export interface ConversationChannel { + providerId: string + eventType: string + label: string + transport: 'email' | 'imessage' | 'sms' | 'whatsapp' + sourceKind: 'channel' | 'connection' + replies: boolean + inventoryAction?: string + replyAction?: string + numberProvisioning?: 'provider-assigned' +} + +const channels: readonly ConversationChannel[] = [ + { providerId: 'email', eventType: 'email.received', label: 'Tangle email', transport: 'email', sourceKind: 'channel', replies: false }, + { providerId: 'inkbox', eventType: 'inkbox.imessage.received', label: 'iMessage', transport: 'imessage', sourceKind: 'connection', replies: true }, + { providerId: 'inkbox', eventType: 'inkbox.text.received', label: 'SMS', transport: 'sms', sourceKind: 'connection', replies: true }, + { providerId: 'inkbox', eventType: 'inkbox.message.received', label: 'Email', transport: 'email', sourceKind: 'connection', replies: true }, + { providerId: 'linq', eventType: 'linq.message.received', label: 'iMessage / SMS', transport: 'imessage', sourceKind: 'connection', replies: true, inventoryAction: 'linq.numbers.list', replyAction: 'linq.messages.reply', numberProvisioning: 'provider-assigned' }, + { providerId: 'contiguity', eventType: 'contiguity.imessage.incoming', label: 'iMessage', transport: 'imessage', sourceKind: 'connection', replies: true }, + { providerId: 'contiguity', eventType: 'contiguity.text.incoming.sms', label: 'SMS', transport: 'sms', sourceKind: 'connection', replies: true }, + { providerId: 'linq-whatsapp', eventType: 'linq-whatsapp.message.received', label: 'WhatsApp', transport: 'whatsapp', sourceKind: 'connection', replies: true }, +] + +/** Fresh copies let applications filter by their live Hub catalog without mutating ours. */ +export function listConversationChannels(): ConversationChannel[] { + return channels.map(channel => ({ ...channel })) +} + + +export interface ConversationEndpointOption { + id: string; address: string; providerId: string; channel: 'imessage' + health: 'healthy' | 'at-risk' | 'critical' | 'unknown' +} +/** Project an authenticated provider-owned inventory response, not user input. + * Protocol shape stays here with the adapter; applications never guess addresses. */ +export function conversationEndpointOptions(providerId: string, result: unknown): ConversationEndpointOption[] { + if (providerId !== 'linq') throw new Error('Owned endpoint enumeration is not available for this provider') + if (!result || typeof result !== 'object' || !Array.isArray((result as { phone_numbers?: unknown }).phone_numbers)) { + throw new Error('Linq did not return its owned phone-number inventory') + } + const values = (result as { phone_numbers: unknown[] }).phone_numbers + if (values.length > 1000) throw new Error('Phone inventory exceeds the supported response limit') + const seen = new Set<string>() + return values.map(value => { + if (!value || typeof value !== 'object') throw new Error('Invalid phone inventory row') + const r = value as { id?: unknown; phone_number?: unknown; reputation?: { status?: unknown } } + if (typeof r.id !== 'string' || !/^[a-f0-9-]{36}$/i.test(r.id) || typeof r.phone_number !== 'string' || + !/^\+[1-9]\d{6,14}$/.test(r.phone_number) || seen.has(r.id) || seen.has(r.phone_number)) { + throw new Error('Invalid or ambiguous owned phone-number identity') + } + seen.add(r.id); seen.add(r.phone_number) + const health: ConversationEndpointOption['health'] = r.reputation?.status === 'HEALTHY' ? 'healthy' : + r.reputation?.status === 'AT_RISK' ? 'at-risk' : r.reputation?.status === 'CRITICAL' ? 'critical' : 'unknown' + return { id: r.id, address: r.phone_number, providerId, channel: 'imessage', health } + }) +} diff --git a/src/conversation-events/core.ts b/src/conversation-events/core.ts new file mode 100644 index 0000000..134bd0c --- /dev/null +++ b/src/conversation-events/core.ts @@ -0,0 +1,735 @@ +import type { TriggerEventCatalog } from '../webhooks/router.js' + +export const MICROSOFT_TEAMS_PROVIDER_ID = 'microsoft-teams' as const +export const MICROSOFT_TEAMS_MESSAGE_EVENT = 'teams.message' as const + +export const MICROSOFT_TEAMS_TRIGGER_EVENT_CATALOG = { + namespace: 'teams.', + closed: true, + events: [{ id: MICROSOFT_TEAMS_MESSAGE_EVENT }], +} as const satisfies TriggerEventCatalog + +export interface InboundEmailAttachment { + filename?: string + contentType?: string + contentBase64?: string + url?: string + size?: number +} + +/** Payload emitted by Tangle's verified inbound-email receiver. */ +export interface InboundEmailPayload { + messageId?: string + from: string + to: string + subject?: string + text?: string + html?: string + headers?: Record<string, string> + attachments?: InboundEmailAttachment[] + receivedAt?: number +} + +export interface ProviderConversationEvent { + provider: string + type: string + deliveryId?: string + payload: unknown +} + +export interface ConversationParticipant { + id: string | null + address: string | null + displayName: string | null +} + +export interface ConversationDestination { + kind: 'mailbox' | 'channel' | 'chat' | 'user' + id: string | null + address: string | null + displayName: string | null +} + +export interface ConversationAttachment { + id: string | null + name: string | null + contentType: string | null + size: number | null + contentBase64: string | null + url: string | null +} + +/** + * Provider-neutral message data for product ingestion. + * + * The signed Hub delivery remains the audit record. This projection contains + * only the stable fields products need for threading, prompts, and files. + */ +export interface ConversationEvent { + version: 1 + provider: 'email' | 'slack' | 'teams' + eventType: string + operation: 'created' | 'updated' | 'deleted' + eventId: string | null + conversationId: string | null + parentEventIds: string[] + sender: ConversationParticipant + destinations: ConversationDestination[] + subject: string | null + text: string | null + html: string | null + attachments: ConversationAttachment[] + occurredAt: number | null +} + +export type ConversationEventNormalizationErrorCode = + | 'unsupported_provider' + | 'unsupported_event' + | 'invalid_payload' + +export type ConversationEventNormalizationResult = + | { ok: true; event: ConversationEvent } + | { + ok: false + code: ConversationEventNormalizationErrorCode + message: string + } + +const MAX_BODY_LENGTH = 1_000_000 +const MAX_ATTACHMENTS = 50 +const MAX_INLINE_ATTACHMENT_LENGTH = 1_100_000 +const MAX_ATTACHMENT_SIZE = 20 * 1024 * 1024 +const MAX_HEADERS = 200 + +export function normalizeConversationEvent( + value: unknown, +): ConversationEventNormalizationResult { + if ( + !isRecord(value) || + typeof value.provider !== 'string' || + typeof value.type !== 'string' || + (value.deliveryId !== undefined && + typeof value.deliveryId !== 'string') || + !Object.prototype.hasOwnProperty.call(value, 'payload') + ) { + return invalidPayload( + 'Provider conversation event requires provider, type, and payload', + ) + } + const input: ProviderConversationEvent = { + provider: value.provider, + type: value.type, + ...(typeof value.deliveryId === 'string' + ? { deliveryId: value.deliveryId } + : {}), + payload: value.payload, + } + if (input.provider === 'email') { + if (input.type !== 'email.received') { + return unsupportedEvent(input.provider, input.type) + } + return normalizeEmail(input) + } + if (input.provider === 'slack') { + if (input.type !== 'slack.message' && input.type !== 'slack.app_mention') { + return unsupportedEvent(input.provider, input.type) + } + return normalizeSlack(input) + } + if (input.provider === MICROSOFT_TEAMS_PROVIDER_ID) { + if (input.type !== MICROSOFT_TEAMS_MESSAGE_EVENT) { + return unsupportedEvent(input.provider, input.type) + } + return normalizeMicrosoftTeams(input) + } + return { + ok: false, + code: 'unsupported_provider', + message: `Conversation events do not support provider ${input.provider}`, + } +} + +function normalizeMicrosoftTeams( + input: ProviderConversationEvent, +): ConversationEventNormalizationResult { + const activity = input.payload + if (!isRecord(activity) || activity.type !== 'message') { + return invalidPayload('Teams payload requires a message activity') + } + if ( + activity.channelId !== undefined && + activity.channelId !== 'msteams' + ) { + return invalidPayload('Teams activity came from an unsupported channel') + } + const text = optionalString(activity.text, MAX_BODY_LENGTH) + if (text === undefined) { + return invalidPayload('Teams message text is invalid') + } + const conversation = isRecord(activity.conversation) + ? activity.conversation + : null + const conversationId = normalizeNullableString(conversation?.id, 2_000) + if (!conversationId) { + return invalidPayload('Teams message requires a conversation id') + } + const channelData = isRecord(activity.channelData) + ? activity.channelData + : null + const tenant = resolveMicrosoftTeamsTenantId(activity) + if (!tenant.ok) return invalidPayload(tenant.message) + const tenantId = tenant.tenantId + const from = isRecord(activity.from) ? activity.from : null + const channel = isRecord(channelData?.channel) + ? channelData.channel + : null + const team = isRecord(channelData?.team) ? channelData.team : null + const channelId = normalizeNullableString(channel?.id, 2_000) + const channelName = normalizeNullableString(channel?.name, 300) + const teamId = normalizeNullableString(team?.id, 2_000) + const replyToId = normalizeNullableString(activity.replyToId, 2_000) + const eventId = + normalizeNullableString(activity.id, 2_000) ?? + normalizeNullableString(input.deliveryId, 2_000) + const attachments = normalizeTeamsAttachments(activity.attachments) + if (!attachments.ok) return attachments + const timestamp = normalizeTeamsTimestamp( + activity.timestamp ?? activity.localTimestamp, + ) + if (timestamp === undefined) { + return invalidPayload('Teams message timestamp is invalid') + } + + return { + ok: true, + event: { + version: 1, + provider: 'teams', + eventType: input.type, + operation: 'created', + eventId, + conversationId: `${tenantId}:${conversationId}`, + parentEventIds: replyToId ? [replyToId] : [], + sender: { + id: + normalizeNullableString(from?.aadObjectId, 300) ?? + normalizeNullableString(from?.id, 2_000), + address: null, + displayName: normalizeNullableString(from?.name, 300), + }, + destinations: [ + { + kind: channelId ? 'channel' : 'chat', + id: channelId ?? conversationId, + address: null, + displayName: channelName, + }, + ...(teamId + ? [ + { + kind: 'channel' as const, + id: teamId, + address: null, + displayName: normalizeNullableString(team?.name, 300), + }, + ] + : []), + ], + subject: null, + text: text ?? null, + html: null, + attachments: attachments.value, + occurredAt: timestamp ?? null, + }, + } +} + +export type MicrosoftTeamsTenantResolution = + | { ok: true; tenantId: string } + | { ok: false; message: string } + +/** + * Resolve the authenticated Teams tenant identity shared by the platform + * receiver and product normalizer. Teams may repeat it in both + * `channelData.tenant.id` and `conversation.tenantId`; disagreement is + * rejected so an event can never be attributed to a guessed tenant. + */ +export function resolveMicrosoftTeamsTenantId( + payload: unknown, +): MicrosoftTeamsTenantResolution { + if (!isRecord(payload)) { + return { ok: false, message: 'Teams payload requires an activity object' } + } + const conversation = isRecord(payload.conversation) + ? payload.conversation + : null + const channelData = isRecord(payload.channelData) + ? payload.channelData + : null + const channelDataTenant = isRecord(channelData?.tenant) + ? normalizeNullableString(channelData.tenant.id, 300) + : null + const conversationTenant = normalizeNullableString( + conversation?.tenantId, + 300, + ) + if ( + channelDataTenant && + conversationTenant && + channelDataTenant !== conversationTenant + ) { + return { + ok: false, + message: 'Teams activity contains conflicting tenant ids', + } + } + const tenantId = channelDataTenant ?? conversationTenant + return tenantId + ? { ok: true, tenantId } + : { ok: false, message: 'Teams message requires a tenant id' } +} + +function normalizeEmail( + input: ProviderConversationEvent, +): ConversationEventNormalizationResult { + const payload = input.payload + if (!isRecord(payload)) return invalidPayload('Email payload must be an object') + const from = optionalString(payload.from, 320) + const to = optionalString(payload.to, 320) + if ( + from === undefined || + from === null || + to === undefined || + to === null || + !from.trim() || + !to.trim() + ) { + return invalidPayload('Email payload requires non-empty string from and to') + } + const messageId = optionalString(payload.messageId, 1_000) + const subject = optionalString(payload.subject, 2_000) + const text = optionalString(payload.text, MAX_BODY_LENGTH) + const html = optionalString(payload.html, MAX_BODY_LENGTH) + if ( + messageId === undefined || + subject === undefined || + text === undefined || + html === undefined + ) { + return invalidPayload('Email payload contains an invalid string field') + } + const receivedAt = optionalFiniteNumber(payload.receivedAt, 0) + if (receivedAt === undefined) { + return invalidPayload('Email receivedAt must be a non-negative number') + } + const headers = normalizeHeaders(payload.headers) + if (!headers.ok) return headers + const attachments = normalizeEmailAttachments(payload.attachments) + if (!attachments.ok) return attachments + + return { + ok: true, + event: { + version: 1, + provider: 'email', + eventType: input.type, + operation: 'created', + eventId: + normalizeMessageId(messageId) ?? + normalizeNullableString(input.deliveryId, 1_000), + conversationId: null, + parentEventIds: referencedMessageIds(headers.value), + sender: { + id: null, + address: normalizeNullableString(from, 320), + displayName: null, + }, + destinations: [ + { + kind: 'mailbox', + id: null, + address: normalizeMailbox(to), + displayName: null, + }, + ], + subject: normalizeNullableString(subject, 2_000), + text: text ?? null, + html: html ?? null, + attachments: attachments.value, + occurredAt: receivedAt ?? null, + }, + } +} + +function normalizeSlack( + input: ProviderConversationEvent, +): ConversationEventNormalizationResult { + const wrapper = input.payload + if (!isRecord(wrapper) || !isRecord(wrapper.event)) { + return invalidPayload('Slack payload requires an Events API event object') + } + const outerEvent = wrapper.event + const changedMessage = + outerEvent.subtype === 'message_changed' && isRecord(outerEvent.message) + ? outerEvent.message + : null + const deletedMessage = + outerEvent.subtype === 'message_deleted' && + isRecord(outerEvent.previous_message) + ? outerEvent.previous_message + : null + const message = changedMessage ?? deletedMessage ?? outerEvent + if ( + message.type !== 'message' && + input.type !== 'slack.app_mention' + ) { + return invalidPayload('Slack event does not contain a message') + } + const text = optionalString(message.text, MAX_BODY_LENGTH) + if (text === undefined) { + return invalidPayload('Slack message text is invalid') + } + const channel = + normalizeNullableString(outerEvent.channel, 300) ?? + normalizeNullableString(message.channel, 300) + if (!channel) return invalidPayload('Slack message requires a channel') + const timestamp = + normalizeNullableString(message.ts, 100) ?? + normalizeNullableString(outerEvent.event_ts, 100) + const threadTimestamp = normalizeNullableString(message.thread_ts, 100) + const team = + normalizeNullableString(wrapper.team_id, 300) ?? + normalizeNullableString(wrapper.context_team_id, 300) + const rootTimestamp = threadTimestamp ?? timestamp + const files = normalizeSlackFiles(message.files) + if (!files.ok) return files + const subtype = normalizeNullableString(outerEvent.subtype, 100) + + return { + ok: true, + event: { + version: 1, + provider: 'slack', + eventType: input.type, + operation: + subtype === 'message_deleted' + ? 'deleted' + : subtype === 'message_changed' + ? 'updated' + : 'created', + eventId: + normalizeNullableString(wrapper.event_id, 300) ?? + normalizeNullableString(message.client_msg_id, 300) ?? + normalizeNullableString(input.deliveryId, 300) ?? + timestamp, + conversationId: rootTimestamp + ? [team, channel, rootTimestamp].filter(Boolean).join(':') + : null, + parentEventIds: + threadTimestamp && timestamp && threadTimestamp !== timestamp + ? [threadTimestamp] + : [], + sender: { + id: + normalizeNullableString(message.user, 300) ?? + normalizeNullableString(message.bot_id, 300), + address: null, + displayName: + normalizeNullableString(message.username, 300) ?? + (isRecord(message.user_profile) + ? normalizeNullableString( + message.user_profile.display_name, + 300, + ) + : null), + }, + destinations: [ + { + kind: 'channel', + id: channel, + address: null, + displayName: null, + }, + ], + subject: null, + text: text ?? null, + html: null, + attachments: files.value, + occurredAt: + slackTimestampMs(timestamp) ?? + epochSecondsMs(wrapper.event_time) ?? + null, + }, + } +} + +function normalizeHeaders( + value: unknown, +): + | { ok: true; value: Record<string, string> } + | { + ok: false + code: 'invalid_payload' + message: string + } { + if (value === undefined) return { ok: true, value: {} } + if (!isRecord(value) || Object.keys(value).length > MAX_HEADERS) { + return invalidPayload('Email headers must be a bounded string record') + } + const headers: Record<string, string> = {} + for (const [key, entry] of Object.entries(value)) { + if ( + key.length === 0 || + key.length > 200 || + typeof entry !== 'string' || + entry.length > 4_000 + ) { + return invalidPayload('Email headers must be a bounded string record') + } + headers[key.toLowerCase()] = entry + } + return { ok: true, value: headers } +} + +function normalizeEmailAttachments( + value: unknown, +): + | { ok: true; value: ConversationAttachment[] } + | { + ok: false + code: 'invalid_payload' + message: string + } { + if (value === undefined) return { ok: true, value: [] } + if (!Array.isArray(value) || value.length > MAX_ATTACHMENTS) { + return invalidPayload('Email attachments exceed the supported limit') + } + const attachments: ConversationAttachment[] = [] + for (const entry of value) { + if (!isRecord(entry)) { + return invalidPayload('Email attachment must be an object') + } + const name = optionalString(entry.filename, 240) + const contentType = optionalString(entry.contentType, 200) + const contentBase64 = optionalString( + entry.contentBase64, + MAX_INLINE_ATTACHMENT_LENGTH, + ) + const url = optionalString(entry.url, 2_048) + const size = optionalFiniteNumber(entry.size, 0, MAX_ATTACHMENT_SIZE, true) + if ( + name === undefined || + contentType === undefined || + contentBase64 === undefined || + url === undefined || + size === undefined + ) { + return invalidPayload('Email attachment contains an invalid field') + } + attachments.push({ + id: null, + name: name ?? null, + contentType: contentType ?? null, + size: size ?? null, + contentBase64: contentBase64 ?? null, + url: url ?? null, + }) + } + return { ok: true, value: attachments } +} + +function normalizeSlackFiles( + value: unknown, +): + | { ok: true; value: ConversationAttachment[] } + | { + ok: false + code: 'invalid_payload' + message: string + } { + if (value === undefined) return { ok: true, value: [] } + if (!Array.isArray(value) || value.length > MAX_ATTACHMENTS) { + return invalidPayload('Slack files exceed the supported limit') + } + const files: ConversationAttachment[] = [] + for (const entry of value) { + if (!isRecord(entry)) return invalidPayload('Slack file must be an object') + const size = optionalFiniteNumber(entry.size, 0, MAX_ATTACHMENT_SIZE, true) + if (size === undefined) return invalidPayload('Slack file size is invalid') + files.push({ + id: normalizeNullableString(entry.id, 300), + name: + normalizeNullableString(entry.name, 240) ?? + normalizeNullableString(entry.title, 240), + contentType: normalizeNullableString(entry.mimetype, 200), + size: size ?? null, + contentBase64: null, + // Slack file URLs require the workspace bot token. Products use the + // `slack.download_file` Hub action with this file id; exposing a private + // URL here would make downstream runtimes attempt an unauthenticated fetch. + url: null, + }) + } + return { ok: true, value: files } +} + +function normalizeTeamsAttachments( + value: unknown, +): + | { ok: true; value: ConversationAttachment[] } + | { + ok: false + code: 'invalid_payload' + message: string + } { + if (value === undefined) return { ok: true, value: [] } + if (!Array.isArray(value) || value.length > MAX_ATTACHMENTS) { + return invalidPayload('Teams attachments exceed the supported limit') + } + const attachments: ConversationAttachment[] = [] + for (const entry of value) { + if (!isRecord(entry)) { + return invalidPayload('Teams attachment must be an object') + } + const id = optionalString(entry.id, 300) + const name = optionalString(entry.name, 240) + const contentType = optionalString(entry.contentType, 200) + if ( + id === undefined || + name === undefined || + contentType === undefined + ) { + return invalidPayload('Teams attachment contains an invalid field') + } + attachments.push({ + id: normalizeNullableString(id, 300), + name: normalizeNullableString(name, 240), + contentType: normalizeNullableString(contentType, 200), + size: null, + contentBase64: null, + // Bot attachment URLs require Microsoft authorization. The receiver + // keeps that credential inside Hub; products only receive stable metadata. + url: null, + }) + } + return { ok: true, value: attachments } +} + +function normalizeTeamsTimestamp(value: unknown): number | null | undefined { + if (value === undefined || value === null) return null + if (typeof value !== 'string' || value.length > 100) return undefined + const timestamp = Date.parse(value) + return Number.isFinite(timestamp) && timestamp >= 0 + ? timestamp + : undefined +} + +function referencedMessageIds(headers: Record<string, string>): string[] { + const values = [headers['in-reply-to'], headers.references].filter( + (value): value is string => Boolean(value?.trim()), + ) + const ids: string[] = [] + for (const value of values) { + const bracketed = value.match(/<[^<>]{1,1000}>/g) + const candidates = bracketed ?? value.split(/\s+/) + for (const candidate of candidates) { + const normalized = normalizeMessageId(candidate) + if (normalized && !ids.includes(normalized)) ids.push(normalized) + } + } + return ids.slice(0, 50) +} + +function normalizeMessageId(value: string | null | undefined): string | null { + if (!value) return null + const trimmed = value.trim() + if (!trimmed) return null + return trimmed.startsWith('<') && trimmed.endsWith('>') + ? trimmed.slice(1, -1).trim() || null + : trimmed +} + +function normalizeMailbox(value: string): string { + return value.trim().toLowerCase() +} + +function normalizeNullableString( + value: unknown, + maxLength: number, +): string | null { + return typeof value === 'string' && value.length <= maxLength + ? value.trim() || null + : null +} + +/** + * Undefined means invalid; null means the optional field was absent. + */ +function optionalString( + value: unknown, + maxLength: number, +): string | null | undefined { + if (value === undefined) return null + return typeof value === 'string' && value.length <= maxLength + ? value + : undefined +} + +/** + * Undefined means invalid; null means the optional field was absent. + */ +function optionalFiniteNumber( + value: unknown, + minimum: number, + maximum = Number.MAX_SAFE_INTEGER, + integer = false, +): number | null | undefined { + if (value === undefined) return null + if ( + typeof value !== 'number' || + !Number.isFinite(value) || + value < minimum || + value > maximum || + (integer && !Number.isInteger(value)) + ) { + return undefined + } + return value +} + +function slackTimestampMs(value: string | null): number | null { + if (!value || !/^\d{1,12}(?:\.\d{1,9})?$/.test(value)) return null + const seconds = Number(value) + return Number.isFinite(seconds) ? Math.round(seconds * 1_000) : null +} + +function epochSecondsMs(value: unknown): number | null { + return typeof value === 'number' && Number.isFinite(value) && value >= 0 + ? Math.round(value * 1_000) + : null +} + +function unsupportedEvent( + provider: string, + type: string, +): ConversationEventNormalizationResult { + return { + ok: false, + code: 'unsupported_event', + message: `Conversation events do not support ${provider} event ${type}`, + } +} + +function invalidPayload( + message: string, +): { + ok: false + code: 'invalid_payload' + message: string +} { + return { ok: false, code: 'invalid_payload', message } +} + +function isRecord(value: unknown): value is Record<string, unknown> { + return typeof value === 'object' && value !== null && !Array.isArray(value) +} diff --git a/src/conversation-events/index.ts b/src/conversation-events/index.ts index 134bd0c..d96cd4f 100644 --- a/src/conversation-events/index.ts +++ b/src/conversation-events/index.ts @@ -1,735 +1,34 @@ -import type { TriggerEventCatalog } from '../webhooks/router.js' - -export const MICROSOFT_TEAMS_PROVIDER_ID = 'microsoft-teams' as const -export const MICROSOFT_TEAMS_MESSAGE_EVENT = 'teams.message' as const - -export const MICROSOFT_TEAMS_TRIGGER_EVENT_CATALOG = { - namespace: 'teams.', - closed: true, - events: [{ id: MICROSOFT_TEAMS_MESSAGE_EVENT }], -} as const satisfies TriggerEventCatalog - -export interface InboundEmailAttachment { - filename?: string - contentType?: string - contentBase64?: string - url?: string - size?: number -} - -/** Payload emitted by Tangle's verified inbound-email receiver. */ -export interface InboundEmailPayload { - messageId?: string - from: string - to: string - subject?: string - text?: string - html?: string - headers?: Record<string, string> - attachments?: InboundEmailAttachment[] - receivedAt?: number -} - -export interface ProviderConversationEvent { - provider: string - type: string - deliveryId?: string - payload: unknown -} - -export interface ConversationParticipant { - id: string | null - address: string | null - displayName: string | null -} - -export interface ConversationDestination { - kind: 'mailbox' | 'channel' | 'chat' | 'user' - id: string | null - address: string | null - displayName: string | null -} - -export interface ConversationAttachment { - id: string | null - name: string | null - contentType: string | null - size: number | null - contentBase64: string | null - url: string | null +import { + normalizeConversationEvent as normalizeExistingConversationEvent, + type ConversationEvent as ExistingConversationEvent, + type ConversationEventNormalizationResult as ExistingNormalizationResult, +} from './core.js' +import { normalizeLinqWhatsappConversation } from './linq-whatsapp.js' +import { normalizeMobileConversation } from './mobile.js' + +export * from './core.js' +export { buildMessagingReply, type ConversationReply } from './reply.js' +export { listConversationChannels, conversationEndpointOptions, type ConversationChannel, type ConversationEndpointOption } from './channels.js' + +/** Additive provider vocabulary. Neither sender identity nor group membership is authority. */ +export interface ConversationEvent extends Omit<ExistingConversationEvent, 'provider'> { + provider: ExistingConversationEvent['provider'] | 'inkbox' | 'linq' | 'contiguity' | 'linq-whatsapp' + isGroup?: boolean + /** Historical or incomplete input is not a new automatic command. */ + historyOnly?: boolean } - -/** - * Provider-neutral message data for product ingestion. - * - * The signed Hub delivery remains the audit record. This projection contains - * only the stable fields products need for threading, prompts, and files. - */ -export interface ConversationEvent { - version: 1 - provider: 'email' | 'slack' | 'teams' - eventType: string - operation: 'created' | 'updated' | 'deleted' - eventId: string | null - conversationId: string | null - parentEventIds: string[] - sender: ConversationParticipant - destinations: ConversationDestination[] - subject: string | null - text: string | null - html: string | null - attachments: ConversationAttachment[] - occurredAt: number | null -} - -export type ConversationEventNormalizationErrorCode = - | 'unsupported_provider' - | 'unsupported_event' - | 'invalid_payload' - export type ConversationEventNormalizationResult = | { ok: true; event: ConversationEvent } - | { - ok: false - code: ConversationEventNormalizationErrorCode - message: string - } - -const MAX_BODY_LENGTH = 1_000_000 -const MAX_ATTACHMENTS = 50 -const MAX_INLINE_ATTACHMENT_LENGTH = 1_100_000 -const MAX_ATTACHMENT_SIZE = 20 * 1024 * 1024 -const MAX_HEADERS = 200 - -export function normalizeConversationEvent( - value: unknown, -): ConversationEventNormalizationResult { - if ( - !isRecord(value) || - typeof value.provider !== 'string' || - typeof value.type !== 'string' || - (value.deliveryId !== undefined && - typeof value.deliveryId !== 'string') || - !Object.prototype.hasOwnProperty.call(value, 'payload') - ) { - return invalidPayload( - 'Provider conversation event requires provider, type, and payload', - ) - } - const input: ProviderConversationEvent = { - provider: value.provider, - type: value.type, - ...(typeof value.deliveryId === 'string' - ? { deliveryId: value.deliveryId } - : {}), - payload: value.payload, - } - if (input.provider === 'email') { - if (input.type !== 'email.received') { - return unsupportedEvent(input.provider, input.type) - } - return normalizeEmail(input) - } - if (input.provider === 'slack') { - if (input.type !== 'slack.message' && input.type !== 'slack.app_mention') { - return unsupportedEvent(input.provider, input.type) - } - return normalizeSlack(input) - } - if (input.provider === MICROSOFT_TEAMS_PROVIDER_ID) { - if (input.type !== MICROSOFT_TEAMS_MESSAGE_EVENT) { - return unsupportedEvent(input.provider, input.type) - } - return normalizeMicrosoftTeams(input) - } - return { - ok: false, - code: 'unsupported_provider', - message: `Conversation events do not support provider ${input.provider}`, - } -} - -function normalizeMicrosoftTeams( - input: ProviderConversationEvent, -): ConversationEventNormalizationResult { - const activity = input.payload - if (!isRecord(activity) || activity.type !== 'message') { - return invalidPayload('Teams payload requires a message activity') - } - if ( - activity.channelId !== undefined && - activity.channelId !== 'msteams' - ) { - return invalidPayload('Teams activity came from an unsupported channel') - } - const text = optionalString(activity.text, MAX_BODY_LENGTH) - if (text === undefined) { - return invalidPayload('Teams message text is invalid') - } - const conversation = isRecord(activity.conversation) - ? activity.conversation - : null - const conversationId = normalizeNullableString(conversation?.id, 2_000) - if (!conversationId) { - return invalidPayload('Teams message requires a conversation id') - } - const channelData = isRecord(activity.channelData) - ? activity.channelData - : null - const tenant = resolveMicrosoftTeamsTenantId(activity) - if (!tenant.ok) return invalidPayload(tenant.message) - const tenantId = tenant.tenantId - const from = isRecord(activity.from) ? activity.from : null - const channel = isRecord(channelData?.channel) - ? channelData.channel - : null - const team = isRecord(channelData?.team) ? channelData.team : null - const channelId = normalizeNullableString(channel?.id, 2_000) - const channelName = normalizeNullableString(channel?.name, 300) - const teamId = normalizeNullableString(team?.id, 2_000) - const replyToId = normalizeNullableString(activity.replyToId, 2_000) - const eventId = - normalizeNullableString(activity.id, 2_000) ?? - normalizeNullableString(input.deliveryId, 2_000) - const attachments = normalizeTeamsAttachments(activity.attachments) - if (!attachments.ok) return attachments - const timestamp = normalizeTeamsTimestamp( - activity.timestamp ?? activity.localTimestamp, - ) - if (timestamp === undefined) { - return invalidPayload('Teams message timestamp is invalid') - } - - return { - ok: true, - event: { - version: 1, - provider: 'teams', - eventType: input.type, - operation: 'created', - eventId, - conversationId: `${tenantId}:${conversationId}`, - parentEventIds: replyToId ? [replyToId] : [], - sender: { - id: - normalizeNullableString(from?.aadObjectId, 300) ?? - normalizeNullableString(from?.id, 2_000), - address: null, - displayName: normalizeNullableString(from?.name, 300), - }, - destinations: [ - { - kind: channelId ? 'channel' : 'chat', - id: channelId ?? conversationId, - address: null, - displayName: channelName, - }, - ...(teamId - ? [ - { - kind: 'channel' as const, - id: teamId, - address: null, - displayName: normalizeNullableString(team?.name, 300), - }, - ] - : []), - ], - subject: null, - text: text ?? null, - html: null, - attachments: attachments.value, - occurredAt: timestamp ?? null, - }, - } -} - -export type MicrosoftTeamsTenantResolution = - | { ok: true; tenantId: string } - | { ok: false; message: string } - -/** - * Resolve the authenticated Teams tenant identity shared by the platform - * receiver and product normalizer. Teams may repeat it in both - * `channelData.tenant.id` and `conversation.tenantId`; disagreement is - * rejected so an event can never be attributed to a guessed tenant. - */ -export function resolveMicrosoftTeamsTenantId( - payload: unknown, -): MicrosoftTeamsTenantResolution { - if (!isRecord(payload)) { - return { ok: false, message: 'Teams payload requires an activity object' } - } - const conversation = isRecord(payload.conversation) - ? payload.conversation - : null - const channelData = isRecord(payload.channelData) - ? payload.channelData - : null - const channelDataTenant = isRecord(channelData?.tenant) - ? normalizeNullableString(channelData.tenant.id, 300) - : null - const conversationTenant = normalizeNullableString( - conversation?.tenantId, - 300, - ) - if ( - channelDataTenant && - conversationTenant && - channelDataTenant !== conversationTenant - ) { - return { - ok: false, - message: 'Teams activity contains conflicting tenant ids', - } - } - const tenantId = channelDataTenant ?? conversationTenant - return tenantId - ? { ok: true, tenantId } - : { ok: false, message: 'Teams message requires a tenant id' } -} - -function normalizeEmail( - input: ProviderConversationEvent, -): ConversationEventNormalizationResult { - const payload = input.payload - if (!isRecord(payload)) return invalidPayload('Email payload must be an object') - const from = optionalString(payload.from, 320) - const to = optionalString(payload.to, 320) - if ( - from === undefined || - from === null || - to === undefined || - to === null || - !from.trim() || - !to.trim() - ) { - return invalidPayload('Email payload requires non-empty string from and to') - } - const messageId = optionalString(payload.messageId, 1_000) - const subject = optionalString(payload.subject, 2_000) - const text = optionalString(payload.text, MAX_BODY_LENGTH) - const html = optionalString(payload.html, MAX_BODY_LENGTH) - if ( - messageId === undefined || - subject === undefined || - text === undefined || - html === undefined - ) { - return invalidPayload('Email payload contains an invalid string field') - } - const receivedAt = optionalFiniteNumber(payload.receivedAt, 0) - if (receivedAt === undefined) { - return invalidPayload('Email receivedAt must be a non-negative number') - } - const headers = normalizeHeaders(payload.headers) - if (!headers.ok) return headers - const attachments = normalizeEmailAttachments(payload.attachments) - if (!attachments.ok) return attachments - - return { - ok: true, - event: { - version: 1, - provider: 'email', - eventType: input.type, - operation: 'created', - eventId: - normalizeMessageId(messageId) ?? - normalizeNullableString(input.deliveryId, 1_000), - conversationId: null, - parentEventIds: referencedMessageIds(headers.value), - sender: { - id: null, - address: normalizeNullableString(from, 320), - displayName: null, - }, - destinations: [ - { - kind: 'mailbox', - id: null, - address: normalizeMailbox(to), - displayName: null, - }, - ], - subject: normalizeNullableString(subject, 2_000), - text: text ?? null, - html: html ?? null, - attachments: attachments.value, - occurredAt: receivedAt ?? null, - }, - } -} + | Exclude<ExistingNormalizationResult, { ok: true }> -function normalizeSlack( - input: ProviderConversationEvent, -): ConversationEventNormalizationResult { - const wrapper = input.payload - if (!isRecord(wrapper) || !isRecord(wrapper.event)) { - return invalidPayload('Slack payload requires an Events API event object') - } - const outerEvent = wrapper.event - const changedMessage = - outerEvent.subtype === 'message_changed' && isRecord(outerEvent.message) - ? outerEvent.message - : null - const deletedMessage = - outerEvent.subtype === 'message_deleted' && - isRecord(outerEvent.previous_message) - ? outerEvent.previous_message - : null - const message = changedMessage ?? deletedMessage ?? outerEvent - if ( - message.type !== 'message' && - input.type !== 'slack.app_mention' - ) { - return invalidPayload('Slack event does not contain a message') - } - const text = optionalString(message.text, MAX_BODY_LENGTH) - if (text === undefined) { - return invalidPayload('Slack message text is invalid') - } - const channel = - normalizeNullableString(outerEvent.channel, 300) ?? - normalizeNullableString(message.channel, 300) - if (!channel) return invalidPayload('Slack message requires a channel') - const timestamp = - normalizeNullableString(message.ts, 100) ?? - normalizeNullableString(outerEvent.event_ts, 100) - const threadTimestamp = normalizeNullableString(message.thread_ts, 100) - const team = - normalizeNullableString(wrapper.team_id, 300) ?? - normalizeNullableString(wrapper.context_team_id, 300) - const rootTimestamp = threadTimestamp ?? timestamp - const files = normalizeSlackFiles(message.files) - if (!files.ok) return files - const subtype = normalizeNullableString(outerEvent.subtype, 100) - - return { - ok: true, - event: { - version: 1, - provider: 'slack', - eventType: input.type, - operation: - subtype === 'message_deleted' - ? 'deleted' - : subtype === 'message_changed' - ? 'updated' - : 'created', - eventId: - normalizeNullableString(wrapper.event_id, 300) ?? - normalizeNullableString(message.client_msg_id, 300) ?? - normalizeNullableString(input.deliveryId, 300) ?? - timestamp, - conversationId: rootTimestamp - ? [team, channel, rootTimestamp].filter(Boolean).join(':') - : null, - parentEventIds: - threadTimestamp && timestamp && threadTimestamp !== timestamp - ? [threadTimestamp] - : [], - sender: { - id: - normalizeNullableString(message.user, 300) ?? - normalizeNullableString(message.bot_id, 300), - address: null, - displayName: - normalizeNullableString(message.username, 300) ?? - (isRecord(message.user_profile) - ? normalizeNullableString( - message.user_profile.display_name, - 300, - ) - : null), - }, - destinations: [ - { - kind: 'channel', - id: channel, - address: null, - displayName: null, - }, - ], - subject: null, - text: text ?? null, - html: null, - attachments: files.value, - occurredAt: - slackTimestampMs(timestamp) ?? - epochSecondsMs(wrapper.event_time) ?? - null, - }, - } -} - -function normalizeHeaders( - value: unknown, -): - | { ok: true; value: Record<string, string> } - | { - ok: false - code: 'invalid_payload' - message: string - } { - if (value === undefined) return { ok: true, value: {} } - if (!isRecord(value) || Object.keys(value).length > MAX_HEADERS) { - return invalidPayload('Email headers must be a bounded string record') - } - const headers: Record<string, string> = {} - for (const [key, entry] of Object.entries(value)) { - if ( - key.length === 0 || - key.length > 200 || - typeof entry !== 'string' || - entry.length > 4_000 - ) { - return invalidPayload('Email headers must be a bounded string record') - } - headers[key.toLowerCase()] = entry - } - return { ok: true, value: headers } -} - -function normalizeEmailAttachments( - value: unknown, -): - | { ok: true; value: ConversationAttachment[] } - | { - ok: false - code: 'invalid_payload' - message: string - } { - if (value === undefined) return { ok: true, value: [] } - if (!Array.isArray(value) || value.length > MAX_ATTACHMENTS) { - return invalidPayload('Email attachments exceed the supported limit') - } - const attachments: ConversationAttachment[] = [] - for (const entry of value) { - if (!isRecord(entry)) { - return invalidPayload('Email attachment must be an object') - } - const name = optionalString(entry.filename, 240) - const contentType = optionalString(entry.contentType, 200) - const contentBase64 = optionalString( - entry.contentBase64, - MAX_INLINE_ATTACHMENT_LENGTH, - ) - const url = optionalString(entry.url, 2_048) - const size = optionalFiniteNumber(entry.size, 0, MAX_ATTACHMENT_SIZE, true) - if ( - name === undefined || - contentType === undefined || - contentBase64 === undefined || - url === undefined || - size === undefined - ) { - return invalidPayload('Email attachment contains an invalid field') - } - attachments.push({ - id: null, - name: name ?? null, - contentType: contentType ?? null, - size: size ?? null, - contentBase64: contentBase64 ?? null, - url: url ?? null, - }) - } - return { ok: true, value: attachments } -} - -function normalizeSlackFiles( - value: unknown, -): - | { ok: true; value: ConversationAttachment[] } - | { - ok: false - code: 'invalid_payload' - message: string - } { - if (value === undefined) return { ok: true, value: [] } - if (!Array.isArray(value) || value.length > MAX_ATTACHMENTS) { - return invalidPayload('Slack files exceed the supported limit') - } - const files: ConversationAttachment[] = [] - for (const entry of value) { - if (!isRecord(entry)) return invalidPayload('Slack file must be an object') - const size = optionalFiniteNumber(entry.size, 0, MAX_ATTACHMENT_SIZE, true) - if (size === undefined) return invalidPayload('Slack file size is invalid') - files.push({ - id: normalizeNullableString(entry.id, 300), - name: - normalizeNullableString(entry.name, 240) ?? - normalizeNullableString(entry.title, 240), - contentType: normalizeNullableString(entry.mimetype, 200), - size: size ?? null, - contentBase64: null, - // Slack file URLs require the workspace bot token. Products use the - // `slack.download_file` Hub action with this file id; exposing a private - // URL here would make downstream runtimes attempt an unauthenticated fetch. - url: null, - }) - } - return { ok: true, value: files } -} - -function normalizeTeamsAttachments( - value: unknown, -): - | { ok: true; value: ConversationAttachment[] } - | { - ok: false - code: 'invalid_payload' - message: string - } { - if (value === undefined) return { ok: true, value: [] } - if (!Array.isArray(value) || value.length > MAX_ATTACHMENTS) { - return invalidPayload('Teams attachments exceed the supported limit') - } - const attachments: ConversationAttachment[] = [] - for (const entry of value) { - if (!isRecord(entry)) { - return invalidPayload('Teams attachment must be an object') - } - const id = optionalString(entry.id, 300) - const name = optionalString(entry.name, 240) - const contentType = optionalString(entry.contentType, 200) - if ( - id === undefined || - name === undefined || - contentType === undefined - ) { - return invalidPayload('Teams attachment contains an invalid field') - } - attachments.push({ - id: normalizeNullableString(id, 300), - name: normalizeNullableString(name, 240), - contentType: normalizeNullableString(contentType, 200), - size: null, - contentBase64: null, - // Bot attachment URLs require Microsoft authorization. The receiver - // keeps that credential inside Hub; products only receive stable metadata. - url: null, - }) - } - return { ok: true, value: attachments } -} - -function normalizeTeamsTimestamp(value: unknown): number | null | undefined { - if (value === undefined || value === null) return null - if (typeof value !== 'string' || value.length > 100) return undefined - const timestamp = Date.parse(value) - return Number.isFinite(timestamp) && timestamp >= 0 - ? timestamp - : undefined -} - -function referencedMessageIds(headers: Record<string, string>): string[] { - const values = [headers['in-reply-to'], headers.references].filter( - (value): value is string => Boolean(value?.trim()), - ) - const ids: string[] = [] - for (const value of values) { - const bracketed = value.match(/<[^<>]{1,1000}>/g) - const candidates = bracketed ?? value.split(/\s+/) - for (const candidate of candidates) { - const normalized = normalizeMessageId(candidate) - if (normalized && !ids.includes(normalized)) ids.push(normalized) +export function normalizeConversationEvent(value: unknown): ConversationEventNormalizationResult { + if (value && typeof value === 'object' && 'provider' in value + && ['inkbox', 'linq', 'contiguity', 'linq-whatsapp'].includes(String(value.provider))) { + if (!('type' in value) || typeof value.type !== 'string' || !('payload' in value)) { + return { ok: false, code: 'invalid_payload', message: 'Provider event requires type and payload' } } + if (value.provider === 'linq-whatsapp') return normalizeLinqWhatsappConversation({ provider: value.provider, type: value.type, payload: value.payload }) + return normalizeMobileConversation({ provider: String(value.provider), type: value.type, payload: value.payload }) } - return ids.slice(0, 50) -} - -function normalizeMessageId(value: string | null | undefined): string | null { - if (!value) return null - const trimmed = value.trim() - if (!trimmed) return null - return trimmed.startsWith('<') && trimmed.endsWith('>') - ? trimmed.slice(1, -1).trim() || null - : trimmed -} - -function normalizeMailbox(value: string): string { - return value.trim().toLowerCase() -} - -function normalizeNullableString( - value: unknown, - maxLength: number, -): string | null { - return typeof value === 'string' && value.length <= maxLength - ? value.trim() || null - : null -} - -/** - * Undefined means invalid; null means the optional field was absent. - */ -function optionalString( - value: unknown, - maxLength: number, -): string | null | undefined { - if (value === undefined) return null - return typeof value === 'string' && value.length <= maxLength - ? value - : undefined -} - -/** - * Undefined means invalid; null means the optional field was absent. - */ -function optionalFiniteNumber( - value: unknown, - minimum: number, - maximum = Number.MAX_SAFE_INTEGER, - integer = false, -): number | null | undefined { - if (value === undefined) return null - if ( - typeof value !== 'number' || - !Number.isFinite(value) || - value < minimum || - value > maximum || - (integer && !Number.isInteger(value)) - ) { - return undefined - } - return value -} - -function slackTimestampMs(value: string | null): number | null { - if (!value || !/^\d{1,12}(?:\.\d{1,9})?$/.test(value)) return null - const seconds = Number(value) - return Number.isFinite(seconds) ? Math.round(seconds * 1_000) : null -} - -function epochSecondsMs(value: unknown): number | null { - return typeof value === 'number' && Number.isFinite(value) && value >= 0 - ? Math.round(value * 1_000) - : null -} - -function unsupportedEvent( - provider: string, - type: string, -): ConversationEventNormalizationResult { - return { - ok: false, - code: 'unsupported_event', - message: `Conversation events do not support ${provider} event ${type}`, - } -} - -function invalidPayload( - message: string, -): { - ok: false - code: 'invalid_payload' - message: string -} { - return { ok: false, code: 'invalid_payload', message } -} - -function isRecord(value: unknown): value is Record<string, unknown> { - return typeof value === 'object' && value !== null && !Array.isArray(value) + return normalizeExistingConversationEvent(value) } diff --git a/src/conversation-events/linq-whatsapp.ts b/src/conversation-events/linq-whatsapp.ts new file mode 100644 index 0000000..977e048 --- /dev/null +++ b/src/conversation-events/linq-whatsapp.ts @@ -0,0 +1,41 @@ +import type { ConversationEventNormalizationResult, ProviderConversationEvent } from './index.js' + +function object(value: unknown): value is Record<string, unknown> { + return value !== null && typeof value === 'object' && !Array.isArray(value) +} +function id(value: unknown): value is string { + return typeof value === 'string' && value.length > 0 && value.length <= 256 && !/[\u0000-\u001f\u007f]/.test(value) +} +const invalid = (message: string): ConversationEventNormalizationResult => ({ ok: false, code: 'invalid_payload', message }) + +/** Fresh webhook snapshots only. Historical range notifications need journal hydration. + * A chat represents one customer, but the message does not contain their address. + * Keep that customer opaque; never mislabel message.from (our number) as the sender. */ +export function normalizeLinqWhatsappConversation(input: ProviderConversationEvent): ConversationEventNormalizationResult { + const value = input.payload + if (!object(value) || input.type !== `linq-whatsapp.${value.type}`) return invalid('Event type does not match the provider envelope') + if (value.type !== 'message.received') return { ok: false, code: 'unsupported_event', message: 'Not an incoming message' } + if (!object(value.data) || !object(value.data.message)) return invalid('Read the chat journal to hydrate this historical event') + const message = value.data.message + if (!id(value.id) || !id(message.id) || !id(message.chat_id) || !id(message.from) || message.direction !== 'inbound') { + return invalid('Incoming message requires a stable identity, conversation and owned destination') + } + if (value.data.chat_id !== undefined && value.data.chat_id !== message.chat_id) return invalid('Chat identity mismatch') + if (!Array.isArray(message.parts) || !message.parts.length || message.parts.length > 50) return invalid('Invalid message parts') + const text: string[] = [] + for (const part of message.parts) { + if (!object(part) || part.type !== 'text' || typeof part.body !== 'string' || part.body.length > 4096) { + return { ok: false, code: 'unsupported_event', message: 'This message requires non-text handling' } + } + text.push(part.body) + } + const occurredAt = typeof message.created_at === 'string' ? Date.parse(message.created_at) : NaN + if (!Number.isSafeInteger(occurredAt) || occurredAt < 0) return invalid('Invalid message timestamp') + return { ok: true, event: { + version: 1, provider: 'linq-whatsapp', eventType: input.type, operation: 'created', eventId: message.id, + conversationId: message.chat_id, parentEventIds: [], + sender: { id: `customer:${message.chat_id}`, address: null, displayName: null }, + destinations: [{ kind: 'chat', id: message.from, address: message.from, displayName: null }], + subject: null, text: text.join('\n'), html: null, attachments: [], occurredAt, isGroup: false, + } } +} diff --git a/src/conversation-events/mobile.ts b/src/conversation-events/mobile.ts new file mode 100644 index 0000000..7affa2c --- /dev/null +++ b/src/conversation-events/mobile.ts @@ -0,0 +1,114 @@ +import type { ConversationAttachment, ConversationEvent, ConversationEventNormalizationResult, ProviderConversationEvent } from './index.js' + +type RecordValue = Record<string, unknown> +function record(value: unknown): value is RecordValue { return value !== null && typeof value === 'object' && !Array.isArray(value) } +function string(value: unknown, max = 2000): string | null { + return typeof value === 'string' && value.length > 0 && value.length <= max && !/[\u0000-\u0008\u000b\u000c\u000e-\u001f]/.test(value) ? value : null +} +function timestamp(value: unknown): number | null { + const n = typeof value === 'number' ? value * 1000 : typeof value === 'string' ? Date.parse(value) : NaN + return Number.isSafeInteger(n) && n >= 0 ? n : null +} +const invalid = (message: string): ConversationEventNormalizationResult => ({ ok: false, code: 'invalid_payload', message }) +const unsupported = (): ConversationEventNormalizationResult => ({ ok: false, code: 'unsupported_event', message: 'Not a supported incoming conversation message' }) + +function attachment(value: unknown): ConversationAttachment | null { + if (!record(value)) return null + const url = string(value.url ?? value.value, 8192) + if (!url) return null + try { const u = new URL(url); if (u.protocol !== 'https:' || u.username || u.password) return null } catch { return null } + return { id: string(value.id), name: string(value.filename ?? value.name, 255), + contentType: string(value.mime_type ?? value.mime ?? value.content_type, 200), size: null, contentBase64: null, url } +} + +function finish(input: ProviderConversationEvent, data: { + id: unknown; conversation: unknown; sender: unknown; destination: unknown; + destinationAddress?: unknown; text: unknown; time: unknown; media?: unknown; parent?: unknown; + subject?: unknown; destinationKind?: 'chat' | 'mailbox'; isGroup?: boolean; historyOnly?: boolean; +}): ConversationEventNormalizationResult { + const id = string(data.id), conversation = string(data.conversation), sender = string(data.sender), destination = string(data.destination) + if (!id || !conversation || !sender || !destination) return invalid('Message identity, conversation, sender and destination are required') + if (data.text !== null && data.text !== undefined && (typeof data.text !== 'string' || data.text.length > 1_000_000)) return invalid('Invalid message text') + if (data.media !== undefined && data.media !== null && (!Array.isArray(data.media) || data.media.length > 50)) return invalid('Invalid attachment list') + const media = (data.media ?? []) as unknown[] + const attachments = media.map(attachment) + if (attachments.some((a) => !a)) return invalid('Attachments require HTTPS references; bytes must be resolved through the authorized file boundary') + const time = timestamp(data.time) + if (time === null) return invalid('A valid provider timestamp is required') + const provider = input.provider as 'inkbox' | 'linq' | 'contiguity' + const event: ConversationEvent = { + version: 1, provider, eventType: input.type, operation: 'created', eventId: id, + conversationId: conversation, parentEventIds: string(data.parent) ? [String(data.parent)] : [], + sender: { id: sender, address: sender, displayName: null }, + destinations: [{ kind: data.destinationKind ?? 'chat', id: destination, address: string(data.destinationAddress), displayName: null }], + subject: string(data.subject, 998), text: (data.text as string | null | undefined) ?? null, html: null, + attachments: attachments as ConversationAttachment[], occurredAt: time, + isGroup: data.isGroup === true, historyOnly: data.historyOnly === true, + } + return { ok: true, event } +} + +/** Called after the host verifies signatures and resolves the owning connection. */ +export function normalizeMobileConversation(input: ProviderConversationEvent): ConversationEventNormalizationResult { + const p = input.payload + if (!record(p) || !record(p.data)) return invalid('Provider payload requires a data object') + const data = p.data + if (input.provider === 'inkbox') { + if (input.type !== `inkbox.${p.event_type}`) return invalid('Event type does not match the provider envelope') + if (p.event_type === 'imessage.received') { + const m = data.message + if (!record(m) || m.direction !== 'inbound') return invalid('Expected an inbound iMessage') + return finish(input, { id: m.id, conversation: m.conversation_id, sender: m.sender_number ?? m.remote_number, + destination: m.conversation_id, text: m.content, time: m.created_at ?? p.timestamp, media: m.media, isGroup: m.is_group === true }) + } + if (p.event_type === 'text.received') { + const m = data.text_message + if (!record(m) || m.direction !== 'inbound') return invalid('Expected an inbound phone text') + return finish(input, { id: m.id, conversation: m.conversation_id, sender: m.sender_phone_number ?? m.remote_phone_number, + destination: m.local_phone_number, destinationAddress: m.local_phone_number, text: m.text, time: m.created_at ?? p.timestamp, + media: m.media, isGroup: m.is_group === true }) + } + if (p.event_type === 'message.received') { + const m = data.message + if (!record(m) || m.direction !== 'inbound') return invalid('Expected inbound mail') + return finish(input, { id: m.id, conversation: m.thread_id ?? m.id, sender: m.from_address, + destination: m.email_address, destinationAddress: m.email_address, destinationKind: 'mailbox', text: m.body, + time: m.created_at ?? p.timestamp, subject: m.subject, + historyOnly: m.body_state !== 'complete' || m.body_truncated === true }) + } + return unsupported() + } + if (input.provider === 'linq') { + if (input.type !== `linq.${p.event_type}`) return invalid('Event type does not match the provider envelope') + if (p.event_type !== 'message.received') return unsupported() + if (p.webhook_version !== '2026-02-03' || data.direction !== 'inbound' || !record(data.chat) + || !record(data.sender_handle) || !record(data.chat.owner_handle) || data.chat.owner_handle.is_me !== true || data.sender_handle.is_me === true) { + return invalid('Linq requires v2026-02-03 incoming payloads with explicit sender and owner handles') + } + if (!Array.isArray(data.parts) || data.parts.length > 50) return invalid('Invalid Linq parts') + const texts: string[] = [], media: RecordValue[] = [] + for (const part of data.parts) { + if (!record(part)) return invalid('Invalid Linq part') + if (part.type === 'text' || part.type === 'link') { + if (typeof part.value !== 'string') return invalid('Invalid Linq text') + texts.push(part.value) + } else if (part.type === 'media') media.push(part) + else return unsupported() + } + return finish(input, { id: data.id, conversation: data.chat.id, sender: data.sender_handle.handle, + destination: data.chat.id, destinationAddress: data.chat.owner_handle.handle, + text: texts.join('\n'), time: data.sent_at ?? p.created_at, media, + parent: record(data.reply_to) ? data.reply_to.message_id : undefined, + isGroup: data.chat.is_group === true, historyOnly: data.reconciled_at != null || data.zero_retention === true }) + } + if (input.provider === 'contiguity') { + if (input.type !== `contiguity.${p.type}`) return invalid('Event type does not match the provider envelope') + if (!['imessage.incoming', 'text.incoming.sms', 'text.incoming.mms'].includes(String(p.type))) return unsupported() + if (!string(data.to, 320) || !string(data.from, 320)) return invalid('Missing Contiguity phone routing') + // No native chat id in v2: use a collision-free tuple, not a bare sender across channels. + return finish(input, { id: p.id, conversation: JSON.stringify([p.type === 'imessage.incoming' ? 'imessage' : 'text', data.to, data.from]), + sender: data.from, destination: data.to, destinationAddress: data.to, text: data.body, + time: data.timestamp ?? p.timestamp, media: data.attachments }) + } + return { ok: false, code: 'unsupported_provider', message: 'Unsupported mobile provider' } +} diff --git a/src/conversation-events/reply.ts b/src/conversation-events/reply.ts new file mode 100644 index 0000000..497c6c8 --- /dev/null +++ b/src/conversation-events/reply.ts @@ -0,0 +1,67 @@ +import { normalizeConversationEvent, type ConversationEventNormalizationResult, type ProviderConversationEvent } from './index.js' + +export interface ConversationReply { + /** Qualified existing Hub action. The host supplies the bound connection. */ + action: string + input: Record<string, unknown> + /** Pass as the invocation's idempotency key, unchanged on every retry of this reply. */ + idempotencyKey: string +} + +type Failure = Exclude<ConversationEventNormalizationResult, { ok: true }> +function object(value: unknown): Record<string, unknown> { + return value !== null && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : {} +} +const fail = (message: string): Failure => ({ ok: false, code: 'invalid_payload', message }) + +/** + * Derive a plain-text reply from a previously authenticated, stored event. + * No model-selected recipient, sender, fallback channel or credential. + * This is routing, not permission: recheck the bound connection and current + * grant, persist the outbox key/body, then invoke through the existing Hub SDK. + */ +export function buildMessagingReply( + input: ProviderConversationEvent, + text: string, + operationId: string, +): { ok: true; reply: ConversationReply } | Failure { + const normalized = normalizeConversationEvent(input) + if (!normalized.ok) return normalized + const event = normalized.event + if (typeof text !== 'string' || !text.trim() || text.length > 10000 || text.includes('\0')) return fail('Reply text is empty or exceeds its limit') + if (typeof operationId !== 'string' || !operationId || operationId.length > 256 || /[\u0000-\u001f]/.test(operationId)) return fail('A stable operation id is required') + if (event.historyOnly || event.isGroup) return fail('This event requires review or complete input before a reply') + const data = object(object(input.payload).data) + if (event.provider === 'inkbox') { + if (event.eventType === 'inkbox.imessage.received') { + return { ok: true, reply: { idempotencyKey: operationId, action: 'inkbox.imessage.reply', input: { conversation_id: event.conversationId, text } } } + } + if (event.eventType === 'inkbox.text.received') { + const message = object(data.text_message) + if (typeof message.phone_number_id !== 'string' || !message.phone_number_id || text.length > 1600) return fail('SMS requires its owned phone id and at most 1600 characters') + return { ok: true, reply: { idempotencyKey: operationId, action: 'inkbox.sms.reply', input: { phone_number_id: message.phone_number_id, conversation_id: event.conversationId, text } } } + } + if (event.eventType === 'inkbox.message.received') { + const message = object(data.message) + if (!event.sender.address || typeof message.email_address !== 'string') return fail('Mail reply requires an explicit sender and mailbox') + const subject = event.subject ?? '' + return { ok: true, reply: { idempotencyKey: operationId, action: 'inkbox.email.send', input: { + email_address: message.email_address, to: [event.sender.address], + subject: /^re:/i.test(subject) ? subject : `Re: ${subject}`.slice(0, 998), text, + in_reply_to_message_id: event.eventId, + } } } + } + } + if (event.provider === 'linq-whatsapp') { + if (text.length > 4096) return fail('WhatsApp text is limited to 4096 characters') + return { ok: true, reply: { idempotencyKey: operationId, action: 'linq-whatsapp.messages.reply', input: { chat_id: event.conversationId, text } } } + } + if (event.provider === 'linq') { + return { ok: true, reply: { idempotencyKey: operationId, action: 'linq.messages.reply', input: { chat_id: event.conversationId, text, message_key: operationId } } } + } + if (event.provider === 'contiguity') { + return { ok: true, reply: { idempotencyKey: operationId, action: event.eventType === 'contiguity.imessage.incoming' ? 'contiguity.messages.send_imessage' : 'contiguity.sms.send', + input: { to: event.sender.address, from: event.destinations[0]?.address, message: text } } } + } + return { ok: false, code: 'unsupported_provider', message: 'Use the existing channel-specific reply tool for this provider' } +} diff --git a/src/managed-messaging/index.ts b/src/managed-messaging/index.ts new file mode 100644 index 0000000..e88df86 --- /dev/null +++ b/src/managed-messaging/index.ts @@ -0,0 +1,3 @@ +/** Host-only lifecycle primitives. Not exported through the agent tool catalog. */ +export * from './inkbox.js' +export * from './provision.js' diff --git a/src/managed-messaging/inkbox.ts b/src/managed-messaging/inkbox.ts new file mode 100644 index 0000000..a20e536 --- /dev/null +++ b/src/managed-messaging/inkbox.ts @@ -0,0 +1,167 @@ +export type ManagedMessageTransport = 'sms' | 'imessage' +export interface InkboxNumber { id: string; number: string; smsStatus: string | null; status: string | null } +export interface InkboxIdentity { + id: string + handle: string + organizationId: string + status: string + imessageEnabled: boolean + sms: InkboxNumber | null + imessage: InkboxNumber | null +} +export class MessagingProvisionError extends Error { + constructor( + readonly code: 'invalid_input' | 'unavailable' | 'provider_rejected' | 'outcome_unknown' | 'invalid_receipt', + readonly status?: number, + readonly retryAfterSeconds?: number, + ) { + super(`Messaging provisioning: ${code}${status ? ` (HTTP ${status})` : ''}`) + this.name = 'MessagingProvisionError' + } +} +const BASE = 'https://inkbox.ai/api/v1' +const UUID = /^[a-f\d]{8}(?:-[a-f\d]{4}){3}-[a-f\d]{12}$/i +const PHONE = /^\+[1-9]\d{6,14}$/ +const HANDLE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/ +function record(value: unknown): Record<string, unknown> { + if (!value || typeof value !== 'object' || Array.isArray(value)) throw new MessagingProvisionError('invalid_receipt') + return value as Record<string, unknown> +} +function readNumber(value: unknown): InkboxNumber | null { + if (value == null) return null + const row = record(value) + if (typeof row.id !== 'string' || !UUID.test(row.id) || typeof row.number !== 'string' || !PHONE.test(row.number)) throw new MessagingProvisionError('invalid_receipt') + return { id: row.id, number: row.number, smsStatus: typeof row.sms_status === 'string' ? row.sms_status : null, status: typeof row.status === 'string' ? row.status : null } +} +/** Project only channel identity. Mailbox, tunnel, credentials and contacts never leave this boundary. */ +export function parseInkboxIdentity(value: unknown): InkboxIdentity { + const row = record(value) + if (typeof row.id !== 'string' || !UUID.test(row.id) || typeof row.agent_handle !== 'string' || + row.agent_handle.length < 3 || row.agent_handle.length > 63 || !HANDLE.test(row.agent_handle) || + typeof row.organization_id !== 'string' || !row.organization_id || row.organization_id.length > 256 || + typeof row.status !== 'string' || !row.status || typeof row.imessage_enabled !== 'boolean') throw new MessagingProvisionError('invalid_receipt') + return { id: row.id, handle: row.agent_handle, organizationId: row.organization_id, status: row.status, + imessageEnabled: row.imessage_enabled, sms: readNumber(row.phone_number), imessage: readNumber(row.imessage_number) } +} +function assertHandle(value: string): void { + if (value.length < 3 || value.length > 63 || !HANDLE.test(value)) throw new MessagingProvisionError('invalid_input') +} +function assertOperation(value: string): void { + if (!value || value.length > 200 || !/^[a-zA-Z0-9:._-]+$/.test(value)) throw new MessagingProvisionError('invalid_input') +} +async function readJson(response: Response): Promise<unknown> { + if (!response.body) throw new MessagingProvisionError('invalid_receipt') + const reader = response.body.getReader() + const chunks: Uint8Array[] = []; let size = 0 + try { + while (true) { + const chunk = await reader.read() + if (chunk.done) break + size += chunk.value.byteLength + if (size > 1_048_576) { await reader.cancel(); throw new MessagingProvisionError('invalid_receipt') } + chunks.push(chunk.value) + } + const bytes = new Uint8Array(size); let offset = 0 + for (const chunk of chunks) { bytes.set(chunk, offset); offset += chunk.length } + return JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes)) as unknown + } catch { throw new MessagingProvisionError('invalid_receipt') } + finally { reader.releaseLock() } +} + +/** + * A read that fails transiently is `unavailable`: it says nothing about a + * mutation that already succeeded. Only a mutation's own definitive 4xx is + * `provider_rejected`, which is what permits another purchase attempt. + */ +function failureCode(method: string, status: number): MessagingProvisionError['code'] { + const transient = status >= 500 || status === 408 + if (method === 'GET') return transient || status === 429 ? 'unavailable' : 'provider_rejected' + return transient ? 'outcome_unknown' : 'provider_rejected' +} + +/** Host-only administrative client; NOT a ConnectorAdapter and never an agent tool. */ +export class InkboxProvisioner { + private readonly fetchImpl: typeof fetch + private readonly timeoutMs: number + readonly #adminKey: string + constructor(options: { adminKey: string; fetchImpl?: typeof fetch; timeoutMs?: number }) { + if (!options.adminKey || options.adminKey.length > 4096 || /[^\x21-\x7e]/.test(options.adminKey)) throw new MessagingProvisionError('unavailable') + this.#adminKey = options.adminKey + this.fetchImpl = options.fetchImpl ?? fetch.bind(globalThis) + this.timeoutMs = options.timeoutMs ?? 15_000 + if (!Number.isSafeInteger(this.timeoutMs) || this.timeoutMs < 1 || this.timeoutMs > 120_000) throw new MessagingProvisionError('invalid_input') + } + private async request(method: 'GET' | 'POST' | 'PATCH' | 'DELETE', path: string, body?: unknown, operationId?: string, key = this.#adminKey): Promise<unknown> { + let response: Response + try { + response = await this.fetchImpl(`${BASE}${path}`, { method, redirect: 'error', signal: AbortSignal.timeout(this.timeoutMs), + headers: { 'X-API-Key': key, ...(body === undefined ? {} : { 'Content-Type': 'application/json' }), ...(operationId ? { 'Idempotency-Key': operationId } : {}) }, + ...(body === undefined ? {} : { body: JSON.stringify(body) }) }) + } catch { throw new MessagingProvisionError(method === 'GET' ? 'unavailable' : 'outcome_unknown') } + if ((method === 'GET' || method === 'DELETE') && response.status === 404) return null + if (!response.ok) { + const retry = response.headers.get('retry-after') + const seconds = retry && /^\d+$/.test(retry) && Number.isSafeInteger(Number(retry)) ? Number(retry) : undefined + throw new MessagingProvisionError(failureCode(method, response.status), response.status, seconds) + } + if (method === 'DELETE' && response.status === 204) return null + return readJson(response) + } + async verifyAdminKey(): Promise<void> { + const self = record(await this.request('GET', '/api-keys/self')) + if (self.scoped_identity_id !== null || self.status !== 'active') throw new MessagingProvisionError('invalid_receipt') + } + async getIdentity(agentHandle: string): Promise<InkboxIdentity | null> { + assertHandle(agentHandle) + const value = await this.request('GET', `/identities/${encodeURIComponent(agentHandle)}`) + if (value === null) return null + return this.identityReceipt(value, agentHandle) + } + async createIdentity(agentHandle: string): Promise<InkboxIdentity> { + assertHandle(agentHandle) + return this.identityReceipt(await this.request('POST', '/identities', { + agent_handle: agentHandle, imessage_enabled: false, contact_sharing_enabled: false, + mailbox: { sending_domain: null }, + }), agentHandle) + } + async claimIMessage(agentHandle: string, operationId: string): Promise<InkboxIdentity> { + assertHandle(agentHandle); assertOperation(operationId) + return this.identityReceipt(await this.request('PATCH', `/identities/${encodeURIComponent(agentHandle)}`, + { imessage_enabled: true, claim_imessage_number: true }, operationId), agentHandle) + } + async provisionSms(agentHandle: string, operationId: string, state?: string): Promise<InkboxNumber> { + assertHandle(agentHandle); assertOperation(operationId) + if (state !== undefined && !/^[A-Z]{2}$/.test(state)) throw new MessagingProvisionError('invalid_input') + const result = readNumber(await this.request('POST', '/phone/numbers', { + agent_handle: agentHandle, type: 'local', incoming_call_action: 'auto_reject', ...(state ? { state } : {}), + }, operationId)) + if (!result) throw new MessagingProvisionError('invalid_receipt') + return result + } + /** Encrypt before any other work. A lost response cannot be repaired by blindly minting another key. */ + async mintIdentityKey(identityId: string, label: string): Promise<{ key: string; keyId: string }> { + if (!UUID.test(identityId) || !label.trim() || label.length > 255) throw new MessagingProvisionError('invalid_input') + const result = record(await this.request('POST', '/api-keys', { label, scoped_identity_id: identityId })) + const meta = record(result.record) + if (meta.scoped_identity_id !== identityId || typeof result.api_key !== 'string' || !result.api_key || result.api_key.length > 4096 || + /[^\x21-\x7e]/.test(result.api_key) || typeof meta.id !== 'string' || !meta.id) throw new MessagingProvisionError('invalid_receipt') + // Only a successful receipt is returned. The host journals this call before sending it. + return { key: result.api_key, keyId: meta.id } + } + /** Safe read after the once-shown key is durable in the host vault. */ + async verifyIdentityKey(key: string, identityId: string, keyId: string): Promise<void> { + if (!UUID.test(identityId) || !key || /[^\x21-\x7e]/.test(key) || key.length > 4096 || !keyId) throw new MessagingProvisionError('invalid_input') + const self = record(await this.request('GET', '/api-keys/self', undefined, undefined, key)) + if (self.scoped_identity_id !== identityId || self.id !== keyId || self.status !== 'active') throw new MessagingProvisionError('invalid_receipt') + } + /** The host must authorize the recorded handle. Dedicated iMessage line release is not attested by this response. */ + async deleteIdentity(agentHandle: string): Promise<void> { + assertHandle(agentHandle) + await this.request('DELETE', `/identities/${encodeURIComponent(agentHandle)}`) + } + private identityReceipt(value: unknown, expectedHandle: string): InkboxIdentity { + const identity = parseInkboxIdentity(value) + if (identity.handle !== expectedHandle) throw new MessagingProvisionError('invalid_receipt') + return identity + } +} diff --git a/src/managed-messaging/provision.ts b/src/managed-messaging/provision.ts new file mode 100644 index 0000000..3425f60 --- /dev/null +++ b/src/managed-messaging/provision.ts @@ -0,0 +1,229 @@ +import { type InkboxIdentity, type InkboxNumber, InkboxProvisioner, MessagingProvisionError, type ManagedMessageTransport } from './inkbox.js' + +export type NumberPhase = 'identity' | 'number' | 'credential' | 'connection' | 'complete' +export interface ManagedNumberOrder { + id: string + ownerId: string + /** Unique to this order. After an attempt, an existing identity with this handle is adopted as the receipt. */ + handle: string + organizationId: string + transport: ManagedMessageTransport + state?: string + /** Immutable, server-created ledger authorization; never accept a browser-supplied paid flag. */ + fundingAuthorizationId: string + version: number + phase: NumberPhase + attempted: boolean + identityId?: string + number?: InkboxNumber + connectionId?: string + status: 'pending' | 'provider_pending' | 'needs_review' | 'ready_for_setup' | 'cancelled' + errorCode?: string + nextAttemptAt?: number +} +export interface ManagedNumberOrderStore { + get(id: string): Promise<ManagedNumberOrder | null> + /** One atomic version check; preserve all rows across host/worker restarts. */ + saveIfVersion(order: ManagedNumberOrder, expectedVersion: number): Promise<boolean> +} +export interface ManagedNumberPorts { + orders: ManagedNumberOrderStore + provider: Pick<InkboxProvisioner, 'getIdentity' | 'createIdentity' | 'claimIMessage' | 'provisionSms' | 'mintIdentityKey' | 'verifyIdentityKey'> + /** Validate/capture through the platform ledger with this order's stable reference. Must be idempotent. */ + authorizeFunding(order: Readonly<ManagedNumberOrder>): Promise<boolean> + /** Re-read configuration and commercial permission before every mutation, including resumed work. */ + canProvision(order: Readonly<ManagedNumberOrder>): Promise<boolean> + vault: { + read(orderId: string): Promise<{ key: string; keyId: string; identityId: string } | null> + /** Encrypt once under the order and identity; reject an existing, different credential. */ + putIfAbsent(orderId: string, value: { key: string; keyId: string; identityId: string }): Promise<void> + } + /** Create/recover exactly this order's owner-scoped Hub connection using the vault reference. Never return its key. */ + bindConnection(order: Readonly<ManagedNumberOrder>): Promise<string> + now?: () => number +} + +function identityMatches(order: ManagedNumberOrder, identity: InkboxIdentity): void { + if (identity.handle !== order.handle || identity.organizationId !== order.organizationId || identity.status !== 'active' || + (order.identityId && identity.id !== order.identityId)) throw new MessagingProvisionError('invalid_receipt') +} +function selectedNumber(order: ManagedNumberOrder, identity: InkboxIdentity): InkboxNumber | null { + return order.transport === 'sms' ? identity.sms : identity.imessageEnabled ? identity.imessage : null +} + +/** One recoverable provisioning step, called by the host's EXISTING queue. + * No agent loop, background worker, payment ledger or credential store lives here. + * A journaled non-idempotent call is reconciled by reading provider state, never blindly repeated. */ +export async function advanceManagedNumber(orderId: string, ports: ManagedNumberPorts): Promise<ManagedNumberOrder> { + let order = await ports.orders.get(orderId) + if (!order) throw new Error('Managed number order not found') + if (!order.id || order.id.length > 128 || !/^[a-zA-Z0-9:._-]+$/.test(order.id) || order.id !== orderId || + !order.ownerId || !order.organizationId || !order.fundingAuthorizationId || + !['sms', 'imessage'].includes(order.transport) || !['identity', 'number', 'credential', 'connection', 'complete'].includes(order.phase) || + !Number.isSafeInteger(order.version) || order.version < 0) throw new MessagingProvisionError('invalid_input') + // Set only when a provider mutation itself is definitively refused. A read + // failing after a successful mutation must never re-open the purchase. + let mutationRefused = false + if (order.phase === 'complete' || order.status === 'cancelled') return order + const now = (ports.now ?? Date.now)() + if (order.nextAttemptAt && order.nextAttemptAt > now) return order + async function save(patch: Partial<ManagedNumberOrder>): Promise<ManagedNumberOrder> { + const before = order! + const next = { ...before, ...patch, version: before.version + 1 } + if (await ports.orders.saveIfVersion(next, before.version)) { order = next; return next } + return recordReceipt(patch) + } + /** + * The order changed underneath this tick, usually a cancellation racing a + * provider call. Drop the patch, but keep any provider receipt it carried: + * a purchased number no order records cannot be released by cleanup. + */ + async function recordReceipt(patch: Partial<ManagedNumberOrder>): Promise<ManagedNumberOrder> { + const receipt: Partial<ManagedNumberOrder> = { + ...(patch.identityId ? { identityId: patch.identityId } : {}), + ...(patch.number ? { number: patch.number } : {}), + } + for (let attempt = 0; attempt < 3; attempt++) { + const current = await ports.orders.get(orderId) + if (!current) throw new Error('Managed number order disappeared') + const missing = (receipt.identityId && !current.identityId) || (receipt.number && !current.number) + if (!missing) return current + const merged = { + ...current, + ...(current.identityId ? {} : { identityId: receipt.identityId }), + ...(current.number ? {} : { number: receipt.number }), + version: current.version + 1, + } + if (await ports.orders.saveIfVersion(merged, current.version)) return merged + } + throw new MessagingProvisionError('outcome_unknown') + } + async function mutate<T>(call: () => Promise<T>): Promise<T> { + try { return await call() } + catch (error) { + if (error instanceof MessagingProvisionError && error.code === 'provider_rejected') mutationRefused = true + throw error + } + } + /** Journal the attempt, then recheck authority. Release the journal if no provider call follows. */ + async function claim(): Promise<boolean> { + const before = order! + const claimed = await save({ attempted: true, status: 'pending', errorCode: undefined, nextAttemptAt: undefined }) + if (claimed.version !== before.version + 1 || order !== claimed) return false + let authorized = false + try { authorized = await authorize() } + finally { + if (!authorized) await releaseClaim() + } + return authorized + } + async function releaseClaim(): Promise<void> { + const current = await ports.orders.get(orderId) + if (!current || !current.attempted || current.status === 'cancelled') return + if (await ports.orders.saveIfVersion({ ...current, attempted: false, version: current.version + 1 }, current.version)) { + order = { ...current, attempted: false, version: current.version + 1 } + } + } + async function authorize(): Promise<boolean> { + const current = await ports.orders.get(orderId) + if (!current || current.version !== order!.version || current.status === 'cancelled') return false + // Back off: an order that cannot be funded or activated must not stay due + // and crowd other orders out of the host's bounded reconcile sweep. + if (!await ports.canProvision(current)) { await save({ status: 'provider_pending', errorCode: 'activation_not_configured', nextAttemptAt: now + 60_000 }); return false } + if (!await ports.authorizeFunding(current)) { await save({ status: 'provider_pending', errorCode: 'funding_required', nextAttemptAt: now + 60_000 }); return false } + // The checks above may wait on remote services. Do not act on a stale cancellation snapshot. + const rechecked = await ports.orders.get(orderId) + return rechecked?.version === order!.version && rechecked.status !== 'cancelled' + } + try { + if (!await authorize()) return (await ports.orders.get(orderId))! + if (order.phase === 'identity') { + let identity = await ports.provider.getIdentity(order.handle) + if (!identity) { + if (order.attempted) return save({ status: 'needs_review', errorCode: 'identity_outcome_unknown' }) + if (!await claim()) return (await ports.orders.get(orderId))! + const handle = order.handle + identity = await mutate(() => ports.provider.createIdentity(handle)) + } else if (!order.attempted && !order.identityId) { + // A pre-existing handle is not evidence this order created the identity. + return save({ status: 'needs_review', errorCode: 'identity_already_exists' }) + } + identityMatches(order, identity) + return save({ identityId: identity.id, phase: 'number', attempted: false, status: 'pending', errorCode: undefined }) + } + if (!order.identityId) throw new MessagingProvisionError('invalid_receipt') + const identity = await ports.provider.getIdentity(order.handle) + if (!identity) return save({ status: 'needs_review', errorCode: 'identity_missing' }) + identityMatches(order, identity) + if (order.phase === 'number') { + let number = selectedNumber(order, identity) + // A recorded number is an ownership receipt. Its absence now is a provider + // change to review, never a reason to buy another line. + if (!number && order.number) return save({ status: 'needs_review', errorCode: 'number_missing' }) + if (!number) { + // An accepted iMessage claim enables the identity before the provider attaches a line. + if (order.attempted && order.transport === 'imessage' && identity.imessageEnabled) { + return save({ status: 'provider_pending', errorCode: 'number_pending', nextAttemptAt: now + 30_000 }) + } + if (order.attempted) return save({ status: 'needs_review', errorCode: 'number_outcome_unknown' }) + if (!await claim()) return (await ports.orders.get(orderId))! + const { handle, state, id } = order + if (order.transport === 'sms') { + const purchased = await mutate(() => ports.provider.provisionSms(handle, `${id}:sms`, state)) + // A purchase response alone is not an ownership receipt. Read the + // exact identity before the host can treat this number as billable. + const receipt = await ports.provider.getIdentity(order.handle) + if (!receipt) throw new MessagingProvisionError('invalid_receipt') + identityMatches(order, receipt) + number = selectedNumber(order, receipt) + if (!number || purchased.id !== number.id || purchased.number !== number.number) { + throw new MessagingProvisionError('invalid_receipt') + } + } + else { + const receipt = await mutate(() => ports.provider.claimIMessage(handle, `${id}:imessage`)) + identityMatches(order, receipt); number = selectedNumber(order, receipt) + } + } + if (!number) return save({ status: 'provider_pending', errorCode: 'number_pending', nextAttemptAt: now + 30_000 }) + if (order.number && (order.number.id !== number.id || order.number.number !== number.number)) throw new MessagingProvisionError('invalid_receipt') + if (order.transport === 'sms' && (number.smsStatus !== 'ready' || number.status !== 'active')) { + // The purchase has completed with an ownership receipt; nothing is in flight while SMS readiness settles. + return save({ number, attempted: false, status: 'provider_pending', nextAttemptAt: now + 30_000, errorCode: 'sms_not_ready' }) + } + return save({ number, phase: 'credential', attempted: false, status: 'pending', errorCode: undefined, nextAttemptAt: undefined }) + } + const number = selectedNumber(order, identity) + if (!number || number.id !== order.number?.id || number.number !== order.number.number || + (order.transport === 'sms' && (number.smsStatus !== 'ready' || number.status !== 'active'))) throw new MessagingProvisionError('invalid_receipt') + if (order.phase === 'credential') { + let credential = await ports.vault.read(order.id) + if (!credential) { + if (order.attempted) return save({ status: 'needs_review', errorCode: 'credential_receipt_lost' }) + if (!await claim()) return (await ports.orders.get(orderId))! + const { identityId, id } = order + const minted = await mutate(() => ports.provider.mintIdentityKey(identityId!, `Tangle number ${id}`)) + credential = { ...minted, identityId: order.identityId } + // No fallible provider read between receiving the secret and durable encryption. + await ports.vault.putIfAbsent(order.id, credential) + } + if (credential.identityId !== order.identityId) throw new MessagingProvisionError('invalid_receipt') + await ports.provider.verifyIdentityKey(credential.key, order.identityId, credential.keyId) + return save({ phase: 'connection', attempted: false, status: 'pending', errorCode: undefined }) + } + const credential = await ports.vault.read(order.id) + if (!credential || credential.identityId !== order.identityId) throw new MessagingProvisionError('invalid_receipt') + if (!await authorize()) return (await ports.orders.get(orderId))! + const connectionId = await ports.bindConnection(order) + if (!connectionId || connectionId.length > 256) throw new MessagingProvisionError('invalid_receipt') + return save({ connectionId, phase: 'complete', status: 'ready_for_setup', attempted: false, errorCode: undefined }) + } catch (error) { + const code = error instanceof MessagingProvisionError ? error.code : 'outcome_unknown' + const retryAfter = error instanceof MessagingProvisionError ? error.retryAfterSeconds : undefined + // A definitive 4xx refusal permits another attempt after account setup. An unknown outcome does not. + const refused = mutationRefused && order.phase !== 'credential' + return save({ status: code === 'invalid_receipt' ? 'needs_review' : 'provider_pending', errorCode: code, + ...(refused ? { attempted: false } : {}), + nextAttemptAt: now + Math.max(30, Math.min(retryAfter ?? 30, 86_400)) * 1000 }) + } +} diff --git a/src/webhooks/index.ts b/src/webhooks/index.ts index 7387176..1ef200c 100644 --- a/src/webhooks/index.ts +++ b/src/webhooks/index.ts @@ -1,12 +1,5 @@ -/** - * Inbound webhook router + pre-built providers. - * - * See `router.ts` for the request lifecycle (verify → parse → - * idempotency → deliver) and `providers.ts` for ready-made provider - * implementations (Stripe, Slack, DocuSeal, Gmail push, GDrive push, - * generic HMAC). - */ - +/** Inbound webhook router and provider implementations. */ export * from './router.js' export * from './providers.js' export * from './twilio.js' +export * from './messaging.js' diff --git a/src/webhooks/messaging.ts b/src/webhooks/messaging.ts new file mode 100644 index 0000000..d5877e9 --- /dev/null +++ b/src/webhooks/messaging.ts @@ -0,0 +1,107 @@ +import { createHmac, timingSafeEqual } from 'node:crypto' +import { verifyHmacSignature, verifyStripeSignature } from '../connectors/webhooks.js' +import type { WebhookEnvelope, WebhookHeaders, WebhookProvider } from './router.js' + +/** A repeated authentication header is ambiguous, never an invitation to pick one. */ +function header(headers: WebhookHeaders, name: string): string | null { + const entries = Object.entries(headers).filter(([key]) => key.toLowerCase() === name) + if (entries.length !== 1) return null + const value = entries[0]?.[1] + return typeof value === 'string' && value.length > 0 && value.length <= 4096 ? value : null +} + +function fresh(timestamp: string | null, now: number): timestamp is string { + return timestamp !== null && /^\d{1,12}$/.test(timestamp) + && Number.isSafeInteger(Number(timestamp)) + && Number.isFinite(now) && Math.abs(now - Number(timestamp)) <= 300 +} + +/** Inkbox signs the literal identity secret and request-id.timestamp.raw-body. */ +export function verifyInkboxWebhook(rawBody: string, headers: WebhookHeaders, secret: string, now = Date.now() / 1000): boolean { + const id = header(headers, 'x-inkbox-request-id') + const timestamp = header(headers, 'x-inkbox-timestamp') + const signature = header(headers, 'x-inkbox-signature') + return Boolean(secret && id && signature && fresh(timestamp, now) + && verifyHmacSignature(`${id}.${timestamp}.${rawBody}`, signature, secret, { signaturePrefix: 'sha256=' })) +} + +/** Both Linq services use Standard Webhooks with a base64-decoded signing key. */ +export function verifyLinqWebhook(rawBody: string, headers: WebhookHeaders, secret: string, now = Date.now() / 1000): boolean { + const id = header(headers, 'webhook-id') + const timestamp = header(headers, 'webhook-timestamp') + const signature = header(headers, 'webhook-signature') + if (!id || !signature || !fresh(timestamp, now) || !secret.startsWith('whsec_')) return false + const encoded = secret.slice(6) + if (!/^[A-Za-z0-9+/]+={0,2}$/.test(encoded)) return false + const key = Buffer.from(encoded, 'base64') + if (key.length < 16 || key.toString('base64') !== encoded) return false + const expected = createHmac('sha256', key).update(`${id}.${timestamp}.${rawBody}`).digest('base64') + return signature.split(' ').some((part) => part.startsWith('v1,') + && part.slice(3).length === expected.length + && timingSafeEqual(Buffer.from(part.slice(3)), Buffer.from(expected))) +} + +function object(value: unknown): value is Record<string, unknown> { + return value !== null && typeof value === 'object' && !Array.isArray(value) +} + +function parse(provider: string, typeField: string, idField: string, input: Parameters<WebhookProvider['parse']>[0]): WebhookEnvelope[] { + if (Buffer.byteLength(input.rawBody, 'utf8') > 1_048_576) throw new Error('Webhook exceeds 1 MiB') + const value: unknown = JSON.parse(input.rawBody) + if (!object(value) || typeof value[typeField] !== 'string' || typeof value[idField] !== 'string' + || !/^[a-z][a-z0-9_.-]{0,100}$/.test(value[typeField] as string) + || !(value[idField] as string).length || (value[idField] as string).length > 256) { + throw new Error('Provider event requires a bounded event type and stable id') + } + return [{ provider, eventType: `${provider}.${value[typeField]}`, providerEventId: value[idField] as string, + receivedAt: input.now ?? Date.now(), payload: value, headers: {} }] +} + +export const inkboxWebhookProvider: WebhookProvider = { + id: 'inkbox', + verifySignature: ({ rawBody, headers, secret }) => verifyInkboxWebhook(rawBody, headers, secret) + ? { valid: true } : { valid: false, reason: 'invalid_signature' }, + parse: (input) => parse('inkbox', 'event_type', 'id', input), + eventCatalog: { namespace: 'inkbox.', closed: false, events: [ + { id: 'inkbox.imessage.received' }, { id: 'inkbox.text.received' }, { id: 'inkbox.message.received' }, + ] }, +} + +export const linqWebhookProvider: WebhookProvider = { + id: 'linq', + verifySignature: ({ rawBody, headers, secret }) => verifyLinqWebhook(rawBody, headers, secret) + ? { valid: true } : { valid: false, reason: 'invalid_signature' }, + parse: (input) => { + const events = parse('linq', 'event_type', 'event_id', input) + const id = header(input.headers, 'webhook-id') + if (!id) throw new Error('Missing signed event identity') + return events.map((event) => ({ ...event, providerEventId: id })) + }, + eventCatalog: { namespace: 'linq.', closed: false, events: [{ id: 'linq.message.received' }] }, +} + +export const contiguityWebhookProvider: WebhookProvider = { + id: 'contiguity', + verifySignature: ({ rawBody, headers, secret }) => { + const signature = header(headers, 'contiguity-signature') + return secret && signature && verifyStripeSignature(rawBody, signature, secret) + ? { valid: true } : { valid: false, reason: 'invalid_signature' } + }, + parse: (input) => parse('contiguity', 'type', 'id', input), + eventCatalog: { namespace: 'contiguity.', closed: false, events: [ + { id: 'contiguity.imessage.incoming' }, { id: 'contiguity.text.incoming.sms' }, + { id: 'contiguity.text.incoming.mms' }, + ] }, +} + +export const linqWhatsappWebhookProvider: WebhookProvider = { + id: 'linq-whatsapp', + verifySignature: ({ rawBody, headers, secret }) => verifyLinqWebhook(rawBody, headers, secret) + ? { valid: true } : { valid: false, reason: 'invalid_signature' }, + parse: (input) => { + const events = parse('linq-whatsapp', 'type', 'id', input) + if (events[0]?.providerEventId !== header(input.headers, 'webhook-id')) throw new Error('Signed event identity mismatch') + return events + }, + eventCatalog: { namespace: 'linq-whatsapp.', closed: false, events: [{ id: 'linq-whatsapp.message.received' }] }, +} diff --git a/tests/apps-client.test.ts b/tests/apps-client.test.ts index 4fb04fe..08a16a9 100644 --- a/tests/apps-client.test.ts +++ b/tests/apps-client.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import { TangleAppsClient, createTangleAppsClient } from '../src/apps' +import { TangleAppsClient, requireBrokerGrantReceipt, createTangleAppsClient } from '../src/apps' import { IntegrationRuntimeError } from '../src/errors' const ENDPOINT = 'https://id.tangle.tools' @@ -174,3 +174,34 @@ describe('TangleAppsClient', () => { expect(fetchImpl).not.toHaveBeenCalled() }) }) + + +describe('durable grant receipts', () => { + const receipt = { access_token: 'sk-tan-broker-fixture', expires_in: 60, scope: 'gmail.messages_read', + connection_id: 'customer-gmail', grant_id: 'grant-owned', user_id: 'platform-alice', client_id: 'assistant-app' } + const expected = { ownerUserId: 'platform-alice', clientId: 'assistant-app', connectionId: 'customer-gmail', scopes: ['gmail.messages_read'] } + async function token(value = receipt) { + const client = new TangleAppsClient({ endpoint: ENDPOINT, fetchImpl: mockFetch(() => jsonResponse(value)) }) + return client.exchangeAuthCode({ clientId: 'assistant-app', clientSecret: 'test-secret', code: 'agc_test', redirectUri: 'https://app.test/callback' }) + } + it('preserves the host-issued grant and principal for later per-call minting', async () => { + const result = await token() + expect(requireBrokerGrantReceipt(result, expected)).toEqual({ grantId: 'grant-owned', connectionId: 'customer-gmail', ownerUserId: 'platform-alice', clientId: 'assistant-app', scopes: ['gmail.messages_read'] }) + }) + it.each(['user_id', 'client_id', 'connection_id', 'grant_id'] as const)('rejects mismatched %s for an existing grant', async field => { + const result = await token({ ...receipt, [field]: 'another-identity' }) + expect(() => requireBrokerGrantReceipt(result, { ...expected, grantId: 'grant-owned' })).toThrow(/does not match/) + }) + it('keeps old hosts compatible for immediate calls, but cannot invent a durable grant', async () => { + const result = await token({ ...receipt, grant_id: undefined, user_id: undefined, client_id: undefined } as unknown as typeof receipt) + expect(result.accessToken).toBe(receipt.access_token) + expect(() => requireBrokerGrantReceipt(result, expected)).toThrow(/does not match/) + }) + it('refuses broader or narrower scope receipts', async () => { + const result = await token({ ...receipt, scope: 'gmail.messages_read gmail.messages_send' }) + expect(() => requireBrokerGrantReceipt(result, expected)).toThrow(/does not match/) + }) + it.each(['', 123, null, 'x'.repeat(257)])('rejects malformed grant identity: %j', async grant_id => { + await expect(token({ ...receipt, grant_id } as unknown as typeof receipt)).rejects.toMatchObject({ code: 'input_invalid', status: 502 }) + }) +}) diff --git a/tests/contiguity.test.ts b/tests/contiguity.test.ts index ab47f04..4e90f33 100644 --- a/tests/contiguity.test.ts +++ b/tests/contiguity.test.ts @@ -2,162 +2,61 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import { contiguityConnector } from '../src/connectors/adapters/contiguity.js' import type { ResolvedDataSource } from '../src/connectors/types.js' -function source(overrides: Partial<ResolvedDataSource> = {}): ResolvedDataSource { - return { - id: 'src_contiguity_1', - projectId: 'proj_1', - publishedAgentId: null, - kind: 'contiguity', - label: 'contiguity test', - consistencyModel: 'authoritative', - scopes: [], - metadata: {}, - credentials: { kind: 'api-key', apiKey: 'contiguity_secret' }, - status: 'active', - ...overrides, - } +const source: ResolvedDataSource = { + id: 'src_contiguity_1', projectId: 'proj_1', publishedAgentId: null, + kind: 'contiguity', label: 'test', consistencyModel: 'advisory', scopes: [], metadata: {}, + credentials: { kind: 'api-key', apiKey: 'contiguity_secret' }, status: 'active', } +const email = { to: 'recipient@example.com', from: 'sender@example.com', subject: 'hello', body: 'world', replyTo: 'reply@example.com' } +afterEach(() => vi.unstubAllGlobals()) -function jsonResponse(body: unknown, init: ResponseInit = {}): Response { - return new Response(JSON.stringify(body), { - status: init.status ?? 200, - headers: { 'content-type': 'application/json' }, +describe('contiguity manifest', () => { + it('retains public kind/category and API-key auth', () => { + expect(contiguityConnector.manifest).toMatchObject({ kind: 'contiguity', category: 'crm', auth: { kind: 'api-key' }, defaultConsistencyModel: 'advisory' }) }) -} - -describe('contiguity adapter manifest', () => { - it('classifies itself as the crm category and exposes the contiguity kind', () => { - expect(contiguityConnector.manifest.kind).toBe('contiguity') - expect(contiguityConnector.manifest.category).toBe('crm') - expect(contiguityConnector.manifest.defaultConsistencyModel).toBe('authoritative') - }) - - it('uses api-key auth', () => { - expect(contiguityConnector.manifest.auth.kind).toBe('api-key') - }) - - it('exposes send-message capabilities including the canonical sms.send and email.send', () => { - const names = contiguityConnector.manifest.capabilities.map((c) => c.name).sort() - expect(names).toEqual( - ['email.send', 'messages.send_imessage', 'messages.send_text', 'sms.send'].sort(), - ) - const mutations = contiguityConnector.manifest.capabilities - .filter((c) => c.class === 'mutation') - .map((c) => c.name) - .sort() - expect(mutations).toEqual( - ['email.send', 'messages.send_imessage', 'messages.send_text', 'sms.send'].sort(), - ) + it('preserves send action names and adds owned-number discovery', () => { + expect(contiguityConnector.manifest.capabilities.map((c) => c.name).sort()).toEqual(['email.send', 'messages.send_imessage', 'messages.send_text', 'numbers.list', 'sms.send']) }) - - it('marks newly added mutations as native-idempotency external effects', () => { - const added = contiguityConnector.manifest.capabilities.filter( - (c) => c.name === 'email.send' || c.name === 'sms.send', - ) - expect(added).toHaveLength(2) - for (const cap of added) { - if (cap.class !== 'mutation') throw new Error(`${cap.name} must be a mutation`) - expect(cap.cas).toBe('native-idempotency') - expect(cap.externalEffect).toBe(true) - } + it('does not claim undocumented provider-native idempotency', () => { + const mutations = contiguityConnector.manifest.capabilities.filter((c) => c.class === 'mutation') + expect(mutations).toHaveLength(4) + for (const cap of mutations) expect(cap).toMatchObject({ cas: 'none', externalEffect: true }) }) }) -describe('contiguity email.send', () => { - afterEach(() => vi.unstubAllGlobals()) - - it('POSTs /v1/send/email with bearer auth and the assembled JSON body', async () => { - let requestUrl: string | undefined - let requestMethod: string | undefined - let requestHeaders: Record<string, string> = {} - let requestBody: unknown - const fetchMock = vi.fn(async (input: RequestInfo | URL, init?: RequestInit) => { - requestUrl = String(input) - requestMethod = init?.method - requestHeaders = Object.fromEntries( - Object.entries((init?.headers ?? {}) as Record<string, string>), - ) - requestBody = init?.body ? JSON.parse(init.body as string) : null - return jsonResponse({ id: 'msg_email_1', status: 'queued' }) - }) - vi.stubGlobal('fetch', fetchMock) - - const result = await contiguityConnector.executeMutation!({ - source: source(), - capabilityName: 'email.send', - args: { - to: 'recipient@example.com', - from: 'sender@example.com', - subject: 'hello', - body: 'world', - contentType: 'text/plain', - replyTo: 'reply@example.com', - }, - idempotencyKey: 'k-email-1', - }) - - expect(result.status).toBe('committed') - expect(requestMethod).toBe('POST') - expect(String(requestUrl)).toContain('/v1/send/email') - expect(requestHeaders.authorization).toBe('Bearer contiguity_secret') - expect(requestBody).toEqual({ - to: 'recipient@example.com', - from: 'sender@example.com', - subject: 'hello', - body: 'world', - contentType: 'text/plain', - replyTo: 'reply@example.com', - }) - }) - - it('surfaces CredentialsExpired on 401', async () => { - vi.stubGlobal( - 'fetch', - vi.fn(async () => new Response('unauthorized', { status: 401 })), - ) - await expect( - contiguityConnector.executeMutation!({ - source: source(), - capabilityName: 'email.send', - args: { - to: 'recipient@example.com', - from: 'sender@example.com', - subject: 'hello', - body: 'world', - contentType: 'text/plain', - replyTo: 'reply@example.com', - }, - idempotencyKey: 'k-email-1', - }), - ).rejects.toMatchObject({ name: 'CredentialsExpired' }) - }) -}) - -describe('contiguity sms.send', () => { - afterEach(() => vi.unstubAllGlobals()) - - it('POSTs to /v1/messages/send/text with the SMS payload', async () => { - let requestUrl: string | undefined - let requestMethod: string | undefined - let requestBody: unknown - const fetchMock = vi.fn(async (input: RequestInfo | URL, init?: RequestInit) => { - requestUrl = String(input) - requestMethod = init?.method - requestBody = init?.body ? JSON.parse(init.body as string) : null - return jsonResponse({ id: 'msg_sms_1' }) - }) - vi.stubGlobal('fetch', fetchMock) - - const result = await contiguityConnector.executeMutation!({ - source: source(), - capabilityName: 'sms.send', - args: { to: '+15551234567', from: '+15557654321', message: 'hey there' }, - idempotencyKey: 'k-sms-1', - }) - +describe('contiguity wire contracts', () => { + it.each(['text/plain', 'text/html'] as const)('maps %s body and reply_to to POST /send/email', async (contentType) => { + const send = vi.fn(async (_url: RequestInfo | URL, _init?: RequestInit) => Response.json({ id: 'request', data: { message_id: 'message' } })) + vi.stubGlobal('fetch', send) + const result = await contiguityConnector.executeMutation!({ source, capabilityName: 'email.send', args: { ...email, contentType, text: 'unapproved', html: 'unapproved' }, idempotencyKey: 'key' }) expect(result.status).toBe('committed') - expect(requestMethod).toBe('POST') - expect(String(requestUrl)).toContain('/v1/messages/send/text') - expect(requestBody).toMatchObject({ to: '+15551234567', from: '+15557654321', message: 'hey there' }) + expect(send).toHaveBeenCalledTimes(1) + const [url, init] = send.mock.calls[0]! + expect(String(url)).toBe('https://api.contiguity.com/send/email') + expect(init?.method).toBe('POST') + expect(new Headers(init?.headers).get('authorization')).toBe('Bearer contiguity_secret') + expect(JSON.parse(String(init?.body))).toEqual({ to: email.to, from: email.from, subject: email.subject, [contentType === 'text/html' ? 'html' : 'text']: 'world', reply_to: email.replyTo }) + }) + it('rejects unsupported content types before a request', async () => { + const send = vi.fn(); vi.stubGlobal('fetch', send) + await expect(contiguityConnector.executeMutation!({ source, capabilityName: 'email.send', args: { ...email, contentType: 'application/javascript' }, idempotencyKey: 'invalid-content' })).rejects.toThrow('contentType') + expect(send).not.toHaveBeenCalled() + }) + it('surfaces credential expiration without retrying', async () => { + const send = vi.fn(async () => new Response('unauthorized', { status: 401 })); vi.stubGlobal('fetch', send) + await expect(contiguityConnector.executeMutation!({ source, capabilityName: 'email.send', args: email, idempotencyKey: 'key' })).rejects.toMatchObject({ name: 'CredentialsExpired' }) + expect(send).toHaveBeenCalledTimes(1) + }) + it('sends SMS to /send/text with the explicit sender', async () => { + const send = vi.fn(async (_url: RequestInfo | URL, _init?: RequestInit) => Response.json({ id: 'request' })); vi.stubGlobal('fetch', send) + const args = { to: '+15550000001', from: '+15550000002', message: 'Hello' } + await contiguityConnector.executeMutation!({ source, capabilityName: 'sms.send', args, idempotencyKey: 'key' }) + expect(String(send.mock.calls[0]![0])).toBe('https://api.contiguity.com/send/text') + expect(JSON.parse(String(send.mock.calls[0]![1]?.body))).toEqual(args) + }) + it('does not silently pick a sender when none was authorized', async () => { + const send = vi.fn(); vi.stubGlobal('fetch', send) + await expect(contiguityConnector.executeMutation!({ source, capabilityName: 'sms.send', args: { to: '+15550000001', message: 'Hello' }, idempotencyKey: 'missing-sender' })).rejects.toThrow() + expect(send).not.toHaveBeenCalled() }) }) diff --git a/tests/conversation-endpoint-options.test.ts b/tests/conversation-endpoint-options.test.ts new file mode 100644 index 0000000..3a7a5d0 --- /dev/null +++ b/tests/conversation-endpoint-options.test.ts @@ -0,0 +1,17 @@ +import { describe, expect, it } from 'vitest' +import { conversationEndpointOptions, listConversationChannels } from '../src/conversation-events/channels.js' +const row = { id: '550e8400-e29b-41d4-a716-446655440000', phone_number: '+15551234567', reputation: { status: 'HEALTHY' } } +describe('owned conversation endpoints', () => { + it('exposes inventory without claiming a purchase API', () => { + expect(listConversationChannels().find(c => c.providerId === 'linq')).toMatchObject({ inventoryAction: 'linq.numbers.list', numberProvisioning: 'provider-assigned' }) + expect(conversationEndpointOptions('linq', { phone_numbers: [row] })).toEqual([{ id: row.id, address: row.phone_number, providerId: 'linq', channel: 'imessage', health: 'healthy' }]) + }) + it.each([{}, { phone_numbers: {} }, { phone_numbers: [{...row, id: ''}] }, { phone_numbers: [{...row, phone_number: '15551234567'}] }, { phone_numbers: [row, row] }])('rejects unproven endpoint inventory %j', payload => { + expect(() => conversationEndpointOptions('linq', payload)).toThrow() + }) + it('keeps missing health unknown and critical lines explicit', () => { + expect(conversationEndpointOptions('linq', { phone_numbers: [{...row, reputation: undefined}] })[0].health).toBe('unknown') + expect(conversationEndpointOptions('linq', { phone_numbers: [{...row, reputation: {status:'CRITICAL'}}] })[0].health).toBe('critical') + }) + it('does not reuse another provider protocol', () => expect(() => conversationEndpointOptions('inkbox', { phone_numbers: [row] })).toThrow(/not available/)) +}) diff --git a/tests/declarative-rest-adapters.test.ts b/tests/declarative-rest-adapters.test.ts index 47bb1b3..7c3089e 100644 --- a/tests/declarative-rest-adapters.test.ts +++ b/tests/declarative-rest-adapters.test.ts @@ -135,6 +135,39 @@ describe('declarative REST adapters', () => { expect(fetchMock).not.toHaveBeenCalled() }) + it.each(['.', '..'])('refuses a %s path argument before provider traffic', async (id) => { + const fetchMock = mockFetch({ ok: true }) + await expect(pathConnector.executeMutation!({ + source: sourceFor({ ...connection, connectorId: 'path-test' }), + capabilityName: 'records.delete', + args: { id }, + idempotencyKey: 'path-1', + })).rejects.toThrow('invalid path argument: dot segment') + expect(fetchMock).not.toHaveBeenCalled() + }) + + it('keeps a dot segment the template itself declares', async () => { + const fetchMock = mockFetch({ ok: true }) + await pathConnector.executeMutation!({ + source: sourceFor({ ...connection, connectorId: 'path-test' }), + capabilityName: 'records.purge', + args: { id: 'r1' }, + idempotencyKey: 'path-3', + }) + expect(String(fetchMock.mock.calls[0]![0])).toBe('https://path.example.test/purge/r1') + }) + + it('keeps a dotted path argument inside its own segment', async () => { + const fetchMock = mockFetch({ ok: true }) + await pathConnector.executeMutation!({ + source: sourceFor({ ...connection, connectorId: 'path-test' }), + capabilityName: 'records.delete', + args: { id: '../admin' }, + idempotencyKey: 'path-2', + }) + expect(String(fetchMock.mock.calls[0]![0])).toBe('https://path.example.test/v1/records/..%2Fadmin') + }) + it('uses provider-specific credential placement for GitLab', async () => { const fetchMock = mockFetch([{ id: 1 }]) const provider = createConnectorAdapterProvider({ @@ -177,6 +210,33 @@ const formConnector = declarativeRestConnector({ }], }) +const pathConnector = declarativeRestConnector({ + kind: 'path-test', + displayName: 'Path Test', + description: 'Exercises path argument interpolation.', + auth: { kind: 'api-key', hint: 'Test token.' }, + category: 'other', + defaultConsistencyModel: 'authoritative', + baseUrl: 'https://path.example.test/v1', + capabilities: [{ + name: 'records.delete', + class: 'mutation', + description: 'Delete a record.', + parameters: { type: 'object', properties: { id: { type: 'string' } } }, + request: { method: 'DELETE', path: '/records/{id}' }, + cas: 'none', + externalEffect: true, + }, { + name: 'records.purge', + class: 'mutation', + description: 'Purge a record outside the versioned prefix.', + parameters: { type: 'object', properties: { id: { type: 'string' } } }, + request: { method: 'DELETE', path: '/../purge/{id}' }, + cas: 'none', + externalEffect: true, + }], +}) + function sourceFor(conn: IntegrationConnection): ResolvedDataSource { return { id: `source_${conn.connectorId}`, diff --git a/tests/linq-whatsapp.test.ts b/tests/linq-whatsapp.test.ts new file mode 100644 index 0000000..d1e596d --- /dev/null +++ b/tests/linq-whatsapp.test.ts @@ -0,0 +1,100 @@ +import { createHmac } from 'node:crypto' +import { afterEach, describe, expect, it, vi } from 'vitest' +import { linqWhatsappConnector } from '../src/connectors/adapters/linq-whatsapp.js' +import { listConversationChannels, normalizeConversationEvent, buildMessagingReply } from '../src/conversation-events/index.js' +import { linqWhatsappWebhookProvider } from '../src/webhooks/messaging.js' +import { WebhookRouter } from '../src/webhooks/router.js' +import type { ResolvedDataSource } from '../src/connectors/types.js' + +const now = 1_800_000_000_000 +const secret = `whsec_${Buffer.alloc(32, 7).toString('base64')}` +const source: ResolvedDataSource = { id: 'connection', projectId: 'project', publishedAgentId: null, + kind: 'linq-whatsapp', label: 'WhatsApp', consistencyModel: 'advisory', scopes: [], metadata: {}, + credentials: { kind: 'api-key', apiKey: 'fixture-brand-key' }, status: 'active' } +const payload = () => ({ id: 'event-1', type: 'message.received', timestamp: new Date(now).toISOString(), data: { + chat_id: 'chat-1', message: { id: 'message-1', chat_id: 'chat-1', direction: 'inbound', + created_at: new Date(now).toISOString(), from: '+15550000002', parts: [{ type: 'text', body: 'Find a desk' }] }, +} }) +const input = (value: unknown = payload()) => ({ provider: 'linq-whatsapp', type: 'linq-whatsapp.message.received', payload: value }) +function headers(raw: string, id = 'event-1', timestamp = now / 1000) { + return { 'webhook-id': id, 'webhook-timestamp': String(timestamp), + 'webhook-signature': `v1,${createHmac('sha256', Buffer.alloc(32, 7)).update(`${id}.${timestamp}.${raw}`).digest('base64')}` } +} +afterEach(() => { vi.unstubAllGlobals(); vi.useRealTimers() }) + +describe('Linq WhatsApp wire contract', () => { + it('uses the separate service, pinned chat and host-owned idempotency header', async () => { + const send = vi.fn(async (_url: RequestInfo | URL, _init?: RequestInit) => Response.json({ id: 'accepted' }, { status: 202 })) + vi.stubGlobal('fetch', send) + const result = await linqWhatsappConnector.executeMutation!({ source, capabilityName: 'messages.reply', + args: { chat_id: 'chat/1', text: 'Two options', requestKey: 'model-controlled', to: 'wrong' }, idempotencyKey: 'operation-1' }) + expect(result.status).toBe('committed') + expect(send).toHaveBeenCalledTimes(1) + const [url, init] = send.mock.calls[0]! + expect(String(url)).toBe('https://whatsapp.messages.api.linqapp.com/v1/chats/chat%2F1/messages') + expect(new Headers(init?.headers).get('idempotency-key')).toBe('operation-1') + expect(new Headers(init?.headers).get('authorization')).toBe('Bearer fixture-brand-key') + expect(JSON.parse(String(init?.body))).toEqual({ parts: [{ type: 'text', body: 'Two options' }] }) + }) + it.each(['', 'x'.repeat(256), 'bad\nkey', 'bad key', 'é'])('rejects invalid operation keys: %j', async key => { + const send = vi.fn(); vi.stubGlobal('fetch', send) + await expect(linqWhatsappConnector.executeMutation!({ source, capabilityName: 'messages.reply', args: { chat_id: 'c', text: 'Hi' }, idempotencyKey: key })).rejects.toThrow('operation key') + expect(send).not.toHaveBeenCalled() + }) + it('does not retry an uncertain send or substitute a template on refusal', async () => { + const send = vi.fn(async () => { throw new Error('response lost') }); vi.stubGlobal('fetch', send) + await expect(linqWhatsappConnector.executeMutation!({ source, capabilityName: 'messages.reply', args: { chat_id: 'c', text: 'Hi' }, idempotencyKey: 'op' })).rejects.toThrow('response lost') + expect(send).toHaveBeenCalledTimes(1) + }) + it('treats a throttled read as a failure, not message history', async () => { + vi.stubGlobal('fetch', async () => new Response('{}', { status: 429, headers: { 'retry-after': '4' } })) + await expect(linqWhatsappConnector.executeRead!({ source, capabilityName: 'chats.get', args: { chat_id: 'chat' }, idempotencyKey: 'read' })).rejects.toMatchObject({ name: 'ProviderRateLimited' }) + }) +}) + +describe('WhatsApp events and replies', () => { + it('does not mistake the owned destination number for the customer', () => { + const result = normalizeConversationEvent(input()) + expect(result).toMatchObject({ ok: true, event: { provider: 'linq-whatsapp', eventId: 'message-1', conversationId: 'chat-1', + sender: { id: 'customer:chat-1', address: null }, destinations: [{ address: '+15550000002' }], text: 'Find a desk' } }) + expect(buildMessagingReply(input(), 'Found two', 'op')).toEqual({ ok: true, reply: { idempotencyKey: 'op', action: 'linq-whatsapp.messages.reply', input: { chat_id: 'chat-1', text: 'Found two' } } }) + }) + it.each(['outbound', 'unknown'])('ignores %s direction', direction => { + const value = payload(); value.data.message.direction = direction + expect(normalizeConversationEvent(input(value)).ok).toBe(false) + }) + it('does not execute delivery receipts, mismatched chats or historical range-only events', () => { + const value = payload(); value.type = 'message.delivered' + expect(normalizeConversationEvent(input(value)).ok).toBe(false) + value.type = 'message.received'; value.data.chat_id = 'other' + expect(normalizeConversationEvent(input(value)).ok).toBe(false) + expect(normalizeConversationEvent(input({ ...payload(), data: { chat_id: 'chat-1', seq_from: 1, seq_to: 2 } })).ok).toBe(false) + }) + it('requires text handling rather than silently dropping attachments', () => { + const value = { ...payload(), data: { ...payload().data, message: { ...payload().data.message, parts: [{ type: 'media', media_id: 'opaque' }] } } } + expect(normalizeConversationEvent(input(value)).ok).toBe(false) + expect(buildMessagingReply(input(), 'x'.repeat(4097), 'op').ok).toBe(false) + }) + it('lists each supported transport once without implying account readiness', () => { + const channels = listConversationChannels() + expect(channels.some(c => c.providerId === 'linq-whatsapp' && c.transport === 'whatsapp')).toBe(true) + expect(channels.some(c => c.providerId === 'email' && c.sourceKind === 'channel')).toBe(true) + expect(new Set(channels.map(c => `${c.providerId}:${c.eventType}`)).size).toBe(channels.length) + channels.length = 0 + expect(listConversationChannels().length).toBeGreaterThan(0) + }) + it('verifies raw bytes and deduplicates using the existing router', async () => { + vi.useFakeTimers(); vi.setSystemTime(now) + const deliver = vi.fn() + const router = new WebhookRouter({ providers: [linqWhatsappWebhookProvider], runtime: 'test', resolveSecret: () => secret, deliver }) + const rawBody = JSON.stringify(payload()), request = { providerId: 'linq-whatsapp', rawBody, headers: headers(rawBody) } + expect((await router.handle(request)).status).toBe(200) + expect((await router.handle(request)).status).toBe(200) + expect(deliver).toHaveBeenCalledTimes(1) + expect((await router.handle({ ...request, rawBody: rawBody + ' ' })).status).toBe(401) + expect((await router.handle({ ...request, headers: headers(rawBody, 'event-1', now / 1000 - 301) })).status).toBe(401) + const mismatch = await router.handle({ ...request, headers: headers(rawBody, 'different-id') }) + expect(mismatch.status).toBeGreaterThanOrEqual(400) + expect(deliver).toHaveBeenCalledTimes(1) + }) +}) diff --git a/tests/managed-messaging-provision.test.ts b/tests/managed-messaging-provision.test.ts new file mode 100644 index 0000000..e5114a5 --- /dev/null +++ b/tests/managed-messaging-provision.test.ts @@ -0,0 +1,197 @@ +import { describe, it } from 'vitest' +import assert from 'node:assert/strict' +import { advanceManagedNumber, type InkboxIdentity, type ManagedNumberOrder, type ManagedNumberPorts, MessagingProvisionError } from '../src/managed-messaging/index.js' + +function fixture(transport: 'sms' | 'imessage' = 'sms') { + let row: ManagedNumberOrder = { id:'order1',ownerId:'alice',handle:'tng-order1',organizationId:'org',transport, + fundingAuthorizationId:'ledger-receipt',version:0,phase:'identity',attempted:false,status:'pending' } + let identity: InkboxIdentity | null = null + let credential: {key:string;keyId:string;identityId:string} | null = null + let now=1_000_000 + let allowed=true, funded=true + const counts={identity:0,number:0,key:0,bind:0,funding:0,verify:0} + const number={id:'line1',number:'+15551112222',smsStatus:'ready',status:'active'} + const ports: ManagedNumberPorts = { + now:()=>now, + orders:{get:async()=>structuredClone(row),saveIfVersion:async(next,version)=>{ + if(row.version!==version) return false; row=structuredClone(next);return true + }}, + canProvision:async()=>allowed, + authorizeFunding:async()=>{counts.funding++; return funded}, + provider:{ + getIdentity:async()=>structuredClone(identity), + createIdentity:async()=>{counts.identity++;identity={id:'identity1',handle:'tng-order1',organizationId:'org',status:'active',imessageEnabled:false,sms:null,imessage:null};return structuredClone(identity)}, + claimIMessage:async()=>{counts.number++;identity={...identity!,imessageEnabled:true,imessage:number};return structuredClone(identity)}, + provisionSms:async()=>{counts.number++;identity={...identity!,sms:number};return {...number}}, + mintIdentityKey:async()=>{counts.key++;return {key:'secret-fixture',keyId:'key1'}}, + verifyIdentityKey:async()=>{counts.verify++}, + }, + vault:{read:async()=>structuredClone(credential),putIfAbsent:async(_id,value)=>{ + if(credential && JSON.stringify(credential)!==JSON.stringify(value)) throw new Error('conflict') + credential=structuredClone(value) + }}, + bindConnection:async()=>{counts.bind++;return 'connection1'}, + } + const tick=()=>advanceManagedNumber('order1',ports) + return {ports,counts,tick,get row(){return row},get identity(){return identity}, + setIdentity:(value:InkboxIdentity|null)=>{identity=value},setRow:(patch:Partial<ManagedNumberOrder>)=>{row={...row,...patch}}, + setAllowed:(value:boolean)=>{allowed=value},setFunded:(value:boolean)=>{funded=value},advance:()=>{now+=60_000}, + get credential(){return credential}, setCredential:(value:typeof credential)=>{credential=value}} +} + +describe('recoverable managed number provisioning',()=>{ + for(const transport of ['sms','imessage'] as const) it(`provisions ${transport}, vaults a scoped key and stops before claiming handset readiness`,async()=>{ + const f=fixture(transport) + for(let n=0;n<4;n++) await f.tick() + assert.equal(f.row.status,'ready_for_setup');assert.equal(f.row.connectionId,'connection1') + assert.deepEqual({identity:f.counts.identity,number:f.counts.number,key:f.counts.key,bind:f.counts.bind},{identity:1,number:1,key:1,bind:1}) + assert(!JSON.stringify(f.row).includes('secret-fixture')) + await f.tick();assert.equal(f.counts.bind,1) + }) + it('does no provider work when credentials or commercial activation are unavailable',async()=>{ + const f=fixture();f.setAllowed(false);await f.tick() + assert.equal(f.row.errorCode,'activation_not_configured');assert.equal(f.counts.identity,0);assert.equal(f.counts.funding,0) + }) + it('does no provider work without ledger authorization',async()=>{ + const f=fixture();f.setFunded(false);await f.tick();assert.equal(f.row.errorCode,'funding_required');assert.equal(f.counts.identity,0) + }) + it('serializes concurrent initial calls through the atomic order version',async()=>{ + const f=fixture();await Promise.all(Array.from({length:12},()=>f.tick())) + assert.equal(f.counts.identity,1) + }) + it('recovers an identity created before a lost response without creating another',async()=>{ + const f=fixture();const create=f.ports.provider.createIdentity + f.ports.provider.createIdentity=async handle=>{await create(handle);throw new MessagingProvisionError('outcome_unknown')} + await f.tick();f.advance();await f.tick();assert.equal(f.row.phase,'number');assert.equal(f.counts.identity,1) + }) + it('does not adopt an identity that existed before this order tried to create it',async()=>{ + const f=fixture();await f.ports.provider.createIdentity('tng-order1');await f.tick() + assert.equal(f.row.errorCode,'identity_already_exists');assert.equal(f.row.identityId,undefined) + }) + it('does not repeat a journaled identity POST with no recoverable receipt',async()=>{ + const f=fixture();f.setRow({attempted:true});await f.tick();assert.equal(f.row.errorCode,'identity_outcome_unknown');assert.equal(f.counts.identity,0) + }) + it('refuses a provider account mismatch',async()=>{ + const f=fixture();await f.tick();f.setIdentity({...f.identity!,organizationId:'foreign'}) + await f.tick();assert.equal(f.row.status,'needs_review');assert.equal(f.counts.number,0) + }) + it('recovers an SMS purchase whose HTTP response was lost',async()=>{ + const f=fixture();await f.tick();const buy=f.ports.provider.provisionSms + f.ports.provider.provisionSms=async(...args)=>{await buy(...args);throw new MessagingProvisionError('outcome_unknown')} + await f.tick();f.advance();await f.tick();assert.equal(f.row.phase,'credential');assert.equal(f.counts.number,1) + }) + it('does not clear a prior unknown purchase after an unrelated read receives 401',async()=>{ + const f=fixture();await f.tick();f.setRow({attempted:true}) + f.ports.provider.getIdentity=async()=>{throw new MessagingProvisionError('provider_rejected',401)} + await f.tick();assert.equal(f.row.attempted,true);assert.equal(f.counts.number,0) + }) + it('waits for SMS readiness without buying another number',async()=>{ + const f=fixture();await f.tick();f.ports.provider.provisionSms=async()=>{ + f.counts.number++;const pending={id:'line1',number:'+15551112222',smsStatus:'pending',status:'active'} + f.setIdentity({...f.identity!,sms:pending});return pending + } + await f.tick();assert.equal(f.row.errorCode,'sms_not_ready');assert.equal(f.counts.key,0) + f.advance();await f.tick();assert.equal(f.counts.number,1) + f.setIdentity({...f.identity!,sms:{...f.identity!.sms!,smsStatus:'ready',status:'active'}}) + f.advance();await f.tick();assert.equal(f.row.phase,'credential') + }) + it('does not mint another credential after its once-shown receipt is lost',async()=>{ + const f=fixture();await f.tick();await f.tick() + f.ports.provider.mintIdentityKey=async()=>{f.counts.key++;throw new MessagingProvisionError('outcome_unknown')} + await f.tick();f.advance();await f.tick() + assert.equal(f.row.errorCode,'credential_receipt_lost');assert.equal(f.counts.key,1) + }) + it('recovers when encryption completed before the order update was lost',async()=>{ + const f=fixture();await f.tick();await f.tick() + const put=f.ports.vault.putIfAbsent + f.ports.vault.putIfAbsent=async(id,value)=>{await put(id,value);throw new Error('process interrupted after durable write')} + await f.tick();f.advance();await f.tick() + assert.equal(f.row.phase,'connection');assert.equal(f.counts.key,1) + }) + it('persists the credential before attempting key-scope verification',async()=>{ + const f=fixture();await f.tick();await f.tick() + f.ports.provider.verifyIdentityKey=async()=>{assert.equal(f.credential?.key,'secret-fixture');throw new Error('read temporarily unavailable')} + await f.tick();assert.equal(f.counts.key,1);f.advance();await f.tick();assert.equal(f.counts.key,1) + }) + it('does not bind a changed provider number to the original customer',async()=>{ + const f=fixture();await f.tick();await f.tick();f.setIdentity({...f.identity!,sms:{...f.identity!.sms!,id:'foreign-line'}}) + await f.tick();assert.equal(f.row.status,'needs_review');assert.equal(f.counts.key,0) + }) + it('rechecks cancellation after a slow funding check, before the provider call',async()=>{ + const f=fixture();f.ports.authorizeFunding=async()=>{f.setRow({status:'cancelled',version:f.row.version+1});return true} + await f.tick();assert.equal(f.row.status,'cancelled');assert.equal(f.counts.identity,0) + }) + it('does not buy a second number when the ownership read after a purchase fails',async()=>{ + const f=fixture();await f.tick() + const read=f.ports.provider.getIdentity;let purchased=false + const buy=f.ports.provider.provisionSms + f.ports.provider.provisionSms=async(...args)=>{const line=await buy(...args);purchased=true;return line} + // The purchase lands, but the identity read that follows it fails. + f.ports.provider.getIdentity=async handle=>{if(purchased)throw new MessagingProvisionError('provider_rejected',503);return read(handle)} + await f.tick();assert.equal(f.row.attempted,true);assert.equal(f.counts.number,1) + // The provider has not yet attached the line to the identity: review, never repurchase. + f.ports.provider.getIdentity=async()=>({...f.identity!,sms:null}) + f.advance();await f.tick();assert.equal(f.counts.number,1);assert.equal(f.row.errorCode,'number_outcome_unknown') + }) + it('permits another attempt only when the purchase itself is refused',async()=>{ + const f=fixture();await f.tick() + f.ports.provider.provisionSms=async()=>{f.counts.number++;throw new MessagingProvisionError('provider_rejected',402)} + await f.tick();assert.equal(f.row.attempted,false);assert.equal(f.row.errorCode,'provider_rejected') + }) + it('sends each SMS purchase with the order operation key',async()=>{ + const f=fixture();await f.tick();const keys:string[]=[] + const buy=f.ports.provider.provisionSms + f.ports.provider.provisionSms=async(handle,operationId,state)=>{keys.push(operationId);return buy(handle,operationId,state)} + await f.tick();assert.deepEqual(keys,['order1:sms']) + }) + it('releases the attempt journal when authorization fails before any provider call',async()=>{ + const f=fixture();let checks=0 + f.ports.authorizeFunding=async()=>{f.counts.funding++;if(++checks===2)throw new Error('ledger timeout');return true} + await f.tick();assert.equal(f.row.attempted,false);assert.equal(f.counts.identity,0) + f.advance();await f.tick();assert.equal(f.row.phase,'number');assert.equal(f.counts.identity,1) + }) + it('releases the attempt journal when funding is refused on the recheck',async()=>{ + const f=fixture();let checks=0 + f.ports.authorizeFunding=async()=>{f.counts.funding++;return ++checks!==2} + await f.tick();assert.equal(f.row.attempted,false);assert.equal(f.row.errorCode,'funding_required');assert.equal(f.counts.identity,0) + }) + it('waits for an accepted iMessage claim to receive its line without review',async()=>{ + const f=fixture('imessage');await f.tick() + f.ports.provider.claimIMessage=async()=>{f.counts.number++;f.setIdentity({...f.identity!,imessageEnabled:true,imessage:null});return structuredClone(f.identity!)} + await f.tick();assert.equal(f.row.errorCode,'number_pending');assert.equal(f.row.status,'provider_pending') + f.advance();await f.tick();assert.equal(f.row.errorCode,'number_pending');assert.equal(f.counts.number,1) + f.setIdentity({...f.identity!,imessage:{id:'line1',number:'+15551112222',smsStatus:null,status:'active'}}) + f.advance();await f.tick();assert.equal(f.row.phase,'credential');assert.equal(f.counts.number,1) + }) + it('records a number bought while the order was cancelled',async()=>{ + const f=fixture();await f.tick() + const buy=f.ports.provider.provisionSms + f.ports.provider.provisionSms=async(...args)=>{const line=await buy(...args);f.setRow({status:'cancelled',version:f.row.version+1});return line} + await f.tick() + assert.equal(f.row.status,'cancelled');assert.equal(f.row.number?.id,'line1');assert.equal(f.counts.number,1) + }) + it('backs off an order that cannot be funded',async()=>{ + const f=fixture();f.setFunded(false);await f.tick() + assert.equal(f.row.errorCode,'funding_required');assert.ok((f.row.nextAttemptAt??0)>1_000_000) + await f.tick();assert.equal(f.counts.funding,1) + f.setFunded(true);f.advance();await f.tick();assert.equal(f.row.phase,'number') + }) + it('clears the purchase journal once a number is recorded while SMS readiness settles',async()=>{ + const f=fixture();await f.tick();f.ports.provider.provisionSms=async()=>{ + f.counts.number++;const pending={id:'line1',number:'+15551112222',smsStatus:'pending',status:'active'} + f.setIdentity({...f.identity!,sms:pending});return pending + } + await f.tick();assert.equal(f.row.errorCode,'sms_not_ready');assert.equal(f.row.attempted,false);assert.equal(f.row.number?.id,'line1') + }) + it('reviews rather than repurchases when a recorded number disappears',async()=>{ + const f=fixture();await f.tick();f.ports.provider.provisionSms=async()=>{ + f.counts.number++;const pending={id:'line1',number:'+15551112222',smsStatus:'pending',status:'active'} + f.setIdentity({...f.identity!,sms:pending});return pending + } + await f.tick();f.setIdentity({...f.identity!,sms:null}) + f.advance();await f.tick();assert.equal(f.row.errorCode,'number_missing');assert.equal(f.counts.number,1) + }) + it('does not mutate a stopped order',async()=>{ + const f=fixture();f.setRow({status:'cancelled'});await f.tick();assert.equal(f.counts.funding,0);assert.equal(f.counts.identity,0) + }) +}) diff --git a/tests/managed-messaging-provisioner.test.ts b/tests/managed-messaging-provisioner.test.ts new file mode 100644 index 0000000..ebbf9c8 --- /dev/null +++ b/tests/managed-messaging-provisioner.test.ts @@ -0,0 +1,136 @@ +import { describe, it } from 'vitest' +import assert from 'node:assert/strict' +import { InkboxProvisioner, MessagingProvisionError, parseInkboxIdentity } from '../src/managed-messaging/index.js' + +const identityId = '550e8400-e29b-41d4-a716-446655440000' +const numberId = '550e8400-e29b-41d4-a716-446655440001' +const identity = { id: identityId, agent_handle: 'tng-fixture', organization_id: 'org', status: 'active', + imessage_enabled: false, phone_number: null, imessage_number: null } +const number = { id: numberId, number: '+15551112222', sms_status: 'pending', status: 'active' } +function fixture(...responses: Array<unknown | Response | Error>) { + const calls: Array<{ url: string; init: RequestInit }> = [] + const fetchImpl: typeof fetch = async (input, init = {}) => { + calls.push({ url: String(input), init }) + const next = responses.shift() + if (next instanceof Error) throw next + return next instanceof Response ? next : Response.json(next) + } + return { client: new InkboxProvisioner({ adminKey: 'admin-fixture', fetchImpl }), calls } +} + +describe('host-only Inkbox provisioner', () => { + it('requires configuration before issuing HTTP', () => { + assert.throws(() => new InkboxProvisioner({ adminKey: '' }), /unavailable/) + assert.throws(() => new InkboxProvisioner({ adminKey: 'key\nattack' }), /unavailable/) + assert.throws(() => new InkboxProvisioner({ adminKey: 'key', timeoutMs: Infinity }), /invalid_input/) + }) + it('does not serialize administrative credentials with the client', () => { + assert(!JSON.stringify(fixture().client).includes('admin-fixture')) + }) + it('checks administrative scope without leaking the self response', async () => { + const f = fixture({ scoped_identity_id: null, status: 'active' }) + await f.client.verifyAdminKey() + assert.equal(f.calls[0].url, 'https://inkbox.ai/api/v1/api-keys/self') + await assert.rejects(fixture({ scoped_identity_id: identityId, status: 'active' }).client.verifyAdminKey(), /invalid_receipt/) + }) + it('creates a private identity with no inherited vault or organization mail domain', async () => { + const f = fixture(identity) + const receipt = await f.client.createIdentity('tng-fixture') + assert.equal(receipt.id, identityId) + assert.equal(f.calls[0].url, 'https://inkbox.ai/api/v1/identities') + assert.equal(f.calls[0].init.redirect, 'error') + assert.deepEqual(JSON.parse(String(f.calls[0].init.body)), { + agent_handle: 'tng-fixture', imessage_enabled: false, contact_sharing_enabled: false, mailbox: { sending_domain: null }, + }) + }) + it('pins the iMessage claim to one durable operation key', async () => { + const f = fixture({ ...identity, imessage_enabled: true, imessage_number: number }) + const receipt = await f.client.claimIMessage('tng-fixture', 'order1:claim') + assert.equal(receipt.imessage?.number, number.number) + assert.equal(f.calls[0].init.method, 'PATCH') + assert.equal(new Headers(f.calls[0].init.headers).get('Idempotency-Key'), 'order1:claim') + assert.deepEqual(JSON.parse(String(f.calls[0].init.body)), { imessage_enabled: true, claim_imessage_number: true }) + }) + it('provisions SMS with voice explicitly rejected and preserves pending readiness', async () => { + const f = fixture(number) + assert.equal((await f.client.provisionSms('tng-fixture', 'order1:sms', 'CA')).smsStatus, 'pending') + assert.deepEqual(JSON.parse(String(f.calls[0].init.body)), { + agent_handle: 'tng-fixture', type: 'local', incoming_call_action: 'auto_reject', state: 'CA', + }) + assert.equal(new Headers(f.calls[0].init.headers).get('Idempotency-Key'), 'order1:sms') + }) + it('refuses an SMS purchase without a stable operation key', async () => { + const f = fixture(number) + await assert.rejects(f.client.provisionSms('tng-fixture', ''), { code: 'invalid_input' }) + assert.equal(f.calls.length, 0) + }) + for (const value of ['../foreign', 'ab', 'UPPERCASE', 'bad--handle', 'x'.repeat(64)]) { + it(`rejects an invalid handle before HTTP: ${value}`, async () => { + const f = fixture(identity) + await assert.rejects(f.client.createIdentity(value), /invalid_input/) + assert.equal(f.calls.length, 0) + }) + } + it('rejects a receipt for another handle', async () => { + await assert.rejects(fixture({ ...identity, agent_handle: 'foreign' }).client.getIdentity('tng-fixture'), /invalid_receipt/) + }) + for (const status of [408, 429, 500, 503]) { + it(`reports a read failing with HTTP ${status} as unavailable, never as a refusal`, async () => { + await assert.rejects(fixture(new Response('busy', { status })).client.getIdentity('tng-fixture'), { code: 'unavailable', status }) + }) + } + it('keeps a missing identity distinct from an authentication failure', async () => { + assert.equal(await fixture(new Response(null, { status: 404 })).client.getIdentity('tng-fixture'), null) + await assert.rejects(fixture(new Response('no', { status: 401 })).client.getIdentity('tng-fixture'), { code: 'provider_rejected', status: 401 }) + }) + it('returns a once-shown scoped credential immediately for durable encryption', async () => { + const f = fixture({ api_key: 'private-fixture', record: { id: 'key1', scoped_identity_id: identityId } }) + assert.deepEqual(await f.client.mintIdentityKey(identityId, 'order1'), { key: 'private-fixture', keyId: 'key1' }) + assert.equal(f.calls.length, 1) // No fallible read between receipt and host persistence. + }) + it('verifies a persisted scoped key without using the admin credential', async () => { + const f = fixture({ id: 'key1', scoped_identity_id: identityId, status: 'active' }) + await f.client.verifyIdentityKey('private-fixture', identityId, 'key1') + assert.equal(new Headers(f.calls[0].init.headers).get('X-API-Key'), 'private-fixture') + await assert.rejects(fixture({ id: 'key1', scoped_identity_id: null, status: 'active' }).client.verifyIdentityKey('k', identityId, 'key1'), /invalid_receipt/) + }) + it('does not accept an admin key disguised as a customer credential receipt', async () => { + const f = fixture({ api_key: 'never-echo-this', record: { id: 'key1', scoped_identity_id: null } }) + await assert.rejects(f.client.mintIdentityKey(identityId, 'order1'), error => { + assert(error instanceof MessagingProvisionError) + assert(!String(error).includes('never-echo-this')) + return true + }) + }) + for (const status of [408, 500, 502, 503]) { + it(`retains an uncertain mutation at HTTP ${status} without retrying`, async () => { + const f = fixture(new Response('sensitive-provider-detail', { status, headers: { 'Retry-After': '3600' } })) + await assert.rejects(f.client.provisionSms('tng-fixture', 'order1:sms'), { code: 'outcome_unknown', status, retryAfterSeconds: 3600 }) + assert.equal(f.calls.length, 1) + }) + } + it('never retries transport loss or returns a secret-bearing error', async () => { + const f = fixture(new Error('admin-fixture secret-provider-diagnostic')) + await assert.rejects(f.client.provisionSms('tng-fixture', 'order1:sms'), error => { + assert(error instanceof MessagingProvisionError) + assert.equal(error.code, 'outcome_unknown') + assert(!String(error).includes('admin-fixture')) + return true + }) + assert.equal(f.calls.length, 1) + }) + it('rejects malformed and oversized receipts without exposing their bodies', async () => { + await assert.rejects(fixture(new Response('not json')).client.createIdentity('tng-fixture'), /invalid_receipt/) + await assert.rejects(fixture(new Response('x'.repeat(1_048_577))).client.createIdentity('tng-fixture'), /invalid_receipt/) + }) + it('never includes unrelated identity fields in public receipts', () => { + const value = parseInkboxIdentity({ ...identity, signing_key: 'secret', tunnel: { credentials: 'private' } }) + assert(!JSON.stringify(value).includes('secret')) + assert(!JSON.stringify(value).includes('credentials')) + }) + it('accepts idempotent deletion and refuses failed carrier release', async () => { + await fixture(new Response(null, { status: 204 })).client.deleteIdentity('tng-fixture') + await fixture(new Response(null, { status: 404 })).client.deleteIdentity('tng-fixture') + await assert.rejects(fixture(new Response(null, { status: 502 })).client.deleteIdentity('tng-fixture'), { code: 'outcome_unknown' }) + }) +}) diff --git a/tests/managed-number-ownership.test.ts b/tests/managed-number-ownership.test.ts new file mode 100644 index 0000000..4483f46 --- /dev/null +++ b/tests/managed-number-ownership.test.ts @@ -0,0 +1,54 @@ +import { describe, it, expect } from 'vitest' +import { advanceManagedNumber, type InkboxIdentity, type ManagedNumberOrder, type ManagedNumberPorts } from '../src/managed-messaging/index.js' + +function fixture() { + let row: ManagedNumberOrder = { id: 'order1', ownerId: 'alice', handle: 'tng-order1', organizationId: 'org', transport: 'sms', + fundingAuthorizationId: 'funding', version: 0, phase: 'number', attempted: false, status: 'pending', identityId: 'identity1' } + let identity: InkboxIdentity = { id: 'identity1', handle: 'tng-order1', organizationId: 'org', status: 'active', imessageEnabled: false, sms: null, imessage: null } + let purchases = 0, now = 1000000 + const ports: ManagedNumberPorts = { + now: () => now, + orders: { get: async () => structuredClone(row), saveIfVersion: async (next, version) => { + if (row.version !== version) return false; row = structuredClone(next); return true + } }, + canProvision: async () => true, authorizeFunding: async () => true, + provider: { + getIdentity: async () => structuredClone(identity), + createIdentity: async () => { throw new Error('unexpected identity creation') }, + claimIMessage: async () => { throw new Error('unexpected iMessage claim') }, + provisionSms: async () => { + purchases++; identity.sms = { id: 'line1', number: '+15551112222', smsStatus: 'ready', status: 'active' }; return { ...identity.sms } + }, + mintIdentityKey: async () => { throw new Error('not reached before owned receipt') }, + verifyIdentityKey: async () => {}, + }, + vault: { read: async () => null, putIfAbsent: async () => {} }, + bindConnection: async () => { throw new Error('not reached before owned receipt') }, + } + return { ports, tick: () => advanceManagedNumber('order1', ports), get row() { return row }, get purchases() { return purchases }, + foreignOwner: () => { identity.organizationId = 'foreign' }, advance: () => { now += 60000 } } +} + +describe('billable SMS ownership receipts', () => { + it.each(['id', 'number'] as const)('does not persist a mismatched purchased %s as billable', async field => { + const f = fixture(), buy = f.ports.provider.provisionSms + f.ports.provider.provisionSms = async (...args) => ({ ...await buy(...args), [field]: field === 'id' ? 'foreign-line' : '+15559998888' }) + await f.tick() + expect(f.row.status).toBe('needs_review'); expect(f.row.number).toBeUndefined(); expect(f.purchases).toBe(1) + }) + it('requires the identity owner to remain unchanged during purchase', async () => { + const f = fixture(), buy = f.ports.provider.provisionSms + f.ports.provider.provisionSms = async (...args) => { const number = await buy(...args); f.foreignOwner(); return number } + await f.tick(); expect(f.row.status).toBe('needs_review'); expect(f.row.number).toBeUndefined() + }) + it('reconciles a lost ownership read without purchasing again', async () => { + const f = fixture(), read = f.ports.provider.getIdentity + let fail = true + f.ports.provider.getIdentity = async handle => { + if (f.purchases && fail) { fail = false; throw new Error('read response lost') } + return read(handle) + } + await f.tick(); expect(f.row.number).toBeUndefined() + f.advance(); await f.tick(); expect(f.row.phase).toBe('credential'); expect(f.purchases).toBe(1) + }) +}) diff --git a/tests/messaging-providers.test.ts b/tests/messaging-providers.test.ts new file mode 100644 index 0000000..be43f9e --- /dev/null +++ b/tests/messaging-providers.test.ts @@ -0,0 +1,165 @@ +import { createHmac } from 'node:crypto' +import { afterEach, describe, expect, it, vi } from 'vitest' +import { inkboxWebhookProvider, linqWebhookProvider, contiguityWebhookProvider, verifyInkboxWebhook, verifyLinqWebhook } from '../src/webhooks/messaging.js' +import { normalizeConversationEvent, buildMessagingReply } from '../src/conversation-events/index.js' +import { WebhookRouter } from '../src/webhooks/router.js' +import { inkboxConnector } from '../src/connectors/adapters/inkbox.js' +import { linqConnector } from '../src/connectors/adapters/linq.js' +import { contiguityConnector } from '../src/connectors/adapters/contiguity.js' +import type { ResolvedDataSource } from '../src/connectors/types.js' + +const now = 1800000000000 +const iso = new Date(now).toISOString() +const secret = 'literal-test-signing-key-never-a-credential' +const linqSecret = `whsec_${Buffer.alloc(32, 7).toString('base64')}` +const fixtures = { + inkbox: { id: 'evt-i', event_type: 'imessage.received', timestamp: iso, data: { message: { + id: 'msg-i', conversation_id: 'conversation-i', direction: 'inbound', sender_number: '+15550000001', + content: 'Find a desk', created_at: iso, is_group: false, media: null, + } } }, + linq: { event_id: 'evt-l', event_type: 'message.received', webhook_version: '2026-02-03', created_at: iso, data: { + id: 'msg-l', direction: 'inbound', chat: { id: 'chat-l', is_group: false, owner_handle: { handle: '+15550000002', is_me: true } }, + sender_handle: { handle: '+15550000001', is_me: false }, parts: [{ type: 'text', value: 'Find a desk' }], + } }, + contiguity: { id: 'evt-c', type: 'imessage.incoming', timestamp: now / 1000, data: { + from: '+15550000001', to: '+15550000002', body: 'Find a desk', timestamp: now / 1000, attachments: [], + } }, +} +const providers = { inkbox: inkboxWebhookProvider, linq: linqWebhookProvider, contiguity: contiguityWebhookProvider } +type Provider = keyof typeof providers +const hmac = (key: string | Buffer, text: string, format: 'hex' | 'base64' = 'hex') => createHmac('sha256', key).update(text).digest(format) +function headers(provider: Provider, raw: string, ts = now / 1000): Record<string, string> { + if (provider === 'inkbox') return { 'x-inkbox-request-id': 'request', 'x-inkbox-timestamp': String(ts), 'x-inkbox-signature': `sha256=${hmac(secret, `request.${ts}.${raw}`)}` } + if (provider === 'linq') return { 'webhook-id': 'request', 'webhook-timestamp': String(ts), 'webhook-signature': `v1,${hmac(Buffer.alloc(32, 7), `request.${ts}.${raw}`, 'base64')}` } + return { 'contiguity-signature': `t=${ts},v1=${hmac(secret, `${ts}.${raw}`)}` } +} +function input(provider: Provider, payload: unknown = fixtures[provider]) { + const raw = payload as Record<string, unknown> + return { provider, type: `${provider}.${raw.event_type ?? raw.type}`, payload } +} +afterEach(() => { vi.useRealTimers(); vi.unstubAllGlobals() }) + +describe.each(Object.keys(providers) as Provider[])('%s verified ingress', (provider) => { + it('verifies exact bytes, normalizes and deduplicates through the existing router', async () => { + vi.useFakeTimers(); vi.setSystemTime(now) + const rawBody = JSON.stringify(fixtures[provider]) + const delivered: unknown[] = [] + const router = new WebhookRouter({ providers: [providers[provider]], runtime: 'test', + resolveSecret: () => provider === 'linq' ? linqSecret : secret, + deliver: async (event) => { + const normalized = normalizeConversationEvent({ provider: event.provider, type: event.eventType, payload: event.payload }) + expect(normalized.ok).toBe(true); delivered.push(normalized) + }, + }) + const request = { providerId: provider, rawBody, headers: headers(provider, rawBody) } + expect((await router.handle(request)).status).toBe(200) + expect((await router.handle(request)).status).toBe(200) + expect(delivered).toHaveLength(1) + expect((await router.handle({ ...request, rawBody: rawBody + ' ' })).status).toBe(401) + }) + it.each([-301, 301])('rejects a correctly signed event %i seconds away', (skew) => { + vi.useFakeTimers(); vi.setSystemTime(now) + const rawBody = JSON.stringify(fixtures[provider]) + expect(providers[provider].verifySignature({ rawBody, headers: headers(provider, rawBody, now / 1000 + skew), secret: provider === 'linq' ? linqSecret : secret }).valid).toBe(false) + }) + it('rejects missing, repeated and wrong-key signatures', () => { + vi.useFakeTimers(); vi.setSystemTime(now) + const rawBody = JSON.stringify(fixtures[provider]); const hs = headers(provider, rawBody) + const key = Object.keys(hs).find((k) => k.endsWith('signature'))! + expect(providers[provider].verifySignature({ rawBody, headers: {}, secret }).valid).toBe(false) + expect(providers[provider].verifySignature({ rawBody, headers: hs, secret: 'wrong' }).valid).toBe(false) + expect(providers[provider].verifySignature({ rawBody, headers: { ...hs, [key.toUpperCase()]: hs[key]! }, secret: provider === 'linq' ? linqSecret : secret }).valid).toBe(false) + }) + it('derives replies from recorded peers, not model-selected destinations', () => { + const result = buildMessagingReply(input(provider), 'Found two options', 'stable-operation') + expect(result.ok).toBe(true) + if (result.ok) expect(JSON.stringify(result.reply.input)).not.toContain('credential') + // Every retry of this reply must reuse the caller's key, whatever the provider. + if (result.ok) expect(result.reply.idempotencyKey).toBe('stable-operation') + }) + it('does not interpret delivery status as a new user instruction', () => { + const changed = { ...fixtures[provider], event_type: 'message.delivered', type: 'message.delivered' } + expect(normalizeConversationEvent(input(provider, changed)).ok).toBe(false) + }) +}) + +it('does not confuse provider signing formats', () => { + const raw = '{}', ts = now / 1000 + expect(verifyInkboxWebhook(raw, headers('linq', raw), secret, ts)).toBe(false) + expect(verifyLinqWebhook(raw, headers('inkbox', raw), linqSecret, ts)).toBe(false) + expect(verifyLinqWebhook(raw, headers('linq', raw), 'whsec_bad!', ts)).toBe(false) +}) +it('accepts Linq key rotation signature lists', () => { + const raw = '{}', hs = headers('linq', raw) + expect(verifyLinqWebhook(raw, { ...hs, 'webhook-signature': `v1,${'x'.repeat(44)} ${hs['webhook-signature']}` }, linqSecret, now / 1000)).toBe(true) +}) +it('keeps reconciled Linq history out of automatic replies', () => { + const fixture = { ...fixtures.linq, data: { ...fixtures.linq.data, reconciled_at: iso } } + expect(buildMessagingReply(input('linq', fixture), 'reply', 'op').ok).toBe(false) +}) +it('rejects future unreviewed Linq webhook versions', () => { + expect(normalizeConversationEvent(input('linq', { ...fixtures.linq, webhook_version: 'unknown' })).ok).toBe(false) +}) +it('rejects outbound Linq echoes', () => { + const fixture = structuredClone(fixtures.linq); fixture.data.direction = 'outbound' + expect(normalizeConversationEvent(input('linq', fixture)).ok).toBe(false) +}) +it('does not treat group participant snapshots as authority to reply', () => { + const fixture = structuredClone(fixtures.inkbox); fixture.data.message.is_group = true + expect(buildMessagingReply(input('inkbox', fixture), 'reply', 'op').ok).toBe(false) +}) +it('keeps Contiguity number pairs and transports distinct', () => { + const a = normalizeConversationEvent(input('contiguity')) + const b = normalizeConversationEvent(input('contiguity', { ...fixtures.contiguity, type: 'text.incoming.sms' })) + expect(a.ok && b.ok && a.event.conversationId !== b.event.conversationId).toBe(true) +}) +it('requires explicit owned phone id for Inkbox SMS replies', () => { + const message = { id: 'sms', conversation_id: 'sms-chat', direction: 'inbound', sender_phone_number: '+15550000001', local_phone_number: '+15550000002', text: 'Hello', created_at: iso } + const fixture = { id: 'evt', event_type: 'text.received', data: { text_message: message } } + expect(normalizeConversationEvent(input('inkbox', fixture)).ok).toBe(true) + expect(buildMessagingReply(input('inkbox', fixture), 'Hello', 'op').ok).toBe(false) + expect(buildMessagingReply(input('inkbox', { ...fixture, data: { text_message: { ...message, phone_number_id: 'phone' } } }), 'Hello', 'op')).toMatchObject({ ok: true, reply: { action: 'inkbox.sms.reply', input: { phone_number_id: 'phone', conversation_id: 'sms-chat' } } }) +}) +it('replies to one email sender without propagating BCC', () => { + const fixture = { id: 'mail-evt', event_type: 'message.received', timestamp: iso, data: { message: { id: 'mail-id', thread_id: 'thread-id', direction: 'inbound', from_address: 'peer@example.com', email_address: 'agent@example.com', body: 'Hello', body_state: 'complete', subject: 'Desk', bcc_addresses: ['secret@example.com'] } } } + expect(buildMessagingReply(input('inkbox', fixture), 'Here are options', 'op')).toMatchObject({ ok: true, reply: { action: 'inkbox.email.send', input: { to: ['peer@example.com'], email_address: 'agent@example.com', in_reply_to_message_id: 'mail-id', subject: 'Re: Desk' } } }) + fixture.data.message.body_state = 'truncated' + expect(buildMessagingReply(input('inkbox', fixture), 'reply', 'op').ok).toBe(false) +}) +it('rejects dangerous attachment references without fetching them', () => { + const fixture = { ...fixtures.inkbox, data: { message: { ...fixtures.inkbox.data.message, media: [{ url: 'http://169.254.169.254/secret' }] } } } + expect(normalizeConversationEvent(input('inkbox', fixture)).ok).toBe(false) + fixture.data.message.media = Array.from({ length: 51 }, () => ({ url: 'https://example.com/file' })) + expect(normalizeConversationEvent(input('inkbox', fixture)).ok).toBe(false) +}) + +const source = (kind: string): ResolvedDataSource => ({ id: 'source', projectId: 'project', publishedAgentId: null, kind, label: kind, consistencyModel: 'advisory', scopes: [], metadata: {}, credentials: { kind: 'api-key', apiKey: 'fixture-secret' }, status: 'active' }) +describe('documented outbound provider contracts', () => { + it.each([ + ['inkbox', inkboxConnector, 'imessage.reply', { conversation_id: 'chat', text: 'Hello' }, 'https://inkbox.ai/api/v1/imessage/messages', { conversation_id: 'chat', text: 'Hello' }], + ['linq', linqConnector, 'messages.reply', { chat_id: 'chat', text: 'Hello', message_key: 'operation' }, 'https://api.linqapp.com/api/partner/v3/chats/chat/messages', { message: { parts: [{ type: 'text', value: 'Hello' }], idempotency_key: 'operation' } }], + ['contiguity', contiguityConnector, 'messages.send_imessage', { to: '+15550000001', from: '+15550000002', message: 'Hello' }, 'https://api.contiguity.com/send/imessage', { to: '+15550000001', from: '+15550000002', message: 'Hello' }], + ] as const)('%s uses its documented API shape', async (kind, adapter, capabilityName, args, url, body) => { + const request = vi.fn(async (_input: RequestInfo | URL, _init?: RequestInit) => Response.json({ id: 'accepted' })) + vi.stubGlobal('fetch', request) + const result = await adapter.executeMutation!({ source: source(kind), capabilityName, args: { ...args }, idempotencyKey: 'operation' }) + expect(request).toHaveBeenCalledTimes(1) + expect(String(request.mock.calls[0]![0])).toBe(url) + const init = request.mock.calls[0]![1] as RequestInit + expect(JSON.parse(String(init.body))).toEqual(body) + const hs = new Headers(init.headers) + expect(kind === 'inkbox' ? hs.get('x-api-key') : hs.get('authorization')).toBe(kind === 'inkbox' ? 'fixture-secret' : 'Bearer fixture-secret') + expect(result.status).toBe('committed') // Adapter acceptance, not delivery. + }) + it('propagates an uncertain send without retrying', async () => { + const request = vi.fn(async () => { throw new Error('connection reset after write') }); vi.stubGlobal('fetch', request) + await expect(inkboxConnector.executeMutation!({ source: source('inkbox'), capabilityName: 'imessage.reply', args: { conversation_id: 'chat', text: 'Hello' }, idempotencyKey: 'operation' })).rejects.toThrow() + expect(request).toHaveBeenCalledTimes(1) + }) + it('does not expose number purchasing or signing key rotation to an agent', () => { + for (const adapter of [inkboxConnector, linqConnector, contiguityConnector]) { + expect(adapter.manifest.capabilities.some((c) => /purchase|provision|rotate|lease/.test(c.name))).toBe(false) + expect(adapter.manifest.capabilities.filter((c) => c.class === 'mutation').every((c) => c.class === 'mutation' && c.externalEffect === true)).toBe(true) + } + }) +}) diff --git a/tsup.config.ts b/tsup.config.ts index 58671d7..4087999 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -23,6 +23,7 @@ export default defineConfig({ mcp: 'src/mcp.ts', 'tangle-search/index': 'src/tangle-search/index.ts', 'twilio/index': 'src/twilio/index.ts', + 'managed-messaging/index': 'src/managed-messaging/index.ts', }, format: ['esm'], dts: true,